/ Hex Artifact Content
Login

Artifact e6f069b07fdef1ab54034940b7a6e7be2b4efd57:


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 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
3390: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
33a0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
33b0: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  umbers..*/.#defi
33c0: 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29  ne MIN(A,B) ((A)
33d0: 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 64  <(B)?(A):(B)).#d
33e0: 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20 28  efine MAX(A,B) (
33f0: 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29 29  (A)>(B)?(A):(B))
3400: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f  ../*.** Check to
3410: 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63   see if this mac
3420: 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43  hine uses EBCDIC
3430: 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65  .  (Yes, believe
3440: 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74   it or.** not, t
3450: 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d  here are still m
3460: 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72  achines out ther
3470: 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49  e that use EBCDI
3480: 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d  C.).*/.#if 'A' =
3490: 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e  = '\301'.# defin
34a0: 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20  e SQLITE_EBCDIC 
34b0: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
34c0: 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a   SQLITE_ASCII 1.
34d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
34e0: 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20  tegers of known 
34f0: 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79  sizes.  These ty
3500: 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61  pedefs might cha
3510: 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63  nge for architec
3520: 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74  tures.** where t
3530: 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20  he sizes very.  
3540: 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  Preprocessor mac
3550: 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  ros are availabl
3560: 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a  e so that the.**
3570: 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f   types can be co
3580: 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66  nveniently redef
3590: 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  ined at compile-
35a0: 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73  type.  Like this
35b0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  :.**.**         
35c0: 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59  cc '-DUINTPTR_TY
35d0: 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74  PE=long long int
35e0: 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ' ....*/.#ifndef
35f0: 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69   UINT32_TYPE.# i
3600: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32  fdef HAVE_UINT32
3610: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
3620: 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f  T32_TYPE uint32_
3630: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
3640: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
3650: 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e  nsigned int.# en
3660: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
3670: 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23  ef UINT16_TYPE.#
3680: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
3690: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  16_T.#  define U
36a0: 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31  INT16_TYPE uint1
36b0: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
36c0: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
36d0: 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20   unsigned short 
36e0: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
36f0: 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36  if.#ifndef INT16
3700: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
3710: 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  VE_INT16_T.#  de
3720: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
3730: 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23  int16_t.# else.#
3740: 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54    define INT16_T
3750: 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  YPE short int.# 
3760: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3770: 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a  ndef UINT8_TYPE.
3780: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
3790: 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  T8_T.#  define U
37a0: 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f  INT8_TYPE uint8_
37b0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
37c0: 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e  ne UINT8_TYPE un
37d0: 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e  signed char.# en
37e0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
37f0: 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69  ef INT8_TYPE.# i
3800: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54  fdef HAVE_INT8_T
3810: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
3820: 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c  TYPE int8_t.# el
3830: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  se.#  define INT
3840: 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68  8_TYPE signed ch
3850: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
3860: 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f  f.#ifndef LONGDO
3870: 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69  UBLE_TYPE.# defi
3880: 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ne LONGDOUBLE_TY
3890: 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23  PE long double.#
38a0: 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71  endif.typedef sq
38b0: 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20  lite_int64 i64; 
38c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
38d0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
38e0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c  r */.typedef sql
38f0: 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20  ite_uint64 u64; 
3900: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
3910: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
3920: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
3930: 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20  NT32_TYPE u32;  
3940: 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79           /* 4-by
3950: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
3960: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
3970: 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20  INT16_TYPE u16; 
3980: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
3990: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
39a0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
39b0: 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20  INT16_TYPE i16; 
39c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
39d0: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
39e0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
39f0: 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20  INT8_TYPE u8;   
3a00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
3a10: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
3a20: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
3a30: 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20  INT8_TYPE i8;   
3a40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
3a50: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
3a60: 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51  ger */../*.** SQ
3a70: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20  LITE_MAX_U32 is 
3a80: 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74  a u64 constant t
3a90: 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d  hat is the maxim
3aa0: 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20  um u64 value.** 
3ab0: 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72  that can be stor
3ac0: 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74 68  ed in a u32 with
3ad0: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61  out loss of data
3ae0: 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
3af0: 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66 66  is 0x00000000fff
3b00: 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63 61  fffff.  But beca
3b10: 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66  use of quirks of
3b20: 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c   some compilers,
3b30: 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73   we.** have to s
3b40: 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75 65  pecify the value
3b50: 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74   in the less int
3b60: 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68  uitive manner sh
3b70: 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  own:.*/.#define 
3b80: 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20  SQLITE_MAX_U32  
3b90: 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d  ((((u64)1)<<32)-
3ba0: 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  1)../*.** The da
3bb0: 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20 73  tatype used to s
3bc0: 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f  tore estimates o
3bd0: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
3be0: 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62  rows in a.** tab
3bf0: 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68  le or index.  Th
3c00: 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  is is an unsigne
3c10: 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20  d integer type. 
3c20: 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a   For 99.9% of.**
3c30: 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32   the world, a 32
3c40: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20  -bit integer is 
3c50: 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74  sufficient.  But
3c60: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
3c70: 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  r.** can be used
3c80: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
3c90: 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a   if desired..*/.
3ca0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34  #ifdef SQLITE_64
3cb0: 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64  BIT_STATS. typed
3cc0: 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20  ef u64 tRowcnt; 
3cd0: 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c     /* 64-bit onl
3ce0: 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20 61  y if requested a
3cf0: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a  t compile-time *
3d00: 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66  /.#else. typedef
3d10: 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20   u32 tRowcnt;   
3d20: 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68   /* 32-bit is th
3d30: 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e  e default */.#en
3d40: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
3d50: 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  s to determine w
3d60: 68 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69  hether the machi
3d70: 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74  ne is big or lit
3d80: 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 65  tle endian,.** e
3d90: 76 61 6c 75 61 74 65 64 20 61 74 20 72 75 6e 74  valuated at runt
3da0: 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ime..*/.#ifdef S
3db0: 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
3dc0: 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  ON.const int sql
3dd0: 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c  ite3one = 1;.#el
3de0: 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  se.extern const 
3df0: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
3e00: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
3e10: 65 64 28 69 33 38 36 29 20 7c 7c 20 64 65 66 69  ed(i386) || defi
3e20: 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 7c 7c  ned(__i386__) ||
3e30: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36   defined(_M_IX86
3e40: 29 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )\.             
3e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
3e70: 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  _64) || defined(
3e80: 5f 5f 78 38 36 5f 36 34 5f 5f 29 0a 23 20 64 65  __x86_64__).# de
3e90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
3ea0: 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66  NDIAN    0.# def
3eb0: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c  ine SQLITE_LITTL
3ec0: 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69  EENDIAN 1.# defi
3ed0: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
3ee0: 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54  ATIVE  SQLITE_UT
3ef0: 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 64 65  F16LE.#else.# de
3f00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
3f10: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
3f20: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
3f30: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
3f40: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
3f50: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
3f60: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
3f70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
3f80: 46 31 36 4e 41 54 49 56 45 20 28 53 51 4c 49 54  F16NATIVE (SQLIT
3f90: 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49  E_BIGENDIAN?SQLI
3fa0: 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54  TE_UTF16BE:SQLIT
3fb0: 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69  E_UTF16LE).#endi
3fc0: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e  f../*.** Constan
3fd0: 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65  ts for the large
3fe0: 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20  st and smallest 
3ff0: 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20  possible 64-bit 
4000: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e  signed integers.
4010: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
4020: 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f   are designed to
4030: 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20   work correctly 
4040: 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61  on both 32-bit a
4050: 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d  nd 64-bit.** com
4060: 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  pilers..*/.#defi
4070: 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34  ne LARGEST_INT64
4080: 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28 28    (0xffffffff|((
4090: 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (i64)0x7fffffff)
40a0: 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53  <<32)).#define S
40b0: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28  MALLEST_INT64 ((
40c0: 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45  (i64)-1) - LARGE
40d0: 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a  ST_INT64)../* .*
40e0: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
40f0: 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ber to the next 
4100: 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20  larger multiple 
4110: 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75  of 8.  This is u
4120: 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20  sed.** to force 
4130: 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  8-byte alignment
4140: 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69   on 64-bit archi
4150: 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65  tectures..*/.#de
4160: 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20  fine ROUND8(x)  
4170: 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a     (((x)+7)&~7).
4180: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77  ./*.** Round dow
4190: 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74  n to the nearest
41a0: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a   multiple of 8.*
41b0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44  /.#define ROUNDD
41c0: 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29  OWN8(x) ((x)&~7)
41d0: 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74  ../*.** Assert t
41e0: 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  hat the pointer 
41f0: 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20  X is aligned to 
4200: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
4210: 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63  ry.  This.** mac
4220: 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  ro is used only 
4230: 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20  within assert() 
4240: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
4250: 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20  he code gets.** 
4260: 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65  all alignment re
4270: 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65  strictions corre
4280: 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74  ct..**.** Except
4290: 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  , if SQLITE_4_BY
42a0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
42b0: 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  C is defined, th
42c0: 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c  en the.** underl
42d0: 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d  ying malloc() im
42e0: 70 6c 65 6d 65 6e 74 69 6f 6e 20 6d 69 67 68 74  plemention might
42f0: 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74   return us 4-byt
4300: 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69  e aligned.** poi
4310: 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20  nters.  In that 
4320: 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66  case, only verif
4330: 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  y 4-byte alignme
4340: 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  nt..*/.#ifdef SQ
4350: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
4360: 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66  NED_MALLOC.# def
4370: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
4380: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
4390: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
43a0: 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23  har*)0)&3)==0).#
43b0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49  else.# define EI
43c0: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
43d0: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
43e0: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
43f0: 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  )&7)==0).#endif.
4400: 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d  ./*.** Disable M
4410: 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  MAP on platforms
4420: 20 77 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f   where it is kno
4430: 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a  wn to not work.*
4440: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
4450: 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65  OpenBSD__) || de
4460: 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f  fined(__QNXNTO__
4470: 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
4480: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
4490: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
44a0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
44b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
44c0: 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a  ault maximum siz
44d0: 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64  e of memory used
44e0: 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65   by memory-mappe
44f0: 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53  d I/O in the VFS
4500: 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50  .*/.#ifdef __APP
4510: 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c  LE__.# include <
4520: 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61  TargetConditiona
4530: 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52 47 45  ls.h>.# if TARGE
4540: 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20 20 20  T_OS_IPHONE.#   
4550: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  undef SQLITE_MAX
4560: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20 20 64  _MMAP_SIZE.#   d
4570: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
4580: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65  _MMAP_SIZE 0.# e
4590: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
45a0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
45b0: 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65  MAP_SIZE.# if de
45c0: 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29  fined(__linux__)
45d0: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
45e0: 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28  _WIN32) \.  || (
45f0: 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
4600: 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f  _) && defined(__
4610: 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20  MACH__)) \.  || 
4620: 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 0a 23  defined(__sun).#
4630: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
4640: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
4650: 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31  x7fff0000  /* 21
4660: 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c  47418112 */.# el
4670: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
4680: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
4690: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64  ZE 0.# endif.# d
46a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
46b0: 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20  _MMAP_SIZE_xc 1 
46c0: 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* exclude from 
46d0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
46e0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
46f0: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
4700: 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c  s zero on all pl
4710: 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76  atforms.  Or, ev
4720: 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a  en if a larger.*
4730: 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53  * default MMAP_S
4740: 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64  IZE is specified
4750: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
4760: 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  , make sure that
4770: 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20   it does.** not 
4780: 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d  exceed the maxim
4790: 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f  um mmap size..*/
47a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
47b0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
47c0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
47d0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
47e0: 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53  IZE 0.# define S
47f0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
4800: 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a  AP_SIZE_xc 1  /*
4810: 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74   Exclude from ct
4820: 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a  ime.c */.#endif.
4830: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
4840: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
4850: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
4860: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
4870: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
4880: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
4890: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
48a0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
48b0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
48c0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
48d0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
48e0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
48f0: 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
4900: 74 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72  the busy-handler
4910: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
4920: 20 61 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20   a given sqlite 
4930: 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54  handle. .**.** T
4940: 68 65 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61  he sqlite.busyHa
4950: 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20  ndler member of 
4960: 74 68 65 20 73 71 6c 69 74 65 20 73 74 72 75 63  the sqlite struc
4970: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62  t contains the b
4980: 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  usy.** callback 
4990: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
49a0: 20 68 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61   handle. Each pa
49b0: 67 65 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74  ger opened via t
49c0: 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e  he sqlite.** han
49d0: 64 6c 65 20 69 73 20 70 61 73 73 65 64 20 61 20  dle is passed a 
49e0: 70 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74  pointer to sqlit
49f0: 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54  e.busyHandler. T
4a00: 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a  he busy-handler.
4a10: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63  ** callback is c
4a20: 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64  urrently invoked
4a30: 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69   only from withi
4a40: 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79  n pager.c..*/.ty
4a50: 70 65 64 65 66 20 73 74 72 75 63 74 20 42 75 73  pedef struct Bus
4a60: 79 48 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e  yHandler BusyHan
4a70: 64 6c 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73  dler;.struct Bus
4a80: 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74  yHandler {.  int
4a90: 20 28 2a 78 46 75 6e 63 29 28 76 6f 69 64 20 2a   (*xFunc)(void *
4aa0: 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62  ,int);  /* The b
4ab0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
4ac0: 20 20 76 6f 69 64 20 2a 70 41 72 67 3b 20 20 20    void *pArg;   
4ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4ae0: 46 69 72 73 74 20 61 72 67 20 74 6f 20 62 75 73  First arg to bus
4af0: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
4b00: 69 6e 74 20 6e 42 75 73 79 3b 20 20 20 20 20 20  int nBusy;      
4b10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
4b20: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
4b30: 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f  ach busy call */
4b40: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
4b50: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
4b60: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
4b70: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
4b80: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
4b90: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
4ba0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
4bb0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
4bc0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
4bd0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
4be0: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
4bf0: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
4c00: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
4c10: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
4c20: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
4c30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
4c40: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
4c50: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
4c60: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
4c70: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
4c80: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
4c90: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
4ca0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
4cb0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
4cc0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
4cd0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
4ce0: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
4cf0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
4d00: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
4d10: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
4d20: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
4d30: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
4d40: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
4d50: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
4d60: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
4d70: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
4d80: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
4d90: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
4da0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
4db0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
4dc0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
4dd0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
4de0: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
4df0: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
4e00: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
4e10: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
4e20: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
4e30: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
4e40: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
4e50: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
4e60: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
4e70: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
4e80: 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20 70 61 72   the .** one par
4e90: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
4ea0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
4eb0: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
4ec0: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 20  ve to introduce 
4ed0: 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76  .** this magic v
4ee0: 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f  alue that the co
4ef0: 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64  de knows to hand
4f00: 6c 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20  le differently. 
4f10: 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e 74 65 72   Any .** pointer
4f20: 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20   will work here 
4f30: 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73  as long as it is
4f40: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53   distinct from S
4f50: 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20  QLITE_STATIC.** 
4f60: 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  and SQLITE_TRANS
4f70: 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  IENT..*/.#define
4f80: 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20   SQLITE_DYNAMIC 
4f90: 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74    ((sqlite3_dest
4fa0: 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69  ructor_type)sqli
4fb0: 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a  te3MallocSize)..
4fc0: 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54  /*.** When SQLIT
4fd0: 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65  E_OMIT_WSD is de
4fe0: 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20  fined, it means 
4ff0: 74 68 61 74 20 74 68 65 20 74 61 72 67 65 74 20  that the target 
5000: 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a  platform does.**
5010: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69   not support Wri
5020: 74 61 62 6c 65 20 53 74 61 74 69 63 20 44 61 74  table Static Dat
5030: 61 20 28 57 53 44 29 20 73 75 63 68 20 61 73 20  a (WSD) such as 
5040: 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69  global and stati
5050: 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20  c variables..** 
5060: 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75  All variables mu
5070: 73 74 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20  st either be on 
5080: 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e  the stack or dyn
5090: 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
50a0: 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68  ed from.** the h
50b0: 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69  eap.  When WSD i
50c0: 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74  s unsupported, t
50d0: 68 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c  he variable decl
50e0: 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72  arations scatter
50f0: 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74  ed.** throughout
5100: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65   the SQLite code
5110: 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e   must become con
5120: 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20  stants instead. 
5130: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a   The SQLITE_WSD.
5140: 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  ** macro is used
5150: 20 66 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73   for this purpos
5160: 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20  e.  And instead 
5170: 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74  of referencing t
5180: 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64  he variable.** d
5190: 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20  irectly, we use 
51a0: 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20  its constant as 
51b0: 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20  a key to lookup 
51c0: 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c  the run-time all
51d0: 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72  ocated.** buffer
51e0: 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c   that holds real
51f0: 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20   variable.  The 
5200: 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f  constant is also
5210: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72   the initializer
5220: 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d  .** for the run-
5230: 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62  time allocated b
5240: 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  uffer..**.** In 
5250: 74 68 65 20 75 73 75 61 6c 20 63 61 73 65 20 77  the usual case w
5260: 68 65 72 65 20 57 53 44 20 69 73 20 73 75 70 70  here WSD is supp
5270: 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54  orted, the SQLIT
5280: 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c  E_WSD and GLOBAL
5290: 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d  .** macros becom
52a0: 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76  e no-ops and hav
52b0: 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e  e zero performan
52c0: 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69  ce impact..*/.#i
52d0: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
52e0: 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53  _WSD.  #define S
52f0: 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a  QLITE_WSD const.
5300: 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c    #define GLOBAL
5310: 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69  (t,v) (*(t*)sqli
5320: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f  te3_wsd_find((vo
5330: 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66  id*)&(v), sizeof
5340: 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20  (v))).  #define 
5350: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
5360: 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63  fig GLOBAL(struc
5370: 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c  t Sqlite3Config,
5380: 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a   sqlite3Config).
5390: 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73    int sqlite3_ws
53a0: 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e  d_init(int N, in
53b0: 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71  t J);.  void *sq
53c0: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76  lite3_wsd_find(v
53d0: 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a  oid *K, int L);.
53e0: 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
53f0: 53 51 4c 49 54 45 5f 57 53 44 20 0a 20 20 23 64  SQLITE_WSD .  #d
5400: 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76  efine GLOBAL(t,v
5410: 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) v.  #define sq
5420: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
5430: 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a  g sqlite3Config.
5440: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
5450: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
5460: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  os are used to s
5470: 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65 72  uppress compiler
5480: 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f   warnings and to
5490: 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65 61  .** make it clea
54a0: 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64 65  r to human reade
54b0: 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74 69  rs when a functi
54c0: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
54d0: 64 65 6c 69 62 65 72 61 74 65 6c 79 20 0a 2a 2a  deliberately .**
54e0: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
54f0: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
5500: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
5510: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
5520: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
5530: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
5540: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
5550: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
5560: 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d  e the .** implem
5570: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53  entation of an S
5580: 51 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65  QL aggregate ste
5590: 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e  p callback may n
55a0: 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61  ot use the.** pa
55b0: 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69  rameter indicati
55c0: 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ng the number of
55d0: 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65   arguments passe
55e0: 64 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61  d to the aggrega
55f0: 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f  te,.** if it kno
5600: 77 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ws that this is 
5610: 65 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65  enforced elsewhe
5620: 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  re..**.** When a
5630: 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65   function parame
5640: 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ter is not used 
5650: 61 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68  at all within th
5660: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
5670: 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67  tion,.** it is g
5680: 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22  enerally named "
5690: 4e 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74  NotUsed" or "Not
56a0: 55 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74  Used2" to make t
56b0: 68 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72  hings even clear
56c0: 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20  er..** However, 
56d0: 74 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79  these macros may
56e0: 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
56f0: 20 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e   suppress warnin
5700: 67 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a  gs related to.**
5710: 20 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74   parameters that
5720: 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
5730: 62 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e  be used dependin
5740: 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  g on compilation
5750: 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72   options..** For
5760: 20 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70   example those p
5770: 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75  arameters only u
5780: 73 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20  sed in assert() 
5790: 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74  statements. In t
57a0: 68 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68  hese.** cases th
57b0: 65 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  e parameters are
57c0: 20 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68   named as per th
57d0: 65 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69  e usual conventi
57e0: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
57f0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
5800: 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64  (x) (void)(x).#d
5810: 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52  efine UNUSED_PAR
5820: 41 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55  AMETER2(x,y) UNU
5830: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29  SED_PARAMETER(x)
5840: 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45  ,UNUSED_PARAMETE
5850: 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77  R(y)../*.** Forw
5860: 61 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74  ard references t
5870: 6f 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a  o structures.*/.
5880: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
5890: 67 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a  ggInfo AggInfo;.
58a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
58b0: 75 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43  uthContext AuthC
58c0: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
58d0: 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
58e0: 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a  fo AutoincInfo;.
58f0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42  typedef struct B
5900: 69 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79  itvec Bitvec;.ty
5910: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
5920: 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79  lSeq CollSeq;.ty
5930: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
5940: 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65  umn Column;.type
5950: 64 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62  def struct Db Db
5960: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5970: 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a   Schema Schema;.
5980: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
5990: 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65  xpr Expr;.typede
59a0: 66 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  f struct ExprLis
59b0: 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65  t ExprList;.type
59c0: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53  def struct ExprS
59d0: 70 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79  pan ExprSpan;.ty
59e0: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65  pedef struct FKe
59f0: 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20  y FKey;.typedef 
5a00: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
5a10: 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75  uctor FuncDestru
5a20: 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74  ctor;.typedef st
5a30: 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e  ruct FuncDef Fun
5a40: 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74  cDef;.typedef st
5a50: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
5a60: 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79   FuncDefHash;.ty
5a70: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c  pedef struct IdL
5a80: 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65  ist IdList;.type
5a90: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
5aa0: 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20   Index;.typedef 
5ab0: 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
5ac0: 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a  le IndexSample;.
5ad0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
5ae0: 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73  eyClass KeyClass
5af0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5b00: 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f   KeyInfo KeyInfo
5b10: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5b20: 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61   Lookaside Looka
5b30: 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74  side;.typedef st
5b40: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
5b50: 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ot LookasideSlot
5b60: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5b70: 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a   Module Module;.
5b80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e  typedef struct N
5b90: 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43  ameContext NameC
5ba0: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
5bb0: 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72  struct Parse Par
5bc0: 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  se;.typedef stru
5bd0: 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74  ct RowSet RowSet
5be0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5bf0: 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70   Savepoint Savep
5c00: 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74  oint;.typedef st
5c10: 72 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65  ruct Select Sele
5c20: 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ct;.typedef stru
5c30: 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65  ct SelectDest Se
5c40: 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65  lectDest;.typede
5c50: 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  f struct SrcList
5c60: 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65   SrcList;.typede
5c70: 66 20 73 74 72 75 63 74 20 53 74 72 41 63 63 75  f struct StrAccu
5c80: 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65  m StrAccum;.type
5c90: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
5ca0: 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20   Table;.typedef 
5cb0: 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b  struct TableLock
5cc0: 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65   TableLock;.type
5cd0: 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e  def struct Token
5ce0: 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20   Token;.typedef 
5cf0: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54  struct Trigger T
5d00: 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20  rigger;.typedef 
5d10: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
5d20: 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79  g TriggerPrg;.ty
5d30: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
5d40: 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72  ggerStep Trigger
5d50: 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74  Step;.typedef st
5d60: 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
5d70: 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ord UnpackedReco
5d80: 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rd;.typedef stru
5d90: 63 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65  ct VTable VTable
5da0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5db0: 20 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78   VtabCtx VtabCtx
5dc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5dd0: 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a   Walker Walker;.
5de0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
5df0: 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e  hereInfo WhereIn
5e00: 66 6f 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  fo;../*.** Defer
5e10: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
5e20: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
5e30: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
5e40: 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48  " and .** "BusyH
5e50: 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73  andler" typedefs
5e60: 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65  . vdbe.h also re
5e70: 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20  quires a few of 
5e80: 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f  the opaque.** po
5e90: 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65  inter types (i.e
5ea0: 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e  . FuncDef) defin
5eb0: 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e  ed above..*/.#in
5ec0: 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a  clude "btree.h".
5ed0: 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68  #include "vdbe.h
5ee0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65  ".#include "page
5ef0: 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  r.h".#include "p
5f00: 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c 75  cache.h"..#inclu
5f10: 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75  de "os.h".#inclu
5f20: 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f  de "mutex.h".../
5f30: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
5f40: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63  se file to be ac
5f50: 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79  cessed by the sy
5f60: 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61  stem is an insta
5f70: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f  nce.** of the fo
5f80: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
5f90: 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  e.  There are no
5fa0: 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68  rmally two of th
5fb0: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a  ese structures.*
5fc0: 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  * in the sqlite.
5fd0: 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44  aDb[] array.  aD
5fe0: 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e  b[0] is the main
5ff0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
6000: 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20  nd.** aDb[1] is 
6010: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
6020: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
6030: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
6040: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20    Additional.** 
6050: 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65  databases may be
6060: 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74   attached..*/.st
6070: 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72  ruct Db {.  char
6080: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
6090: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
60a0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42   database */.  B
60b0: 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
60c0: 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65      /* The B*Tre
60d0: 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
60e0: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69  this database fi
60f0: 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74  le */.  u8 safet
6100: 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  y_level;     /* 
6110: 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61  How aggressive a
6120: 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74  t syncing data t
6130: 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68 65  o disk */.  Sche
6140: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
6150: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
6160: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
6170: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
6180: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
6190: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
61a0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
61b0: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
61c0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
61d0: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
61e0: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
61f0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
6200: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
6210: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
6220: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
6230: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
6240: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
6250: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
6260: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
6270: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
6280: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
6290: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
62a0: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
62b0: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
62c0: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
62d0: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
62e0: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a  red object..** .
62f0: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
6300: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
6310: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
6320: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
6330: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
6340: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
6350: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
6360: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
6370: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
6380: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
6390: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
63a0: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
63b0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
63c0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
63d0: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
63e0: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
63f0: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
6400: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
6410: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
6420: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
6430: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
6440: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
6450: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
6460: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
6470: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
6480: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
6490: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
64a0: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
64b0: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
64c0: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
64d0: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
64e0: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
64f0: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
6500: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
6510: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
6520: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
6530: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
6540: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
6550: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
6560: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
6570: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
6580: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
6590: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
65a0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
65b0: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
65c0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
65d0: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
65e0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
65f0: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
6600: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
6610: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
6620: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
6630: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
6640: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
6650: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
6660: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
6670: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
6680: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
6690: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
66a0: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
66b0: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
66c0: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
66d0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
66e0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
66f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
6700: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
6710: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
6720: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
6730: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61            /* Fla
6740: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
6750: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
6760: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
6770: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
6780: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
6790: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
67a0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
67b0: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
67c0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
67d0: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
67e0: 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e  s in the .** Db.
67f0: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
6800: 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
6810: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44   DbHasProperty(D
6820: 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d  ,I,P)     (((D)-
6830: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
6840: 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
6850: 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41  ).#define DbHasA
6860: 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  nyProperty(D,I,P
6870: 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d  )  (((D)->aDb[I]
6880: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26  .pSchema->flags&
6890: 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
68a0: 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44   DbSetProperty(D
68b0: 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61  ,I,P)     (D)->a
68c0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66  Db[I].pSchema->f
68d0: 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
68e0: 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74  e DbClearPropert
68f0: 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e  y(D,I,P)   (D)->
6900: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
6910: 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a  flags&=~(P)../*.
6920: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
6930: 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63  s for the DB.pSc
6940: 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c  hema->flags fiel
6950: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f  d..**.** The DB_
6960: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61  SchemaLoaded fla
6970: 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74  g is set after t
6980: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
6990: 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72  ma has been.** r
69a0: 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61  ead into interna
69b0: 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a  l hash tables..*
69c0: 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56  *.** DB_UnresetV
69d0: 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20  iews means that 
69e0: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77  one or more view
69f0: 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61  s have column na
6a00: 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65  mes that.** have
6a10: 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74   been filled out
6a20: 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
6a30: 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20   changes, these 
6a40: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67  column names mig
6a50: 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e  ht.** changes an
6a60: 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69  d so the view wi
6a70: 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65  ll need to be re
6a80: 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
6a90: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
6aa0: 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68     0x0001  /* Th
6ab0: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
6ac0: 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66  n loaded */.#def
6ad0: 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69  ine DB_UnresetVi
6ae0: 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f  ews    0x0002  /
6af0: 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76  * Some views hav
6b00: 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e  e defined column
6b10: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
6b20: 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20  e DB_Empty      
6b30: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
6b40: 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74  The file is empt
6b50: 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65  y (length 0 byte
6b60: 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  s) */../*.** The
6b70: 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65   number of diffe
6b80: 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68  rent kinds of th
6b90: 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62 65  ings that can be
6ba0: 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e   limited.** usin
6bb0: 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69  g the sqlite3_li
6bc0: 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e  mit() interface.
6bd0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
6be0: 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49  TE_N_LIMIT (SQLI
6bf0: 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52  TE_LIMIT_TRIGGER
6c00: 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a 0a 2a 2a  _DEPTH+1)../*.**
6c10: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
6c20: 63 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69  c is a set of fi
6c30: 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73  xed-size buffers
6c40: 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
6c50: 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20  d.** to satisfy 
6c60: 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20  small transient 
6c70: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
6c80: 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f  n requests for o
6c90: 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69  bjects.** associ
6ca0: 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74  ated with a part
6cb0: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
6cc0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
6cd0: 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61   use of.** looka
6ce0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76  side malloc prov
6cf0: 69 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61  ides a significa
6d00: 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65  nt performance e
6d10: 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61  nhancement.** (a
6d20: 70 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76  pprox 10%) by av
6d30: 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20  oiding numerous 
6d40: 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75  malloc/free requ
6d50: 65 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69  ests while parsi
6d60: 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d  ng.** SQL statem
6d70: 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ents..**.** The 
6d80: 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74  Lookaside struct
6d90: 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67  ure holds config
6da0: 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  uration informat
6db0: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a  ion about the.**
6dc0: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
6dd0: 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61  c subsystem.  Ea
6de0: 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d  ch available mem
6df0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
6e00: 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69  n.** the lookasi
6e10: 64 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20  de subsystem is 
6e20: 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b  stored on a link
6e30: 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61  ed list of Looka
6e40: 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65  sideSlot.** obje
6e50: 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61  cts..**.** Looka
6e60: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
6e70: 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65   are only allowe
6e80: 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68  d for objects th
6e90: 61 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  at are associate
6ea0: 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74  d.** with a part
6eb0: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
6ec0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e  connection.  Hen
6ed0: 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  ce, schema infor
6ee0: 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a  mation cannot.**
6ef0: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f   be stored in lo
6f00: 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20  okaside because 
6f10: 69 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  in shared cache 
6f20: 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20  mode the schema 
6f30: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69  information.** i
6f40: 73 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  s shared by mult
6f50: 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f  iple database co
6f60: 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72  nnections.  Ther
6f70: 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72  efore, while par
6f80: 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69  sing.** schema i
6f90: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  nformation, the 
6fa0: 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c  Lookaside.bEnabl
6fb0: 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  ed flag is clear
6fc0: 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f  ed so that.** lo
6fd0: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
6fe0: 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64  ons are not used
6ff0: 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68   to construct th
7000: 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  e schema objects
7010: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  ..*/.struct Look
7020: 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20 73 7a  aside {.  u16 sz
7030: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7040: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
7050: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
7060: 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c  s */.  u8 bEnabl
7070: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ed;            /
7080: 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73 61 62  * False to disab
7090: 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65  le new lookaside
70a0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
70b0: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
70c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
70d0: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
70e0: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
70f0: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
7100: 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20  int nOut;       
7110: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
7120: 72 20 6f 66 20 62 75 66 66 65 72 73 20 63 75 72  r of buffers cur
7130: 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f  rently checked o
7140: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75  ut */.  int mxOu
7150: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
7160: 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61 72  /* Highwater mar
7170: 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20  k for nOut */.  
7180: 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20  int anStat[3];  
7190: 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69          /* 0: hi
71a0: 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73  ts.  1: size mis
71b0: 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69  ses.  2: full mi
71c0: 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  sses */.  Lookas
71d0: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
71e0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
71f0: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
7200: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
7210: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
7220: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
7230: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
7240: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
7250: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
7260: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
7270: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
7280: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
7290: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
72a0: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
72b0: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
72c0: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
72d0: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
72e0: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
72f0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
7300: 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63  h table for func
7310: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  tion definitions
7320: 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63  ..**.** Hash eac
7330: 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  h FuncDef struct
7340: 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20  ure into one of 
7350: 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e  the FuncDefHash.
7360: 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f  a[] slots..** Co
7370: 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20  llisions are on 
7380: 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73  the FuncDef.pHas
7390: 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75  h chain..*/.stru
73a0: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b  ct FuncDefHash {
73b0: 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33  .  FuncDef *a[23
73c0: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68  ];       /* Hash
73d0: 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74   table for funct
73e0: 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ions */.};../*.*
73f0: 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20  * Each database 
7400: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e  connection is an
7410: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
7420: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7430: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
7440: 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69  sqlite3 {.  sqli
7450: 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20  te3_vfs *pVfs;  
7460: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20            /* OS 
7470: 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  Interface */.  s
7480: 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62  truct Vdbe *pVdb
7490: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
74a0: 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76  List of active v
74b0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20  irtual machines 
74c0: 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44  */.  CollSeq *pD
74d0: 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  fltColl;        
74e0: 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c     /* The defaul
74f0: 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  t collating sequ
7500: 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f  ence (BINARY) */
7510: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
7520: 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20   *mutex;        
7530: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d   /* Connection m
7540: 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44  utex */.  Db *aD
7550: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
7560: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62          /* All b
7570: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74  ackends */.  int
7580: 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   nDb;           
7590: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
75a0: 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73  mber of backends
75b0: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
75c0: 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73  e */.  int flags
75d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
75e0: 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c 61       /* Miscella
75f0: 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65 65  neous flags. See
7600: 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20   below */.  i64 
7610: 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20  lastRowid;      
7620: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57            /* ROW
7630: 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e  ID of most recen
7640: 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62  t insert (see ab
7650: 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a  ove) */.  i64 sz
7660: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
7670: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
7680: 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74  lt mmap_size set
7690: 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ting */.  unsign
76a0: 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73  ed int openFlags
76b0: 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73  ;       /* Flags
76c0: 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74   passed to sqlit
76d0: 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a  e3_vfs.xOpen() *
76e0: 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b  /.  int errCode;
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7700: 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74    /* Most recent
7710: 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c   error code (SQL
7720: 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20  ITE_*) */.  int 
7730: 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20  errMask;        
7740: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72            /* & r
7750: 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68  esult codes with
7760: 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74   this before ret
7770: 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31 36 20  urning */.  u16 
7780: 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20  dbOptFlags;     
7790: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61            /* Fla
77a0: 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73  gs to enable/dis
77b0: 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  able optimizatio
77c0: 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43  ns */.  u8 autoC
77d0: 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  ommit;          
77e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74        /* The aut
77f0: 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a  o-commit flag. *
7800: 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72  /.  u8 temp_stor
7810: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
7820: 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20    /* 1: file 2: 
7830: 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c  memory 0: defaul
7840: 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63  t */.  u8 malloc
7850: 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20  Failed;         
7860: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
7870: 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d  we have seen a m
7880: 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f  alloc failure */
7890: 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f  .  u8 dfltLockMo
78a0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
78b0: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b   /* Default lock
78c0: 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74  ing-mode for att
78d0: 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73  ached dbs */.  s
78e0: 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41  igned char nextA
78f0: 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20  utovac;      /* 
7900: 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20  Autovac setting 
7910: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
7920: 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70  >=0 */.  u8 supp
7930: 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20  ressErr;        
7940: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
7950: 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73   issue error mes
7960: 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f  sages if true */
7970: 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66  .  u8 vtabOnConf
7980: 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lict;           
7990: 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
79a0: 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f  urn for s3_vtab_
79b0: 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f  on_conflict() */
79c0: 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63 74  .  u8 isTransact
79d0: 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  ionSavepoint;   
79e0: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
79f0: 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f  outermost savepo
7a00: 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20  int is a TS */. 
7a10: 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a   int nextPagesiz
7a20: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
7a30: 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72  * Pagesize after
7a40: 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f   VACUUM if >0 */
7a50: 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20  .  u32 magic;   
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a70: 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72   /* Magic number
7a80: 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72   for detect libr
7a90: 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20  ary misuse */.  
7aa0: 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20  int nChange;    
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7ac0: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
7ad0: 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  by sqlite3_chang
7ae0: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  es() */.  int nT
7af0: 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20  otalChange;     
7b00: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
7b10: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
7b20: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
7b30: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c  es() */.  int aL
7b40: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49  imit[SQLITE_N_LI
7b50: 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74  MIT];   /* Limit
7b60: 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71  s */.  struct sq
7b70: 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20  lite3InitInfo { 
7b80: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
7b90: 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20  ion used during 
7ba0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a  initialization *
7bb0: 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75  /.    int newTnu
7bc0: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
7bd0: 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66    /* Rootpage of
7be0: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69   table being ini
7bf0: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
7c00: 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  u8 iDb;         
7c10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
7c20: 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20  hich db file is 
7c30: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
7c40: 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79  d */.    u8 busy
7c50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7c60: 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20       /* TRUE if 
7c70: 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61  currently initia
7c80: 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38  lizing */.    u8
7c90: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20   orphanTrigger; 
7ca0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
7cb0: 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f  t statement is o
7cc0: 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69  rphaned TEMP tri
7cd0: 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e 69 74  gger */.  } init
7ce0: 3b 0a 20 20 69 6e 74 20 61 63 74 69 76 65 56 64  ;.  int activeVd
7cf0: 62 65 43 6e 74 3b 20 20 20 20 20 20 20 20 20 20  beCnt;          
7d00: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
7d10: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 65  DBEs currently e
7d20: 78 65 63 75 74 69 6e 67 20 2a 2f 0a 20 20 69 6e  xecuting */.  in
7d30: 74 20 77 72 69 74 65 56 64 62 65 43 6e 74 3b 20  t writeVdbeCnt; 
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7d50: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
7d60: 56 44 42 45 73 20 74 68 61 74 20 61 72 65 20 77  VDBEs that are w
7d70: 72 69 74 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  riting */.  int 
7d80: 76 64 62 65 45 78 65 63 43 6e 74 3b 20 20 20 20  vdbeExecCnt;    
7d90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7da0: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
7db0: 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28  lls to VdbeExec(
7dc0: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65  ) */.  int nExte
7dd0: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
7de0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7df0: 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69  f loaded extensi
7e00: 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a  ons */.  void **
7e10: 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  aExtension;     
7e20: 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
7e30: 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72  of shared librar
7e40: 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76  y handles */.  v
7e50: 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f  oid (*xTrace)(vo
7e60: 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  id*,const char*)
7e70: 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72 61 63  ;        /* Trac
7e80: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
7e90: 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b  void *pTraceArg;
7ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7eb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
7ec0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61  ument to the tra
7ed0: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
7ee0: 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65   void (*xProfile
7ef0: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
7f00: 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72  ar*,u64);  /* Pr
7f10: 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e  ofiling function
7f20: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
7f30: 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20  fileArg;        
7f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f50: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70  /* Argument to p
7f60: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20  rofile function 
7f70: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d  */.  void *pComm
7f80: 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  itArg;          
7f90: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
7fa0: 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c  nt to xCommitCal
7fb0: 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20  lback() */   .  
7fc0: 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c  int (*xCommitCal
7fd0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20  lback)(void*);  
7fe0: 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20    /* Invoked at 
7ff0: 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f  every commit. */
8000: 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61  .  void *pRollba
8010: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
8020: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
8030: 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c   to xRollbackCal
8040: 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20  lback() */   .  
8050: 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b  void (*xRollback
8060: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
8070: 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20  ; /* Invoked at 
8080: 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f  every commit. */
8090: 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65  .  void *pUpdate
80a0: 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55  Arg;.  void (*xU
80b0: 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76  pdateCallback)(v
80c0: 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
80d0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
80e0: 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b  *,sqlite_int64);
80f0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
8100: 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28  OMIT_WAL.  int (
8110: 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76  *xWalCallback)(v
8120: 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  oid *, sqlite3 *
8130: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
8140: 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57  int);.  void *pW
8150: 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20  alArg;.#endif.  
8160: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
8170: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
8180: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
8190: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
81a0: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
81b0: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
81c0: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
81d0: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
81e0: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
81f0: 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  dArg;.  sqlite3_
8200: 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20  value *pErr;    
8210: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
8220: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
8230: 67 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  ge */.  char *zE
8240: 72 72 4d 73 67 3b 20 20 20 20 20 20 20 20 20 20  rrMsg;          
8250: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
8260: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
8270: 67 65 20 28 55 54 46 2d 38 20 65 6e 63 6f 64 65  ge (UTF-8 encode
8280: 64 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  d) */.  char *zE
8290: 72 72 4d 73 67 31 36 3b 20 20 20 20 20 20 20 20  rrMsg16;        
82a0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
82b0: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
82c0: 67 65 20 28 55 54 46 2d 31 36 20 65 6e 63 6f 64  ge (UTF-16 encod
82d0: 65 64 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ed) */.  union {
82e0: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
82f0: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
8300: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
8310: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
8320: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
8330: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
8340: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
8350: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
8360: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
8370: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
8380: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
8390: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
83a0: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
83b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
83c0: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69  UTHORIZATION.  i
83d0: 6e 74 20 28 2a 78 41 75 74 68 29 28 76 6f 69 64  nt (*xAuth)(void
83e0: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
83f0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
8400: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
8410: 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20  char*);.        
8420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8430: 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73          /* Acces
8440: 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  s authorization 
8450: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
8460: 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20  id *pAuthArg;   
8470: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
8480: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
8490: 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66  he access auth f
84a0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69  unction */.#endi
84b0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
84c0: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
84d0: 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a  ALLBACK.  int (*
84e0: 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20  xProgress)(void 
84f0: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70  *);     /* The p
8500: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
8510: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
8520: 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20  gressArg;       
8530: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
8540: 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  to the progress 
8550: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e  callback */.  in
8560: 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20  t nProgressOps; 
8570: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
8580: 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73  umber of opcodes
8590: 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61   for progress ca
85a0: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
85b0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
85c0: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
85d0: 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b  E.  int nVTrans;
85e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85f0: 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73    /* Allocated s
8600: 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a  ize of aVTrans *
8610: 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65  /.  Hash aModule
8620: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8630: 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62    /* populated b
8640: 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  y sqlite3_create
8650: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56  _module() */.  V
8660: 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74 78  tabCtx *pVtabCtx
8670: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
8680: 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69  Context for acti
8690: 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f  ve vtab connect/
86a0: 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62  create */.  VTab
86b0: 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20  le **aVTrans;   
86c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72            /* Vir
86d0: 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68  tual tables with
86e0: 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
86f0: 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ns */.  VTable *
8700: 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20  pDisconnect;    
8710: 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68  /* Disconnect th
8720: 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69  ese in next sqli
8730: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f  te3_prepare() */
8740: 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63 44 65  .#endif.  FuncDe
8750: 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20  fHash aFunc;    
8760: 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20          /* Hash 
8770: 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74  table of connect
8780: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ion functions */
8790: 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71  .  Hash aCollSeq
87a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
87b0: 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e   /* All collatin
87c0: 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20  g sequences */. 
87d0: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73   BusyHandler bus
87e0: 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f  yHandler;      /
87f0: 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  * Busy callback 
8800: 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74 69  */.  Db aDbStati
8810: 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20  c[2];           
8820: 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61     /* Static spa
8830: 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65 66  ce for the 2 def
8840: 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f  ault backends */
8850: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53  .  Savepoint *pS
8860: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
8870: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
8880: 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f  ve savepoints */
8890: 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f  .  int busyTimeo
88a0: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
88b0: 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72   /* Busy handler
88c0: 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65   timeout, in mse
88d0: 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65  c */.  int nSave
88e0: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
88f0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
8900: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
8910: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a  n savepoints */.
8920: 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74    int nStatement
8930: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8940: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
8950: 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  ted statement-tr
8960: 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20  ansactions  */. 
8970: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
8980: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ns;            /
8990: 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 63  * Net deferred c
89a0: 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20  onstraints this 
89b0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a  transaction. */.
89c0: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
89d0: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
89e0: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
89f0: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
8a00: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 0a 23  n DbFree() */..#
8a10: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
8a20: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
8a30: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
8a40: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
8a50: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
8a60: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
8a70: 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65  ASTER .  ** mute
8a80: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
8a90: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
8aa0: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
8ab0: 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a  n notify.c. .  *
8ac0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
8ad0: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
8ae0: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
8af0: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
8b00: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
8b10: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
8b20: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
8b30: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
8b40: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
8b50: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
8b60: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
8b70: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
8b80: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
8b90: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
8ba0: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
8bb0: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
8bc0: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
8bd0: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
8be0: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
8bf0: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
8c00: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
8c10: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
8c20: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
8c30: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
8c40: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
8c50: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
8c60: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
8c70: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
8c80: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
8c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8ca0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
8cb0: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
8cc0: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
8cd0: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
8ce0: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
8cf0: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
8d00: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
8d10: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
8d20: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
8d30: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
8d40: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
8d50: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
8d60: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
8d70: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
8d80: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
8d90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43 28  .*/.#define ENC(
8da0: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
8db0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
8dc0: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
8dd0: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
8de0: 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f  qlite3.flags..*/
8df0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8e00: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30  VdbeTrace      0
8e10: 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72  x00000001  /* Tr
8e20: 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45  ue to trace VDBE
8e30: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64   execution */.#d
8e40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74  efine SQLITE_Int
8e50: 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30  ernChanges  0x00
8e60: 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d  000002  /* Uncom
8e70: 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62 6c  mitted Hash tabl
8e80: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
8e90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
8ea0: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
8eb0: 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66  00004  /* Show f
8ec0: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
8ed0: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
8ee0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
8ef0: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
8f00: 30 30 30 30 30 38 20 20 2f 2a 20 53 68 6f 77 20  000008  /* Show 
8f10: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
8f20: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
8f30: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
8f40: 20 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20       0x00000010 
8f50: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
8f60: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
8f70: 2c 20 2a 2f 0a 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 20 20                  
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8fa0: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
8fb0: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
8fc0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8ff0: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
9000: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
9010: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9020: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
9030: 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 49  0x00000020  /* I
9040: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
9050: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
9060: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
9070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
9090: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
90a0: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
90b0: 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20  SQLITE_SqlTrace 
90c0: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 34 30        0x00000040
90d0: 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74    /* Debug print
90e0: 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75   SQL as it execu
90f0: 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  tes */.#define S
9100: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
9110: 67 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20  g    0x00000080 
9120: 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e   /* Debug listin
9130: 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72  gs of VDBE progr
9140: 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ams */.#define S
9150: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
9160: 61 20 20 20 20 30 78 30 30 30 30 30 31 30 30 20  a    0x00000100 
9170: 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65   /* OK to update
9180: 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a   SQLITE_MASTER *
9190: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
91a0: 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20  _VdbeAddopTrace 
91b0: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 54  0x00000200  /* T
91c0: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
91d0: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
91e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
91f0: 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30  IgnoreChecks   0
9200: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44 6f  x00000400  /* Do
9210: 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65   not enforce che
9220: 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
9230: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9240: 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
9250: 20 30 78 30 30 30 30 38 30 30 20 20 2f 2a 20 46   0x0000800  /* F
9260: 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
9270: 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mode */.#define 
9280: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
9290: 65 46 6d 74 20 20 30 78 30 30 30 30 31 30 30 30  eFmt  0x00001000
92a0: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
92b0: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
92c0: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
92d0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
92e0: 63 20 20 20 20 20 20 30 78 30 30 30 30 32 30 30  c      0x0000200
92f0: 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  0  /* Use full f
9300: 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b  sync on the back
9310: 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  end */.#define S
9320: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
9330: 79 6e 63 20 20 30 78 30 30 30 30 34 30 30 30 20  ync  0x00004000 
9340: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
9350: 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e  nc for checkpoin
9360: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
9370: 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65  ITE_RecoveryMode
9380: 20 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f     0x00008000  /
9390: 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61 20  * Ignore schema 
93a0: 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e  errors */.#defin
93b0: 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65  e SQLITE_Reverse
93c0: 4f 72 64 65 72 20 20 20 30 78 30 30 30 31 30 30  Order   0x000100
93d0: 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75  00  /* Reverse u
93e0: 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54 73  nordered SELECTs
93f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9400: 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20 20  TE_RecTriggers  
9410: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
9420: 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76   Enable recursiv
9430: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
9440: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72  efine SQLITE_For
9450: 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30  eignKeys    0x00
9460: 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72  040000  /* Enfor
9470: 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ce foreign key c
9480: 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23  onstraints  */.#
9490: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75  define SQLITE_Au
94a0: 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78 30  toIndex      0x0
94b0: 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0080000  /* Enab
94c0: 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  le automatic ind
94d0: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
94e0: 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69  SQLITE_PreferBui
94f0: 6c 74 69 6e 20 20 30 78 30 30 31 30 30 30 30 30  ltin  0x00100000
9500: 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20    /* Preference 
9510: 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  to built-in func
9520: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
9530: 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  ITE_LoadExtensio
9540: 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f  n  0x00200000  /
9550: 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78  * Enable load_ex
9560: 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  tension */.#defi
9570: 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65  ne SQLITE_Enable
9580: 54 72 69 67 67 65 72 20 20 30 78 30 30 34 30 30  Trigger  0x00400
9590: 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  000  /* True to 
95a0: 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  enable triggers 
95b0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  */../*.** Bits o
95c0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
95d0: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
95e0: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
95f0: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
9600: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
9610: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
9620: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
9630: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
9640: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
9650: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
9660: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
9670: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
9680: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
9690: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
96a0: 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ttening */.#defi
96b0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e  ne SQLITE_Column
96c0: 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20  Cache    0x0002 
96d0: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68    /* Column cach
96e0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
96f0: 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72  ITE_GroupByOrder
9700: 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47     0x0004   /* G
9710: 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20  ROUPBY cover of 
9720: 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69  ORDERBY */.#defi
9730: 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72  ne SQLITE_Factor
9740: 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20  OutConst 0x0008 
9750: 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61    /* Constant fa
9760: 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ctoring */.#defi
9770: 6e 65 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61  ne SQLITE_IdxRea
9780: 6c 41 73 49 6e 74 20 20 20 30 78 30 30 31 30 20  lAsInt   0x0010 
9790: 20 20 2f 2a 20 53 74 6f 72 65 20 52 45 41 4c 20    /* Store REAL 
97a0: 61 73 20 49 4e 54 20 69 6e 20 69 6e 64 69 63 65  as INT in indice
97b0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
97c0: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
97d0: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44     0x0020   /* D
97e0: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
97f0: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
9800: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
9810: 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20  Scan   0x0040   
9820: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
9830: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
9840: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
9850: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20  yIdxJoin 0x0080 
9860: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
9870: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
9880: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9890: 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65  TE_SubqCoroutine
98a0: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76    0x0100   /* Ev
98b0: 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65  aluate subquerie
98c0: 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20  s as coroutines 
98d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
98e0: 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20  E_Transitive    
98f0: 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61   0x0200   /* Tra
9900: 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69  nsitive constrai
9910: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
9920: 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f  QLITE_OmitNoopJo
9930: 69 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  in   0x0400   /*
9940: 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62   Omit unused tab
9950: 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a  les in joins */.
9960: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
9970: 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78  llOpts        0x
9980: 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70  ffff   /* All op
9990: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a  timizations */..
99a0: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72  /*.** Macros for
99b0: 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72   testing whether
99c0: 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61   or not optimiza
99d0: 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65  tions are enable
99e0: 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a  d or disabled..*
99f0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
9a00: 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
9a10: 53 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  ST.#define Optim
9a20: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
9a30: 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62  db, mask)  (((db
9a40: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
9a50: 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  ask))!=0).#defin
9a60: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e  e OptimizationEn
9a70: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
9a80: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
9a90: 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29  lags&(mask))==0)
9aa0: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
9ab0: 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62  ptimizationDisab
9ac0: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30  led(db, mask)  0
9ad0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
9ae0: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
9af0: 20 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69   mask)   1.#endi
9b00: 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  f../*.** Possibl
9b10: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
9b20: 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69   sqlite.magic fi
9b30: 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  eld..** The numb
9b40: 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64  ers are obtained
9b50: 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68   at random and h
9b60: 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d  ave no special m
9b70: 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a  eaning, other.**
9b80: 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74   than being dist
9b90: 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e  inct from one an
9ba0: 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  other..*/.#defin
9bb0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  e SQLITE_MAGIC_O
9bc0: 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36  PEN     0xa029a6
9bd0: 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  97  /* Database 
9be0: 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69  is open */.#defi
9bf0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
9c00: 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32  CLOSED   0x9f3c2
9c10: 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65  d33  /* Database
9c20: 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64   is closed */.#d
9c30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
9c40: 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62  IC_SICK     0x4b
9c50: 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72  771290  /* Error
9c60: 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c   and awaiting cl
9c70: 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ose */.#define S
9c80: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
9c90: 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20       0xf03b7906 
9ca0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72   /* Database cur
9cb0: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
9cc0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9cd0: 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30  MAGIC_ERROR    0
9ce0: 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e  xb5357930  /* An
9cf0: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65   SQLITE_MISUSE e
9d00: 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f  rror occurred */
9d10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9d20: 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30  MAGIC_ZOMBIE   0
9d30: 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c  x64cffc7f  /* Cl
9d40: 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74  ose with last st
9d50: 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f  atement close */
9d60: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
9d70: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66   function is def
9d80: 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61  ined by an insta
9d90: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
9da0: 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
9db0: 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  e.  A pointer to
9dc0: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
9dd0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
9de0: 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a   sqlite.aFunc.**
9df0: 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68   hash table.  Wh
9e00: 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63  en multiple func
9e10: 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73  tions have the s
9e20: 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61  ame name, the ha
9e30: 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e  sh table.** poin
9e40: 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c  ts to a linked l
9e50: 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72  ist of these str
9e60: 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75  uctures..*/.stru
9e70: 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69  ct FuncDef {.  i
9e80: 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  16 nArg;        
9e90: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9ea0: 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20   arguments.  -1 
9eb0: 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20  means unlimited 
9ec0: 2a 2f 0a 20 20 75 38 20 69 50 72 65 66 45 6e 63  */.  u8 iPrefEnc
9ed0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 65  ;         /* Pre
9ee0: 66 65 72 72 65 64 20 74 65 78 74 20 65 6e 63 6f  ferred text enco
9ef0: 64 69 6e 67 20 28 53 51 4c 49 54 45 5f 55 54 46  ding (SQLITE_UTF
9f00: 38 2c 20 31 36 4c 45 2c 20 31 36 42 45 29 20 2a  8, 16LE, 16BE) *
9f10: 2f 0a 20 20 75 38 20 66 6c 61 67 73 3b 20 20 20  /.  u8 flags;   
9f20: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65           /* Some
9f30: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
9f40: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f  SQLITE_FUNC_* */
9f50: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
9f60: 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20  ta;     /* User 
9f70: 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a  data parameter *
9f80: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65  /.  FuncDef *pNe
9f90: 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
9fa0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73   function with s
9fb0: 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f  ame name */.  vo
9fc0: 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69  id (*xFunc)(sqli
9fd0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
9fe0: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
9ff0: 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75  ); /* Regular fu
a000: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
a010: 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65   (*xStep)(sqlite
a020: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
a030: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
a040: 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73 74   /* Aggregate st
a050: 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ep */.  void (*x
a060: 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65  Finalize)(sqlite
a070: 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20  3_context*);    
a080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
a090: 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a  ggregate finaliz
a0a0: 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e  er */.  char *zN
a0b0: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ame;         /* 
a0c0: 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  SQL name of the 
a0d0: 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46  function. */.  F
a0e0: 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20  uncDef *pHash;  
a0f0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
a100: 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d   a different nam
a110: 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68  e but the same h
a120: 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73  ash */.  FuncDes
a130: 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
a140: 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72  ctor;   /* Refer
a150: 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73  ence counted des
a160: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
a170: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
a180: 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63  is structure enc
a190: 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72  apsulates a user
a1a0: 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75  -function destru
a1b0: 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61  ctor callback (a
a1c0: 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
a1d0: 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e  using create_fun
a1e0: 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20  ction_v2()) and 
a1f0: 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  a reference coun
a200: 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65  ter. When.** cre
a210: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
a220: 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  ) is called to c
a230: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
a240: 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74   with a destruct
a250: 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  or,.** a single 
a260: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
a270: 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ype is allocated
a280: 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  . FuncDestructor
a290: 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 20  .nRef is set to 
a2a0: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
a2b0: 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  f FuncDef object
a2c0: 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65  s created (eithe
a2d0: 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64  r 1 or 3, depend
a2e0: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a  ing on whether.*
a2f0: 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65  * or not the spe
a300: 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20  cified encoding 
a310: 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20  is SQLITE_ANY). 
a320: 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73  The FuncDef.pDes
a330: 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65  tructor.** membe
a340: 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65  r of each of the
a350: 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a   new FuncDef obj
a360: 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70  ects is set to p
a370: 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f  oint to the allo
a380: 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73  cated.** FuncDes
a390: 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  tructor..**.** T
a3a0: 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20  hereafter, when 
a3b0: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
a3c0: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65  ef objects is de
a3d0: 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72  leted, the refer
a3e0: 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e  ence.** count on
a3f0: 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   this object is 
a400: 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65  decremented. Whe
a410: 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20  n it reaches 0, 
a420: 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a  the destructor.*
a430: 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64  * is invoked and
a440: 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63   the FuncDestruc
a450: 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72  tor structure fr
a460: 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  eed..*/.struct F
a470: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a  uncDestructor {.
a480: 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f    int nRef;.  vo
a490: 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76  id (*xDestroy)(v
a4a0: 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  oid *);.  void *
a4b0: 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f  pUserData;.};../
a4c0: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
a4d0: 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66  lues for FuncDef
a4e0: 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68  .flags.  Note th
a4f0: 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61  at the _LENGTH a
a500: 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61  nd _TYPEOF.** va
a510: 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73  lues must corres
a520: 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c  pond to OPFLAG_L
a530: 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
a540: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20  LAG_TYPEOFARG.  
a550: 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73  There.** are ass
a560: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
a570: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20   in the code to 
a580: 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a  verify this..*/.
a590: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a5a0: 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30  UNC_LIKE     0x0
a5b0: 31 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66  1 /* Candidate f
a5c0: 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69  or the LIKE opti
a5d0: 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mization */.#def
a5e0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
a5f0: 43 41 53 45 20 20 20 20 20 30 78 30 32 20 2f 2a  CASE     0x02 /*
a600: 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20   Case-sensitive 
a610: 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69  LIKE-type functi
a620: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
a630: 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20  LITE_FUNC_EPHEM 
a640: 20 20 20 30 78 30 34 20 2f 2a 20 45 70 68 65 6d     0x04 /* Ephem
a650: 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69  eral.  Delete wi
a660: 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69  th VDBE */.#defi
a670: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  ne SQLITE_FUNC_N
a680: 45 45 44 43 4f 4c 4c 20 30 78 30 38 20 2f 2a 20  EEDCOLL 0x08 /* 
a690: 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f  sqlite3GetFuncCo
a6a0: 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65  llSeq() might be
a6b0: 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69   called */.#defi
a6c0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
a6d0: 4f 55 4e 54 20 20 20 20 30 78 31 30 20 2f 2a 20  OUNT    0x10 /* 
a6e0: 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a  Built-in count(*
a6f0: 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23  ) aggregate */.#
a700: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
a710: 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30  NC_COALESCE 0x20
a720: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61   /* Built-in coa
a730: 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c  lesce() or ifnul
a740: 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  l() function */.
a750: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a760: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 34  UNC_LENGTH   0x4
a770: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65  0 /* Built-in le
a780: 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  ngth() function 
a790: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a7a0: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
a7b0: 30 78 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0x80 /* Built-in
a7c0: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
a7d0: 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  on */../*.** The
a7e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65   following three
a7f0: 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f   macros, FUNCTIO
a800: 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20  N(), LIKEFUNC() 
a810: 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20  and AGGREGATE() 
a820: 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63  are.** used to c
a830: 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61  reate the initia
a840: 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46  lizers for the F
a850: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
a860: 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54  s..**.**   FUNCT
a870: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
a880: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
a890: 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  c).**     Used t
a8a0: 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
a8b0: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
a8c0: 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
a8d0: 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20  ion zName .**   
a8e0: 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79    implemented by
a8f0: 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e   C function xFun
a900: 63 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e  c that accepts n
a910: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54  Arg arguments. T
a920: 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20  he.**     value 
a930: 70 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69  passed as iArg i
a940: 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69  s cast to a (voi
a950: 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61  d*) and made ava
a960: 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73  ilable.**     as
a970: 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28   the user-data (
a980: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
a990: 61 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e  a()) for the fun
a9a0: 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20 20  ction. If .**   
a9b0: 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69    argument bNC i
a9c0: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65  s true, then the
a9d0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
a9e0: 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65  DCOLL flag is se
a9f0: 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45  t..**.**   AGGRE
aa00: 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
aa10: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74  , iArg, bNC, xSt
aa20: 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20  ep, xFinal).**  
aa30: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
aa40: 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66  e an aggregate f
aa50: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
aa60: 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  on implemented b
aa70: 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66  y.**     the C f
aa80: 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61  unctions xStep a
aa90: 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66  nd xFinal. The f
aaa0: 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65  irst four parame
aab0: 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20  ters.**     are 
aac0: 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74  interpreted in t
aad0: 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74  he same way as t
aae0: 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d  he first 4 param
aaf0: 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20  eters to.**     
ab00: 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a  FUNCTION()..**.*
ab10: 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61  *   LIKEFUNC(zNa
ab20: 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
ab30: 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73  flags).**     Us
ab40: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
ab50: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
ab60: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
ab70: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a  unction zName .*
ab80: 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65 70  *     that accep
ab90: 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
aba0: 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65  s and is impleme
abb0: 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74  nted by a call t
abc0: 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e 63  o C .**     func
abd0: 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41  tion likeFunc. A
abe0: 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20  rgument pArg is 
abf0: 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20  cast to a (void 
ac00: 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20  *) and made.**  
ac10: 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20     available as 
ac20: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65  the function use
ac30: 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f  r-data (sqlite3_
ac40: 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68  user_data()). Th
ac50: 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66  e.**     FuncDef
ac60: 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20  .flags variable 
ac70: 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  is set to the va
ac80: 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68  lue passed as th
ac90: 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70  e flags.**     p
aca0: 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65  arameter..*/.#de
acb0: 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  fine FUNCTION(zN
acc0: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
acd0: 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
ace0: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
acf0: 54 46 38 2c 20 28 62 4e 43 2a 53 51 4c 49 54 45  TF8, (bNC*SQLITE
ad00: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
ad10: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
ad20: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
ad30: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
ad40: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
ad50: 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a  fine FUNCTION2(z
ad60: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
ad70: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78  , bNC, xFunc, ex
ad80: 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  traFlags) \.  {n
ad90: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
ada0: 2c 20 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  , (bNC*SQLITE_FU
adb0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
adc0: 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51  raFlags, \.   SQ
add0: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
ade0: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
adf0: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
ae00: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52  , 0}.#define STR
ae10: 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  _FUNCTION(zName,
ae20: 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43   nArg, pArg, bNC
ae30: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
ae40: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
ae50: 20 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43   bNC*SQLITE_FUNC
ae60: 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20 20 20  _NEEDCOLL, \.   
ae70: 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20  pArg, 0, xFunc, 
ae80: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
ae90: 20 30 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45   0}.#define LIKE
aea0: 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
aeb0: 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a  , arg, flags) \.
aec0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
aed0: 55 54 46 38 2c 20 66 6c 61 67 73 2c 20 28 76 6f  UTF8, flags, (vo
aee0: 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b  id *)arg, 0, lik
aef0: 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  eFunc, 0, 0, #zN
af00: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
af10: 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61  ne AGGREGATE(zNa
af20: 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
af30: 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
af40: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
af50: 49 54 45 5f 55 54 46 38 2c 20 6e 63 2a 53 51 4c  ITE_UTF8, nc*SQL
af60: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
af70: 4c 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  L, \.   SQLITE_I
af80: 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
af90: 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e  0, 0, xStep,xFin
afa0: 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a  al,#zName,0,0}..
afb0: 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e  /*.** All curren
afc0: 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65  t savepoints are
afd0: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
afe0: 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e  ked list startin
aff0: 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e  g at.** sqlite3.
b000: 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20  pSavepoint. The 
b010: 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e  first element in
b020: 20 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65   the list is the
b030: 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a   most recently.*
b040: 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69  * opened savepoi
b050: 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61  nt. Savepoints a
b060: 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  re added to the 
b070: 6c 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65  list by the vdbe
b080: 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  .** OP_Savepoint
b090: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
b0a0: 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e  .struct Savepoin
b0b0: 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  t {.  char *zNam
b0c0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
b0d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76            /* Sav
b0e0: 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c  epoint name (nul
b0f0: 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a  -terminated) */.
b100: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43    i64 nDeferredC
b110: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
b120: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
b130: 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76  of deferred fk v
b140: 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 53  iolations */.  S
b150: 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b  avepoint *pNext;
b160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b170: 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76     /* Parent sav
b180: 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20  epoint (if any) 
b190: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
b1a0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75   following are u
b1b0: 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e  sed as the secon
b1c0: 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73  d parameter to s
b1d0: 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
b1e0: 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65  ),.** and as the
b1f0: 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
b200: 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  the OP_Savepoint
b210: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
b220: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
b230: 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a  NT_BEGIN      0.
b240: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
b250: 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23  T_RELEASE    1.#
b260: 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
b270: 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a  _ROLLBACK   2...
b280: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74  /*.** Each SQLit
b290: 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61  e module (virtua
b2a0: 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  l table definiti
b2b0: 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20 62  on) is defined b
b2c0: 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
b2d0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
b2e0: 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f  g structure, sto
b2f0: 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
b300: 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61  e3.aModule.** ha
b310: 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72  sh table..*/.str
b320: 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63  uct Module {.  c
b330: 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
b340: 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20  ule *pModule;   
b350: 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
b360: 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f  pointers */.  co
b370: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b390: 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65     /* Name passe
b3a0: 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75  d to create_modu
b3b0: 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  le() */.  void *
b3c0: 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20 20  pAux;           
b3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b3e0: 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74 6f  * pAux passed to
b3f0: 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
b400: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65   */.  void (*xDe
b410: 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20  stroy)(void *); 
b420: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
b430: 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20  dule destructor 
b440: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a  function */.};..
b450: 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  /*.** informatio
b460: 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
b470: 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61  umn of an SQL ta
b480: 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61  ble is held in a
b490: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
b4a0: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
b4b0: 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d  .*/.struct Colum
b4c0: 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  n {.  char *zNam
b4d0: 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  e;     /* Name o
b4e0: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
b4f0: 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20  .  Expr *pDflt; 
b500: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76      /* Default v
b510: 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
b520: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
b530: 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69  Dflt;     /* Ori
b540: 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
b550: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
b560: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79 70 65  */.  char *zType
b570: 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20 74 79  ;     /* Data ty
b580: 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f 6c 75  pe for this colu
b590: 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  mn */.  char *zC
b5a0: 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c  oll;     /* Coll
b5b0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
b5c0: 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68   If NULL, use th
b5d0: 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  e default */.  u
b5e0: 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20  8 notNull;      
b5f0: 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66  /* An OE_ code f
b600: 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f  or handling a NO
b610: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
b620: 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  t */.  char affi
b630: 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  nity;   /* One o
b640: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
b650: 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20  _... values */. 
b660: 20 75 31 36 20 63 6f 6c 46 6c 61 67 73 3b 20 20   u16 colFlags;  
b670: 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f    /* Boolean pro
b680: 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f  perties.  See CO
b690: 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62  LFLAG_ defines b
b6a0: 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  elow */.};../* A
b6b0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
b6c0: 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67  r Column.colFlag
b6d0: 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s:.*/.#define CO
b6e0: 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30  LFLAG_PRIMKEY  0
b6f0: 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75  x0001    /* Colu
b700: 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68  mn is part of th
b710: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  e primary key */
b720: 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
b730: 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32  _HIDDEN   0x0002
b740: 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20      /* A hidden 
b750: 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74  column in a virt
b760: 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  ual table */../*
b770: 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67  .** A "Collating
b780: 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65   Sequence" is de
b790: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
b7a0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
b7b0: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
b7c0: 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79  re. Conceptually
b7d0: 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  , a collating se
b7e0: 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20  quence consists 
b7f0: 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a  of a name and.**
b800: 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f   a comparison ro
b810: 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e  utine that defin
b820: 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  es the order of 
b830: 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a  that sequence..*
b840: 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e  *.** If CollSeq.
b850: 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74  xCmp is NULL, it
b860: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a   means that the.
b870: 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
b880: 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e  uence is undefin
b890: 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69  ed.  Indices bui
b8a0: 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e  lt on an undefin
b8b0: 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  ed.** collating 
b8c0: 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74  sequence may not
b8d0: 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74   be read or writ
b8e0: 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ten..*/.struct C
b8f0: 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20  ollSeq {.  char 
b900: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
b910: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
b920: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
b930: 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  ce, UTF-8 encode
b940: 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  d */.  u8 enc;  
b950: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b960: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61  Text encoding ha
b970: 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20  ndled by xCmp() 
b980: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
b990: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
b9a0: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
b9b0: 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xCmp() */.  int 
b9c0: 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e  (*xCmp)(void*,in
b9d0: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  t, const void*, 
b9e0: 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
b9f0: 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  );.  void (*xDel
ba00: 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65  )(void*);  /* De
ba10: 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73  structor for pUs
ba20: 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
ba30: 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e  A sort order can
ba40: 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f   be either ASC o
ba50: 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69  r DESC..*/.#defi
ba60: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43  ne SQLITE_SO_ASC
ba70: 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72         0  /* Sor
ba80: 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
ba90: 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
baa0: 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20  SQLITE_SO_DESC  
bab0: 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69      1  /* Sort i
bac0: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
bad0: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75  r */../*.** Colu
bae0: 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70 65  mn affinity type
baf0: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75  s..**.** These u
bb00: 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d  sed to have mnem
bb10: 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27  onic name like '
bb20: 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  i' for SQLITE_AF
bb30: 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a  F_INTEGER and.**
bb40: 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   't' for SQLITE_
bb50: 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77  AFF_TEXT.  But w
bb60: 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74  e can save a lit
bb70: 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d  tle space and im
bb80: 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65  prove.** the spe
bb90: 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e  ed a little by n
bba0: 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c  umbering the val
bbb0: 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c  ues consecutivel
bbc0: 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72  y.  .**.** But r
bbd0: 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74  ather than start
bbe0: 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65   with 0 or 1, we
bbf0: 20 62 65 67 69 6e 20 77 69 74 68 20 27 61 27 2e   begin with 'a'.
bc00: 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77    That way,.** w
bc10: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66  hen multiple aff
bc20: 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20  inity types are 
bc30: 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74  concatenated int
bc40: 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a  o a string and.*
bc50: 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34  * used as the P4
bc60: 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77   operand, they w
bc70: 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64  ill be more read
bc80: 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  able..**.** Note
bc90: 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e   also that the n
bca0: 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65  umeric types are
bcb0: 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65   grouped togethe
bcc0: 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e  r so that testin
bcd0: 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72  g.** for a numer
bce0: 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e  ic type is a sin
bcf0: 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a  gle comparison..
bd00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bd10: 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27  E_AFF_TEXT     '
bd20: 61 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  a'.#define SQLIT
bd30: 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27  E_AFF_NONE     '
bd40: 62 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  b'.#define SQLIT
bd50: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27  E_AFF_NUMERIC  '
bd60: 63 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  c'.#define SQLIT
bd70: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27  E_AFF_INTEGER  '
bd80: 64 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  d'.#define SQLIT
bd90: 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27  E_AFF_REAL     '
bda0: 65 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  e'..#define sqli
bdb0: 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69  te3IsNumericAffi
bdc0: 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53  nity(X)  ((X)>=S
bdd0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
bde0: 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  C)../*.** The SQ
bdf0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61  LITE_AFF_MASK va
be00: 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74  lues masks off t
be10: 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  he significant b
be20: 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66  its of an.** aff
be30: 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f  inity value. .*/
be40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
be50: 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 36  AFF_MASK     0x6
be60: 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
be70: 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
be80: 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
be90: 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
bea0: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
beb0: 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
bec0: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  y..*/.#define SQ
bed0: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
bee0: 20 20 30 78 30 38 20 20 2f 2a 20 6a 75 6d 70 73    0x08  /* jumps
bef0: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
bf00: 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64  nd is NULL */.#d
bf10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f  efine SQLITE_STO
bf20: 52 45 50 32 20 20 20 20 20 20 30 78 31 30 20 20  REP2      0x10  
bf30: 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
bf40: 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65  in reg[P2] rathe
bf50: 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23  r than jump */.#
bf60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55  define SQLITE_NU
bf70: 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20  LLEQ       0x80 
bf80: 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f   /* NULL=NULL */
bf90: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
bfa0: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
bfb0: 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
bfc0: 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ch virtual table
bfd0: 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74   present in.** t
bfe0: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
bff0: 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ma. .**.** If th
c000: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
c010: 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65  a is shared, the
c020: 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69  n there is one i
c030: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a  nstance of this.
c040: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ** structure for
c050: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
c060: 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74  onnection (sqlit
c070: 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74  e3*) that uses t
c080: 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68  he shared.** sch
c090: 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63  ema. This is bec
c0a0: 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61  ause each databa
c0b0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65  se connection re
c0c0: 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75  quires its own u
c0d0: 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63  nique.** instanc
c0e0: 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  e of the sqlite3
c0f0: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73  _vtab* handle us
c100: 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
c110: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a   virtual table .
c120: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
c130: 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  n. sqlite3_vtab*
c140: 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74   handles can not
c150: 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65   be shared betwe
c160: 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  en .** database 
c170: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65  connections, eve
c180: 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20  n when the rest 
c190: 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  of the in-memory
c1a0: 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63   database .** sc
c1b0: 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
c1c0: 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  as the implement
c1d0: 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72  ation often stor
c1e0: 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  es the database.
c1f0: 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ** connection ha
c200: 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69  ndle passed to i
c210: 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65  t via the xConne
c220: 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28  ct() or xCreate(
c230: 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69  ) method.** duri
c240: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
c250: 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68  n internally. Th
c260: 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
c270: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61  ection handle ma
c280: 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65  y.** then be use
c290: 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
c2a0: 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
c2b0: 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
c2c0: 72 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20  real tables .** 
c2d0: 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
c2e0: 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65  ase. So that the
c2f0: 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74  y appear as part
c300: 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20   of the callers 
c310: 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  .** transaction,
c320: 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20   these accesses 
c330: 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20  need to be made 
c340: 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74  via the same dat
c350: 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63  abase .** connec
c360: 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65  tion as that use
c370: 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c  d to execute SQL
c380: 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74   operations on t
c390: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
c3a0: 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62  ..**.** All VTab
c3b0: 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20  le objects that 
c3c0: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20  correspond to a 
c3d0: 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20  single table in 
c3e0: 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61  a shared.** data
c3f0: 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20  base schema are 
c400: 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64  initially stored
c410: 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73   in a linked-lis
c420: 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a  t pointed to by.
c430: 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  ** the Table.pVT
c440: 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69  able member vari
c450: 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72  able of the corr
c460: 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20  esponding Table 
c470: 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20  object..** When 
c480: 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  an sqlite3_prepa
c490: 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69  re() operation i
c4a0: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63  s required to ac
c4b0: 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
c4c0: 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65  .** table, it se
c4d0: 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20  arches the list 
c4e0: 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74  for the VTable t
c4f0: 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
c500: 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61  to the.** databa
c510: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f  se connection do
c520: 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e  ing the preparin
c530: 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74  g so as to use t
c540: 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71  he correct.** sq
c550: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
c560: 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c  le in the compil
c570: 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  ed query..**.** 
c580: 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  When an in-memor
c590: 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69  y Table object i
c5a0: 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65  s deleted (for e
c5b0: 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a  xample when the.
c5c0: 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69  ** schema is bei
c5d0: 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20  ng reloaded for 
c5e0: 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68  some reason), th
c5f0: 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  e VTable objects
c600: 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c   are not .** del
c610: 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
c620: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
c630: 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
c640: 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69  onnect()ed .** i
c650: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74  mmediately. Inst
c660: 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f  ead, they are mo
c670: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62  ved from the Tab
c680: 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20  le.pVTable list 
c690: 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69  to.** another li
c6a0: 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
c6b0: 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e   by the sqlite3.
c6c0: 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62  pDisconnect memb
c6d0: 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72  er of the.** cor
c6e0: 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
c6f0: 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  e3 structure. Th
c700: 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65  ey are then dele
c710: 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65  ted/xDisconnecte
c720: 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20  d .** next time 
c730: 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  a statement is p
c740: 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61  repared using sa
c750: 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69  id sqlite3*. Thi
c760: 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20  s is done.** to 
c770: 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69  avoid deadlock i
c780: 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20  ssues involving 
c790: 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33  multiple sqlite3
c7a0: 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a  .mutex mutexes..
c7b0: 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d  ** Refer to comm
c7c0: 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74  ents above funct
c7d0: 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55  ion sqlite3VtabU
c7e0: 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20  nlockList() for 
c7f0: 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f  an.** explanatio
c800: 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69  n as to why it i
c810: 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e  s safe to add an
c820: 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c   entry to an sql
c830: 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
c840: 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74  .** list without
c850: 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72   holding the cor
c860: 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
c870: 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a  e3.mutex mutex..
c880: 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
c890: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20   for objects of 
c8a0: 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77  this type is alw
c8b0: 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ays allocated by
c8c0: 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61   .** sqlite3DbMa
c8d0: 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68  lloc(), using th
c8e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
c8f0: 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54  dle stored in VT
c900: 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74  able.db as .** t
c910: 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
c920: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61  t..*/.struct VTa
c930: 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  ble {.  sqlite3 
c940: 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  *db;            
c950: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f    /* Database co
c960: 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61  nnection associa
c970: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61  ted with this ta
c980: 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20  ble */.  Module 
c990: 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20  *pMod;          
c9a0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
c9b0: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
c9c0: 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69  tation */.  sqli
c9d0: 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
c9e0: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
c9f0: 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63   to vtab instanc
ca00: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  e */.  int nRef;
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
ca30: 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73  inters to this s
ca40: 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38  tructure */.  u8
ca50: 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20   bConstraint;   
ca60: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
ca70: 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  if constraints a
ca80: 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a  re supported */.
ca90: 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
caa0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  ;           /* D
cab0: 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45  epth of the SAVE
cac0: 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20  POINT stack */. 
cad0: 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20   VTable *pNext; 
cae0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
caf0: 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73  xt in linked lis
cb00: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
cb10: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
cb20: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70  SQL table is rep
cb30: 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
cb40: 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ry by an instanc
cb50: 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c  e of the.** foll
cb60: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
cb70: 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61  .**.** Table.zNa
cb80: 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  me is the name o
cb90: 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68  f the table.  Th
cba0: 65 20 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72  e case of the or
cbb0: 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45  iginal.** CREATE
cbc0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
cbd0: 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20   is stored, but 
cbe0: 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e  case is not sign
cbf0: 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63  ificant for.** c
cc00: 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a  omparisons..**.*
cc10: 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20  * Table.nCol is 
cc20: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
cc30: 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61  lumns in this ta
cc40: 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c  ble.  Table.aCol
cc50: 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
cc60: 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20   to an array of 
cc70: 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65  Column structure
cc80: 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20  s, one for each 
cc90: 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  column..**.** If
cca0: 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61   the table has a
ccb0: 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  n INTEGER PRIMAR
ccc0: 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c  Y KEY, then Tabl
ccd0: 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20 69  e.iPKey is the i
cce0: 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63  ndex of.** the c
ccf0: 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68  olumn that is th
cd00: 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77  at key.   Otherw
cd10: 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20  ise Table.iPKey 
cd20: 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f  is negative.  No
cd30: 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  te.** that the d
cd40: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 50  atatype of the P
cd50: 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20  RIMARY KEY must 
cd60: 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74  be INTEGER for t
cd70: 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20  his field to.** 
cd80: 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45  be set.  An INTE
cd90: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
cda0: 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72  is used as the r
cdb0: 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f  owid for each ro
cdc0: 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c  w of.** the tabl
cdd0: 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20 68  e.  If a table h
cde0: 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52  as no INTEGER PR
cdf0: 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20  IMARY KEY, then 
ce00: 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a  a random rowid.*
ce10: 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 66  * is generated f
ce20: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  or each row of t
ce30: 68 65 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61  he table.  TF_Ha
ce40: 73 50 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73  sPrimaryKey is s
ce50: 65 74 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62  et if.** the tab
ce60: 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41  le has any PRIMA
ce70: 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20  RY KEY, INTEGER 
ce80: 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a  or otherwise..**
ce90: 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69  .** Table.tnum i
cea0: 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65  s the page numbe
ceb0: 72 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42  r for the root B
cec0: 54 72 65 65 20 70 61 67 65 20 6f 66 20 74 68 65  Tree page of the
ced0: 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a   table in the.**
cee0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
cef0: 20 49 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73   If Table.iDb is
cf00: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
cf10: 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
cf20: 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73   backend.** in s
cf30: 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20  qlite.aDb[].  0 
cf40: 69 73 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20  is for the main 
cf50: 64 61 74 61 62 61 73 65 20 61 6e 64 20 31 20 69  database and 1 i
cf60: 73 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74  s for the file t
cf70: 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d  hat.** holds tem
cf80: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e  porary tables an
cf90: 64 20 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54  d indices.  If T
cfa0: 46 5f 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73  F_Ephemeral is s
cfb0: 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74  et.** then the t
cfc0: 61 62 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69  able is stored i
cfd0: 6e 20 61 20 66 69 6c 65 20 74 68 61 74 20 69 73  n a file that is
cfe0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
cff0: 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74  eleted.** when t
d000: 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 74  he VDBE cursor t
d010: 6f 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 63  o the table is c
d020: 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20  losed.  In this 
d030: 63 61 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20  case Table.tnum 
d040: 0a 2a 2a 20 72 65 66 65 72 73 20 56 44 42 45 20  .** refers VDBE 
d050: 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68  cursor number th
d060: 61 74 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62  at holds the tab
d070: 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20  le open, not to 
d080: 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65  the root.** page
d090: 20 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69   number.  Transi
d0a0: 65 6e 74 20 74 61 62 6c 65 73 20 61 72 65 20 75  ent tables are u
d0b0: 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  sed to hold the 
d0c0: 72 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20  results of a.** 
d0d0: 73 75 62 2d 71 75 65 72 79 20 74 68 61 74 20 61  sub-query that a
d0e0: 70 70 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f  ppears instead o
d0f0: 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e  f a real table n
d100: 61 6d 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ame in the FROM 
d110: 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20  clause .** of a 
d120: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
d130: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c  ..*/.struct Tabl
d140: 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  e {.  char *zNam
d150: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  e;         /* Na
d160: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
d170: 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c  or view */.  Col
d180: 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20  umn *aCol;      
d190: 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
d1a0: 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
d1b0: 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
d1c0: 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20  Index;       /* 
d1d0: 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65  List of SQL inde
d1e0: 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c  xes on this tabl
d1f0: 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  e. */.  Select *
d200: 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
d210: 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e  NULL for tables.
d220: 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69    Points to defi
d230: 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77  nition if a view
d240: 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b  . */.  FKey *pFK
d250: 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ey;         /* L
d260: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c  inked list of al
d270: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69  l foreign keys i
d280: 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
d290: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
d2a0: 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
d2b0: 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
d2c0: 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
d2d0: 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66  olumn */.#ifndef
d2e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45   SQLITE_OMIT_CHE
d2f0: 43 4b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  CK.  ExprList *p
d300: 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c  Check;    /* All
d310: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
d320: 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 74  ts */.#endif.  t
d330: 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 3b 20  Rowcnt nRowEst; 
d340: 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
d350: 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d   rows in table -
d360: 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
d370: 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  t1 table */.  in
d380: 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
d390: 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65     /* Root BTree
d3a0: 20 6e 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74   node for this t
d3b0: 61 62 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61  able (see note a
d3c0: 62 6f 76 65 29 20 2a 2f 0a 20 20 69 31 36 20 69  bove) */.  i16 i
d3d0: 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20  PKey;           
d3e0: 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69  /* If not negati
d3f0: 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b  ve, use aCol[iPK
d400: 65 79 5d 20 61 73 20 74 68 65 20 70 72 69 6d 61  ey] as the prima
d410: 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20  ry key */.  i16 
d420: 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  nCol;           
d430: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
d440: 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61  lumns in this ta
d450: 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65  ble */.  u16 nRe
d460: 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
d470: 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
d480: 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c  ers to this Tabl
d490: 65 20 2a 2f 0a 20 20 75 38 20 74 61 62 46 6c 61  e */.  u8 tabFla
d4a0: 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  gs;         /* M
d4b0: 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75  ask of TF_* valu
d4c0: 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f  es */.  u8 keyCo
d4d0: 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
d4e0: 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61  What to do in ca
d4f0: 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73  se of uniqueness
d500: 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b   conflict on iPK
d510: 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ey */.#ifndef SQ
d520: 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
d530: 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f  ABLE.  int addCo
d540: 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f  lOffset;    /* O
d550: 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20  ffset in CREATE 
d560: 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64  TABLE stmt to ad
d570: 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a  d a new column *
d580: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
d590: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
d5a0: 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
d5b0: 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20  nModuleArg;     
d5c0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
d5d0: 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
d5e0: 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  odule */.  char 
d5f0: 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20  **azModuleArg;  
d600: 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d  /* Text of all m
d610: 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20  odule args. [0] 
d620: 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a  is module name *
d630: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  /.  VTable *pVTa
d640: 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74  ble;     /* List
d650: 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63   of VTable objec
d660: 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ts. */.#endif.  
d670: 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
d680: 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  r;   /* List of 
d690: 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20  triggers stored 
d6a0: 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20  in pSchema */.  
d6b0: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
d6c0: 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74       /* Schema t
d6d0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69  hat contains thi
d6e0: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62  s table */.  Tab
d6f0: 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b  le *pNextZombie;
d700: 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65    /* Next on the
d710: 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61   Parse.pZombieTa
d720: 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  b list */.};../*
d730: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
d740: 65 73 20 66 6f 72 20 54 61 62 65 2e 74 61 62 46  es for Tabe.tabF
d750: 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lags..*/.#define
d760: 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20   TF_Readonly    
d770: 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52      0x01    /* R
d780: 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20  ead-only system 
d790: 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
d7a0: 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20   TF_Ephemeral   
d7b0: 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41      0x02    /* A
d7c0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  n ephemeral tabl
d7d0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
d7e0: 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20  HasPrimaryKey   
d7f0: 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65  0x04    /* Table
d800: 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b   has a primary k
d810: 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
d820: 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20  _Autoincrement  
d830: 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65   0x08    /* Inte
d840: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
d850: 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  is autoincrement
d860: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56   */.#define TF_V
d870: 69 72 74 75 61 6c 20 20 20 20 20 20 20 20 20 30  irtual         0
d880: 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76  x10    /* Is a v
d890: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
d8a0: 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20  ../*.** Test to 
d8b0: 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  see whether or n
d8c0: 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61 20  ot a table is a 
d8d0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
d8e0: 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20  This is.** done 
d8f0: 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68  as a macro so th
d900: 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70  at it will be op
d910: 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e  timized out when
d920: 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
d930: 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69  e support is omi
d940: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
d950: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ild..*/.#ifndef 
d960: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
d970: 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69  UALTABLE.#  defi
d980: 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
d990: 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
d9a0: 6c 61 67 73 20 26 20 54 46 5f 56 69 72 74 75 61  lags & TF_Virtua
d9b0: 6c 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65  l)!=0).#  define
d9c0: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
d9d0: 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61  X) (((X)->colFla
d9e0: 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
d9f0: 44 45 4e 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23  DEN)!=0).#else.#
da00: 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
da10: 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 20 20  al(X)      0.#  
da20: 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
da30: 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69  olumn(X) 0.#endi
da40: 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f  f../*.** Each fo
da50: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
da60: 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61  aint is an insta
da70: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
da80: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
da90: 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20  **.** A foreign 
daa0: 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65  key is associate
dab0: 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65  d with two table
dac0: 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74  s.  The "from" t
dad0: 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74  able is.** the t
dae0: 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
daf0: 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ns the REFERENCE
db00: 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72  S clause that cr
db10: 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67  eates the foreig
db20: 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22  n.** key.  The "
db30: 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65  to" table is the
db40: 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e   table that is n
db50: 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45  amed in the REFE
db60: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a  RENCES clause..*
db70: 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20  * Consider this 
db80: 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20  example:.**.**  
db90: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
dba0: 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20  ex1(.**       a 
dbb0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
dbc0: 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20  KEY,.**       b 
dbd0: 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49  INTEGER CONSTRAI
dbe0: 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45  NT fk1 REFERENCE
dbf0: 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20  S ex2(x).**     
dc00: 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72  );.**.** For for
dc10: 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20  eign key "fk1", 
dc20: 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
dc30: 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20  s "ex1" and the 
dc40: 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32  to-table is "ex2
dc50: 22 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45  "..**.** Each RE
dc60: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
dc70: 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73  generates an ins
dc80: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
dc90: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
dca0: 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74  .** which is att
dcb0: 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f  ached to the fro
dcc0: 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f  m-table.  The to
dcd0: 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20  -table need not 
dce0: 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68  exist when.** th
dcf0: 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
dd00: 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78  created.  The ex
dd10: 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74  istence of the t
dd20: 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63  o-table is not c
dd30: 68 65 63 6b 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  hecked..*/.struc
dd40: 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65  t FKey {.  Table
dd50: 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20   *pFrom;     /* 
dd60: 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  Table containing
dd70: 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
dd80: 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69  clause (aka: Chi
dd90: 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ld) */.  FKey *p
dda0: 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65  NextFrom;  /* Ne
ddb0: 78 74 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69  xt foreign key i
ddc0: 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61  n pFrom */.  cha
ddd0: 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f  r *zTo;        /
dde0: 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20  * Name of table 
ddf0: 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69  that the key poi
de00: 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72  nts to (aka: Par
de10: 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  ent) */.  FKey *
de20: 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e  pNextTo;    /* N
de30: 65 78 74 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ext foreign key 
de40: 6f 6e 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a  on table named z
de50: 54 6f 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  To */.  FKey *pP
de60: 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
de70: 76 69 6f 75 73 20 66 6f 72 65 69 67 6e 20 6b 65  vious foreign ke
de80: 79 20 6f 6e 20 74 61 62 6c 65 20 6e 61 6d 65 64  y on table named
de90: 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43   zTo */.  int nC
dea0: 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ol;         /* N
deb0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
dec0: 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a   in this key */.
ded0: 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33    /* EV: R-30323
dee0: 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69  -21917 */.  u8 i
def0: 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 2f 2a  sDeferred;    /*
df00: 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
df10: 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20  int checking is 
df20: 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f  deferred till CO
df30: 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63  MMIT */.  u8 aAc
df40: 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20  tion[2];        
df50: 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61    /* ON DELETE a
df60: 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74  nd ON UPDATE act
df70: 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65  ions, respective
df80: 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ly */.  Trigger 
df90: 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 20 20  *apTrigger[2];  
dfa0: 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20  /* Triggers for 
dfb0: 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e  aAction[] action
dfc0: 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43  s */.  struct sC
dfd0: 6f 6c 4d 61 70 20 7b 20 20 2f 2a 20 4d 61 70 70  olMap {  /* Mapp
dfe0: 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ing of columns i
dff0: 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d  n pFrom to colum
e000: 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20  ns in zTo */.   
e010: 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20   int iFrom;     
e020: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
e030: 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20  column in pFrom 
e040: 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f  */.    char *zCo
e050: 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  l;        /* Nam
e060: 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a  e of column in z
e070: 54 6f 2e 20 20 49 66 20 30 20 75 73 65 20 50 52  To.  If 0 use PR
e080: 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d  IMARY KEY */.  }
e090: 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20   aCol[1];       
e0a0: 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
e0b0: 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63  r each of nCol c
e0c0: 6f 6c 75 6d 6e 20 73 20 2a 2f 0a 7d 3b 0a 0a 2f  olumn s */.};../
e0d0: 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70  *.** SQLite supp
e0e0: 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72  orts many differ
e0f0: 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f  ent ways to reso
e100: 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  lve a constraint
e110: 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c  .** error.  ROLL
e120: 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20  BACK processing 
e130: 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e  means that a con
e140: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
e150: 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20  n.** causes the 
e160: 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
e170: 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64  cess to fail and
e180: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
e190: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
e1a0: 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
e1b0: 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73  k.  ABORT proces
e1c0: 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f  sing means the o
e1d0: 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
e1e0: 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64  ess.** fails and
e1f0: 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67   any prior chang
e200: 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65  es from that one
e210: 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62   operation are b
e220: 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75  acked out,.** bu
e230: 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
e240: 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20  n is not rolled 
e250: 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63  back.  FAIL proc
e260: 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
e270: 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69  t.** the operati
e280: 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73  on in progress s
e290: 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73  tops and returns
e2a0: 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20   an error code. 
e2b0: 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68   But prior.** ch
e2c0: 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65  anges due to the
e2d0: 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
e2e0: 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f  are not backed o
e2f0: 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61  ut and no rollba
e300: 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49  ck.** occurs.  I
e310: 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74  GNORE means that
e320: 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
e330: 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20  row that caused 
e340: 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  the constraint.*
e350: 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69  * error is not i
e360: 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74  nserted or updat
e370: 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
e380: 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
e390: 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74   error.** is ret
e3a0: 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20  urned.  REPLACE 
e3b0: 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78  means that preex
e3c0: 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
e3d0: 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64  rows that caused
e3e0: 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  .** a UNIQUE con
e3f0: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
e400: 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f  n are removed so
e410: 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e   that the new in
e420: 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74  sert or.** updat
e430: 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20  e can proceed.  
e440: 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
e450: 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
e460: 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a  r is reported..*
e470: 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53  *.** RESTRICT, S
e480: 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43  ETNULL, and CASC
e490: 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c  ADE actions appl
e4a0: 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67  y only to foreig
e4b0: 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52  n keys..** RESTR
e4c0: 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20  ICT is the same 
e4d0: 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d  as ABORT for IMM
e4e0: 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b  EDIATE foreign k
e4f0: 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73  eys and the.** s
e500: 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20  ame as ROLLBACK 
e510: 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79  for DEFERRED key
e520: 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e  s.  SETNULL mean
e530: 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69  s that the forei
e540: 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74  gn.** key is set
e550: 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41   to NULL.  CASCA
e560: 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  DE means that a 
e570: 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
e580: 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72   of the.** refer
e590: 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20  enced table row 
e5a0: 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e  is propagated in
e5b0: 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  to the row that 
e5c0: 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72  holds the.** for
e5d0: 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a  eign key..** .**
e5e0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
e5f0: 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
e600: 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
e610: 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
e620: 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
e630: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
e640: 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
e650: 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
e660: 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
e670: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
e680: 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
e690: 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
e6a0: 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
e6b0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
e6c0: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
e6d0: 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
e6e0: 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
e6f0: 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
e700: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
e710: 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
e720: 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
e730: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
e740: 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
e750: 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
e760: 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
e770: 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
e780: 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
e790: 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
e7a0: 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
e7b0: 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
e7c0: 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
e7d0: 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
e7e0: 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
e7f0: 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66   UPDATE */..#def
e800: 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20  ine OE_Restrict 
e810: 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20  6   /* OE_Abort 
e820: 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f  for IMMEDIATE, O
e830: 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44  E_Rollback for D
e840: 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69  EFERRED */.#defi
e850: 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37  ne OE_SetNull  7
e860: 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
e870: 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
e880: 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  to NULL */.#defi
e890: 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38  ne OE_SetDflt  8
e8a0: 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
e8b0: 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
e8c0: 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a  to its default *
e8d0: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73  /.#define OE_Cas
e8e0: 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73  cade  9   /* Cas
e8f0: 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73  cade the changes
e900: 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
e910: 44 65 66 61 75 6c 74 20 20 39 39 20 20 2f 2a 20  Default  99  /* 
e920: 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
e930: 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
e940: 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
e950: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
e960: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
e970: 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
e980: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
e990: 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
e9a0: 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
e9b0: 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
e9c0: 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63  ontrol the .** c
e9d0: 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65  omparison of the
e9e0: 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e   two index keys.
e9f0: 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e  .*/.struct KeyIn
ea00: 66 6f 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  fo {.  sqlite3 *
ea10: 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
ea20: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
ea30: 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 65 6e  ction */.  u8 en
ea40: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
ea50: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
ea60: 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  - one of the SQL
ea70: 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20  ITE_UTF* values 
ea80: 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
ea90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
eaa0: 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
eab0: 20 61 43 6f 6c 6c 5b 5d 20 2a 2f 0a 20 20 75 38   aColl[] */.  u8
eac0: 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
ead0: 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20    /* Sort order 
eae0: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e  for each column.
eaf0: 20 20 4d 61 79 20 62 65 20 4e 55 4c 4c 20 2a 2f    May be NULL */
eb00: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c  .  CollSeq *aCol
eb10: 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  l[1];  /* Collat
eb20: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ing sequence for
eb30: 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68   each term of th
eb40: 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  e key */.};../*.
eb50: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
eb60: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
eb70: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
eb80: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
eb90: 74 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e  t a.** single in
eba0: 64 65 78 20 72 65 63 6f 72 64 20 74 68 61 74 20  dex record that 
ebb0: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
ebc0: 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f   parsed out into
ebd0: 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76   individual.** v
ebe0: 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72  alues..**.** A r
ebf0: 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65  ecord is an obje
ec00: 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ct that contains
ec10: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65   one or more fie
ec20: 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20  lds of data..** 
ec30: 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64  Records are used
ec40: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f   to store the co
ec50: 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65  ntent of a table
ec60: 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72   row and to stor
ec70: 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20  e.** the key of 
ec80: 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f  an index.  A blo
ec90: 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  b encoding of a 
eca0: 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65  record is create
ecb0: 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d  d by.** the OP_M
ecc0: 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
ecd0: 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64   of the VDBE and
ece0: 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64   is disassembled
ecf0: 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f   by the.** OP_Co
ed00: 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  lumn opcode..**.
ed10: 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
ed20: 65 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64  e holds a record
ed30: 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64   that has alread
ed40: 79 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62  y been disassemb
ed50: 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20  led.** into its 
ed60: 63 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c  constituent fiel
ed70: 64 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ds..*/.struct Un
ed80: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
ed90: 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
eda0: 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
edb0: 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
edc0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
edd0: 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
ede0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
edf0: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
ee00: 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 75 38 20 66 6c  Mem[] */.  u8 fl
ee10: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ags;           /
ee20: 2a 20 42 6f 6f 6c 65 61 6e 20 73 65 74 74 69 6e  * Boolean settin
ee30: 67 73 2e 20 20 55 4e 50 41 43 4b 45 44 5f 2e 2e  gs.  UNPACKED_..
ee40: 2e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34  . below */.  i64
ee50: 20 72 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20   rowid;         
ee60: 20 2f 2a 20 55 73 65 64 20 62 79 20 55 4e 50 41   /* Used by UNPA
ee70: 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52  CKED_PREFIX_SEAR
ee80: 43 48 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65  CH */.  Mem *aMe
ee90: 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  m;          /* V
eea0: 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  alues */.};../*.
eeb0: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
eec0: 73 20 6f 66 20 55 6e 70 61 63 6b 65 64 52 65 63  s of UnpackedRec
eed0: 6f 72 64 2e 66 6c 61 67 73 0a 2a 2f 0a 23 64 65  ord.flags.*/.#de
eee0: 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 49 4e  fine UNPACKED_IN
eef0: 43 52 4b 45 59 20 20 20 20 20 20 20 30 78 30 31  CRKEY       0x01
ef00: 20 20 2f 2a 20 4d 61 6b 65 20 74 68 69 73 20 6b    /* Make this k
ef10: 65 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 6c 61  ey an epsilon la
ef20: 72 67 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rger */.#define 
ef30: 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f  UNPACKED_PREFIX_
ef40: 4d 41 54 43 48 20 20 30 78 30 32 20 20 2f 2a 20  MATCH  0x02  /* 
ef50: 41 20 70 72 65 66 69 78 20 6d 61 74 63 68 20 69  A prefix match i
ef60: 73 20 63 6f 6e 73 69 64 65 72 65 64 20 4f 4b 20  s considered OK 
ef70: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43  */.#define UNPAC
ef80: 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43  KED_PREFIX_SEARC
ef90: 48 20 30 78 30 34 20 20 2f 2a 20 49 67 6e 6f 72  H 0x04  /* Ignor
efa0: 65 20 66 69 6e 61 6c 20 28 72 6f 77 69 64 29 20  e final (rowid) 
efb0: 66 69 65 6c 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  field */../*.** 
efc0: 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69  Each SQL index i
efd0: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
efe0: 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a   memory by an.**
eff0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
f000: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
f010: 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ture..**.** The 
f020: 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74  columns of the t
f030: 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f  able that are to
f040: 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65 20   be indexed are 
f050: 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20  described.** by 
f060: 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66  the aiColumn[] f
f070: 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72  ield of this str
f080: 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61  ucture.  For exa
f090: 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a  mple, suppose.**
f0a0: 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c   we have the fol
f0b0: 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64  lowing table and
f0c0: 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20   index:.**.**   
f0d0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 45    CREATE TABLE E
f0e0: 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e  x1(c1 int, c2 in
f0f0: 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20  t, c3 text);.** 
f100: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
f110: 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63   Ex2 ON Ex1(c3,c
f120: 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  1);.**.** In the
f130: 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65   Table structure
f140: 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c   describing Ex1,
f150: 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65   nCol==3 because
f160: 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68   there are.** th
f170: 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  ree columns in t
f180: 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68  he table.  In th
f190: 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72  e Index structur
f1a0: 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20  e describing.** 
f1b0: 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20  Ex2, nColumn==2 
f1c0: 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33  since 2 of the 3
f1d0: 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20   columns of Ex1 
f1e0: 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20  are indexed..** 
f1f0: 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43  The value of aiC
f200: 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e  olumn is {2, 0}.
f210: 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32    aiColumn[0]==2
f220: 20 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a   because the .**
f230: 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f   first column to
f240: 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29   be indexed (c3)
f250: 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
f260: 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d   2 in Ex1.aCol[]
f270: 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20  ..** The second 
f280: 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
f290: 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e  exed (c1) has an
f2a0: 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a   index of 0 in.*
f2b0: 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65  * Ex1.aCol[], he
f2c0: 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e  nce Ex2.aiColumn
f2d0: 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68  [1]==0..**.** Th
f2e0: 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  e Index.onError 
f2f0: 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73  field determines
f300: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
f310: 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75  the indexed colu
f320: 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75  mns.** must be u
f330: 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74  nique and what t
f340: 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65  o do if they are
f350: 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65   not.  When Inde
f360: 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e  x.onError=OE_Non
f370: 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74  e,.** it means t
f380: 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69  his is not a uni
f390: 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65  que index.  Othe
f3a0: 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e  rwise it is a un
f3b0: 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e  ique index.** an
f3c0: 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49  d the value of I
f3d0: 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64  ndex.onError ind
f3e0: 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20  icate the which 
f3f0: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
f400: 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68  ion .** algorith
f410: 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e  m to employ when
f420: 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20  ever an attempt 
f430: 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72  is made to inser
f440: 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a  t a non-unique.*
f450: 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  * element..*/.st
f460: 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63  ruct Index {.  c
f470: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
f480: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
f490: 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
f4a0: 0a 20 20 69 6e 74 20 2a 61 69 43 6f 6c 75 6d 6e  .  int *aiColumn
f4b0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
f4c0: 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65  hich columns are
f4d0: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e   used by this in
f4e0: 64 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a  dex.  1st is 0 *
f4f0: 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52  /.  tRowcnt *aiR
f500: 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20  owEst;       /* 
f510: 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73  From ANALYZE: Es
f520: 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64  t. rows selected
f530: 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   by each column 
f540: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
f550: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
f560: 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62   The SQL table b
f570: 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a  eing indexed */.
f580: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
f590: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
f5a0: 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
f5b0: 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
f5c0: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
f5d0: 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20  ndex *pNext;    
f5e0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
f5f0: 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69  ext index associ
f600: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61  ated with the sa
f610: 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63  me table */.  Sc
f620: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
f630: 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
f640: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73   containing this
f650: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a   index */.  u8 *
f660: 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
f670: 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68       /* for each
f680: 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44   column: True==D
f690: 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20  ESC, False==ASC 
f6a0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f  */.  char **azCo
f6b0: 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ll;           /*
f6c0: 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74   Array of collat
f6d0: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d  ion sequence nam
f6e0: 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a  es for index */.
f6f0: 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
f700: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42             /* DB
f710: 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67   Page containing
f720: 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e   root of this in
f730: 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f  dex */.  u16 nCo
f740: 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
f750: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
f760: 6f 6c 75 6d 6e 73 20 69 6e 20 74 61 62 6c 65 20  olumns in table 
f770: 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
f780: 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72  ex */.  u8 onErr
f790: 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  or;             
f7a0: 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45   /* OE_Abort, OE
f7b0: 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c  _Ignore, OE_Repl
f7c0: 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20  ace, or OE_None 
f7d0: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 61 75  */.  unsigned au
f7e0: 74 6f 49 6e 64 65 78 3a 32 3b 20 20 20 20 2f 2a  toIndex:2;    /*
f7f0: 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50   1==UNIQUE, 2==P
f800: 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43  RIMARY KEY, 0==C
f810: 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20  REATE INDEX */. 
f820: 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64   unsigned bUnord
f830: 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65  ered:1;   /* Use
f840: 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20   this index for 
f850: 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73  == or IN queries
f860: 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67   only */.  unsig
f870: 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a  ned uniqNotNull:
f880: 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55  1;  /* True if U
f890: 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55  NIQUE and NOT NU
f8a0: 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d  LL for all colum
f8b0: 6e 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ns */.#ifdef SQL
f8c0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
f8d0: 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20  .  int nSample; 
f8e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
f8f0: 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
f900: 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a  s in aSample[] *
f910: 2f 0a 20 20 74 52 6f 77 63 6e 74 20 61 76 67 45  /.  tRowcnt avgE
f920: 71 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  q;           /* 
f930: 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75  Average nEq valu
f940: 65 20 66 6f 72 20 6b 65 79 20 76 61 6c 75 65 73  e for key values
f950: 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20   not in aSample 
f960: 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65  */.  IndexSample
f970: 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a   *aSample;    /*
f980: 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20   Samples of the 
f990: 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f  left-most key */
f9a0: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
f9b0: 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74  * Each sample st
f9c0: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
f9d0: 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69  te_stat3 table i
f9e0: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
f9f0: 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e   memory .** usin
fa00: 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66  g a structure of
fa10: 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65   this type.  See
fa20: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   documentation a
fa30: 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
fa40: 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f  .** analyze.c so
fa50: 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64  urce file for ad
fa60: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
fa70: 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
fa80: 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20  IndexSample {.  
fa90: 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
faa0: 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 56   *z;        /* V
fab0: 61 6c 75 65 20 69 66 20 65 54 79 70 65 20 69 73  alue if eType is
fac0: 20 53 51 4c 49 54 45 5f 54 45 58 54 20 6f 72 20   SQLITE_TEXT or 
fad0: 53 51 4c 49 54 45 5f 42 4c 4f 42 20 2a 2f 0a 20  SQLITE_BLOB */. 
fae0: 20 20 20 64 6f 75 62 6c 65 20 72 3b 20 20 20 20     double r;    
faf0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65     /* Value if e
fb00: 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f 46  Type is SQLITE_F
fb10: 4c 4f 41 54 20 2a 2f 0a 20 20 20 20 69 36 34 20  LOAT */.    i64 
fb20: 69 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  i;          /* V
fb30: 61 6c 75 65 20 69 66 20 65 54 79 70 65 20 69 73  alue if eType is
fb40: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20   SQLITE_INTEGER 
fb50: 2a 2f 0a 20 20 7d 20 75 3b 0a 20 20 75 38 20 65  */.  } u;.  u8 e
fb60: 54 79 70 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Type;         /*
fb70: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 53 51   SQLITE_NULL, SQ
fb80: 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 2e 2e 2e  LITE_INTEGER ...
fb90: 20 65 74 63 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e   etc. */.  int n
fba0: 42 79 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Byte;        /* 
fbb0: 53 69 7a 65 20 69 6e 20 62 79 74 65 20 6f 66 20  Size in byte of 
fbc0: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2e 20 2a 2f  text or blob. */
fbd0: 0a 20 20 74 52 6f 77 63 6e 74 20 6e 45 71 3b 20  .  tRowcnt nEq; 
fbe0: 20 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d       /* Est. num
fbf0: 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
fc00: 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73  e the key equals
fc10: 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
fc20: 20 20 74 52 6f 77 63 6e 74 20 6e 4c 74 3b 20 20    tRowcnt nLt;  
fc30: 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
fc40: 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
fc50: 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
fc60: 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
fc70: 0a 20 20 74 52 6f 77 63 6e 74 20 6e 44 4c 74 3b  .  tRowcnt nDLt;
fc80: 20 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d       /* Est. num
fc90: 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20  ber of distinct 
fca0: 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74  keys less than t
fcb0: 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b  his sample */.};
fcc0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b  ../*.** Each tok
fcd0: 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66  en coming out of
fce0: 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e   the lexer is an
fcf0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20   instance of.** 
fd00: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
fd10: 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f   Tokens are also
fd20: 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66   used as part of
fd30: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a   an expression..
fd40: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f  **.** Note if To
fd50: 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f  ken.z==0 then To
fd60: 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65  ken.dyn and Toke
fd70: 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65  n.n are undefine
fd80: 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e  d and.** may con
fd90: 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75  tain random valu
fda0: 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65  es.  Do not make
fdb0: 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73   any assumptions
fdc0: 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e   about Token.dyn
fdd0: 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  .** and Token.n 
fde0: 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e  when Token.z==0.
fdf0: 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e  .*/.struct Token
fe00: 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
fe10: 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20  *z;     /* Text 
fe20: 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e  of the token.  N
fe30: 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74  ot NULL-terminat
fe40: 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ed! */.  unsigne
fe50: 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e  d int n;    /* N
fe60: 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
fe70: 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65  ers in this toke
fe80: 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  n */.};../*.** A
fe90: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
fea0: 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  is structure con
feb0: 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
fec0: 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
fed0: 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
fee0: 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63   a SELECT that c
fef0: 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
ff00: 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  e functions..**.
ff10: 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54  ** If Expr.op==T
ff20: 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20  K_AGG_COLUMN or 
ff30: 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
ff40: 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e  then Expr.pAggIn
ff50: 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  fo is a.** point
ff60: 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
ff70: 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e  ture.  The Expr.
ff80: 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73  iColumn field is
ff90: 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a   the index in.**
ffa0: 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20   AggInfo.aCol[] 
ffb0: 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  or AggInfo.aFunc
ffc0: 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  [] of informatio
ffd0: 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
ffe0: 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
fff0: 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a   that node..**.*
10000 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70  * AggInfo.pGroup
10010 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61  By and AggInfo.a
10020 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74  Func.pExpr point
10030 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69   to fields withi
10040 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  n the.** origina
10050 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75  l Select structu
10060 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  re that describe
10070 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  s the SELECT sta
10080 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a  tement.  These.*
10090 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20  * fields do not 
100a0 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64  need to be freed
100b0 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69   when deallocati
100c0 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73  ng the AggInfo s
100d0 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
100e0 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20  uct AggInfo {.  
100f0 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20  u8 directMode;  
10100 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63          /* Direc
10110 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65  t rendering mode
10120 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61   means take data
10130 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20   directly.      
10140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10150 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72      ** from sour
10160 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72  ce tables rather
10170 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d   than from accum
10180 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20  ulators */.  u8 
10190 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20  useSortingIdx;  
101a0 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63       /* In direc
101b0 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63  t mode, referenc
101c0 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  e the sorting in
101d0 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20  dex rather.     
101e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101f0 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65       ** than the
10200 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
10210 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
10220 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75  x;         /* Cu
10230 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
10240 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
10250 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
10260 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a  gIdxPTab;     /*
10270 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
10280 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a  f pseudo-table *
10290 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67  /.  int nSorting
102a0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e  Column;     /* N
102b0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
102c0 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
102d0 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 4c  index */.  ExprL
102e0 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
102f0 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20     /* The group 
10300 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73  by clause */.  s
10310 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f  truct AggInfo_co
10320 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61  l {    /* For ea
10330 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69  ch column used i
10340 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  n source tables 
10350 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
10360 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
10370 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20  /* Source table 
10380 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c  */.    int iTabl
10390 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
103a0 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
103b0 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74   of the source t
103c0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
103d0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
103e0 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
103f0 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65  umber within the
10400 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
10410 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72  .    int iSorter
10420 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a  Column;       /*
10430 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   Column number i
10440 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
10450 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  dex */.    int i
10460 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
10470 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
10480 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
10490 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
104a0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
104b0 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
104c0 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  /* The original 
104d0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
104e0 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e  } *aCol;.  int n
104f0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
10500 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10510 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20  used entries in 
10520 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  aCol[] */.  int 
10530 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20  nAccumulator;   
10540 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10550 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68   columns that sh
10560 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ow through to th
10570 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20  e output..      
10580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10590 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61      ** Additiona
105a0 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  l columns are us
105b0 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d  ed only as param
105c0 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20  eters to.       
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105e0 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20     ** aggregate 
105f0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  functions */.  s
10600 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75  truct AggInfo_fu
10610 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61  nc {   /* For ea
10620 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ch aggregate fun
10630 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70  ction */.    Exp
10640 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
10650 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
10660 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65  ion encoding the
10670 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
10680 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b   FuncDef *pFunc;
10690 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
106a0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
106b0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
106c0 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  on */.    int iM
106d0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
106e0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
106f0 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
10700 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
10710 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69  /.    int iDisti
10720 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nct;           /
10730 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  * Ephemeral tabl
10740 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63  e used to enforc
10750 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20  e DISTINCT */.  
10760 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20  } *aFunc;.  int 
10770 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  nFunc;          
10780 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10790 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e   entries in aFun
107a0 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  c[] */.};../*.**
107b0 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e   The datatype yn
107c0 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20  Var is a signed 
107d0 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20  integer, either 
107e0 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74  16-bit or 32-bit
107f0 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20  ..** Usually it 
10800 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74  is 16-bits.  But
10810 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56   if SQLITE_MAX_V
10820 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69  ARIABLE_NUMBER i
10830 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61  s greater.** tha
10840 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20  n 32767 we have 
10850 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69  to make it 32-bi
10860 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72  t.  16-bit is pr
10870 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a  eferred because.
10880 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20  ** it uses less 
10890 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78  memory in the Ex
108a0 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68  pr object, which
108b0 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79   is a big memory
108c0 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74   user.** in syst
108d0 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66  ems with lots of
108e0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
108f0 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61  ents.  And few a
10900 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e  pplications.** n
10910 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62  eed more than ab
10920 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72  out 10 or 20 var
10930 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d  iables.  But som
10940 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20  e extreme users 
10950 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20  want.** to have 
10960 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
10970 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32  nts with over 32
10980 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61  767 variables, a
10990 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74  nd for them.** t
109a0 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61  he option is ava
109b0 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69  ilable (at compi
109c0 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66  le-time)..*/.#if
109d0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
109e0 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37  ABLE_NUMBER<=327
109f0 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79  67.typedef i16 y
10a00 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65  nVar;.#else.type
10a10 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23  def int ynVar;.#
10a20 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  endif../*.** Eac
10a30 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70  h node of an exp
10a40 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70  ression in the p
10a50 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20  arse tree is an 
10a60 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
10a70 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
10a80 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20  *.** Expr.op is 
10a90 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20  the opcode. The 
10aa0 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74  integer parser t
10ab0 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72  oken codes are r
10ac0 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f  eused.** as opco
10ad0 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78  des here. For ex
10ae0 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65  ample, the parse
10af0 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20  r defines TK_GE 
10b00 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
10b10 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65  .** code represe
10b20 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f  nting the ">=" o
10b30 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61  perator. This sa
10b40 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20  me integer code 
10b50 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20  is reused.** to 
10b60 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72  represent the gr
10b70 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71  eater-than-or-eq
10b80 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20  ual-to operator 
10b90 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  in the expressio
10ba0 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a  n.** tree..**.**
10bb0 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
10bc0 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74  on is an SQL lit
10bd0 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52  eral (TK_INTEGER
10be0 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42  , TK_FLOAT, TK_B
10bf0 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53  LOB, .** or TK_S
10c00 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70  TRING), then Exp
10c10 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
10c20 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65   the text of the
10c30 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66   SQL literal. If
10c40 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
10c50 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c 65  on is a variable
10c60 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20   (TK_VARIABLE), 
10c70 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
10c80 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a  contains the .**
10c90 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20   variable name. 
10ca0 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20  Finally, if the 
10cb0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
10cc0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54   SQL function (T
10cd0 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20  K_FUNCTION),.** 
10ce0 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
10cf0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d  contains the nam
10d00 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
10d10 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52  n..**.** Expr.pR
10d20 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c  ight and Expr.pL
10d30 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74  eft are the left
10d40 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78   and right subex
10d50 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a  pressions of a.*
10d60 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  * binary operato
10d70 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74  r. Either or bot
10d80 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a  h may be NULL..*
10d90 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73  *.** Expr.x.pLis
10da0 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61  t is a list of a
10db0 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20  rguments if the 
10dc0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
10dd0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a   SQL function,.*
10de0 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73  * a CASE express
10df0 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70  ion or an IN exp
10e00 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
10e10 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c  orm "<lhs> IN (<
10e20 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a  y>, <z>...)"..**
10e30 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
10e40 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65  is used if the e
10e50 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
10e60 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20  ub-select or an 
10e70 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a  expression of.**
10e80 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
10e90 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29   IN (SELECT ...)
10ea0 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73  ". If the EP_xIs
10eb0 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65  Select bit is se
10ec0 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  t in the.** Expr
10ed0 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
10ee0 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  n Expr.x.pSelect
10ef0 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72   is valid. Other
10f00 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69  wise, Expr.x.pLi
10f10 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e  st is .** valid.
10f20 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73  .**.** An expres
10f30 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
10f40 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66   ID or ID.ID ref
10f50 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  ers to a column 
10f60 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46  in a table..** F
10f70 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69  or such expressi
10f80 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20  ons, Expr.op is 
10f90 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e  set to TK_COLUMN
10fa0 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65   and Expr.iTable
10fb0 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67   is.** the integ
10fc0 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  er cursor number
10fd0 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f   of a VDBE curso
10fe0 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
10ff0 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20  at table and.** 
11000 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20  Expr.iColumn is 
11010 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  the column numbe
11020 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  r for the specif
11030 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74  ic column.  If t
11040 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  he.** expression
11050 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65   is used as a re
11060 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65  sult in an aggre
11070 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65  gate SELECT, the
11080 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
11090 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e  s also stored in
110a0 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63   the Expr.iAgg c
110b0 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67  olumn in the agg
110c0 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a  regate so that.*
110d0 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65  * it can be acce
110e0 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61  ssed after all a
110f0 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f  ggregates are co
11100 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  mputed..**.** If
11110 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
11120 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61  is an unbound va
11130 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61  riable marker (a
11140 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a   question mark .
11150 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
11160 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
11170 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
11180 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
11190 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e   the index .** n
111a0 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76  umber for that v
111b0 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  ariable..**.** I
111c0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
111d0 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74   is a subquery t
111e0 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  hen Expr.iColumn
111f0 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
11200 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75  r.** register nu
11210 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20  mber containing 
11220 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
11230 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20  e subquery.  If 
11240 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20  the.** subquery 
11250 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74  gives a constant
11260 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54   result, then iT
11270 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20  able is -1.  If 
11280 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20  the subquery.** 
11290 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e  gives a differen
112a0 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66  t answer at diff
112b0 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69  erent times duri
112c0 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f  ng statement pro
112d0 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20  cessing.** then 
112e0 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64  iTable is the ad
112f0 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f  dress of a subro
11300 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75  utine that compu
11310 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79  tes the subquery
11320 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
11330 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f  xpr is of type O
11340 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68  P_Column, and th
11350 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65  e table it is se
11360 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20  lecting from.** 
11370 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20  is a disk table 
11380 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70  or the "old.*" p
11390 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65  seudo-table, the
113a0 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f  n pTab points to
113b0 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
113c0 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69  nding table defi
113d0 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c  nition..**.** AL
113e0 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a  LOCATION NOTES:.
113f0 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63  **.** Expr objec
11400 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74  ts can use a lot
11410 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65   of memory space
11420 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68   in database sch
11430 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70  ema.  To.** help
11440 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72   reduce memory r
11450 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d  equirements, som
11460 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f  etimes an Expr o
11470 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a  bject will be.**
11480 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64   truncated.  And
11490 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e   to reduce the n
114a0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
114b0 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d  allocations, som
114c0 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72  etimes.** two or
114d0 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63   more Expr objec
114e0 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  ts will be store
114f0 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65  d in a single me
11500 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c  mory allocation,
11510 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74  .** together wit
11520 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74  h Expr.zToken st
11530 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  rings..**.** If 
11540 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61  the EP_Reduced a
11550 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  nd EP_TokenOnly 
11560 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68  flags are set wh
11570 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62  en.** an Expr ob
11580 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65  ject is truncate
11590 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75  d.  When EP_Redu
115a0 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ced is set, then
115b0 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c   all.** the chil
115c0 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69  d Expr objects i
115d0 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74  n the Expr.pLeft
115e0 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74   and Expr.pRight
115f0 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65   subtrees.** are
11600 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
11610 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72  n the same memor
11620 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  y allocation.  N
11630 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68  ote, however, th
11640 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65  at.** the subtre
11650 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69  es in Expr.x.pLi
11660 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65  st or Expr.x.pSe
11670 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20  lect are always 
11680 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c  separately.** al
11690 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c  located, regardl
116a0 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
116b0 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64  r not EP_Reduced
116c0 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75   is set..*/.stru
116d0 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f  ct Expr {.  u8 o
116e0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
116f0 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20     /* Operation 
11700 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69  performed by thi
11710 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72  s node */.  char
11720 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
11730 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
11740 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ty of the column
11750 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63   or 0 if not a c
11760 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 31 36 20 66  olumn */.  u16 f
11770 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
11780 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61    /* Various fla
11790 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65  gs.  EP_* See be
117a0 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  low */.  union {
117b0 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65  .    char *zToke
117c0 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
117d0 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f  oken value. Zero
117e0 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20   terminated and 
117f0 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20  dequoted */.    
11800 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20  int iValue;     
11810 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65         /* Non-ne
11820 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76  gative integer v
11830 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61  alue if EP_IntVa
11840 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20  lue */.  } u;.. 
11850 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f   /* If the EP_To
11860 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20  kenOnly flag is 
11870 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
11880 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
11890 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
118a0 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
118b0 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
118c0 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
118d0 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
118e0 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
118f0 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
11900 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
11910 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a  tion. .  *******
11920 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11930 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
11960 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20  .  Expr *pLeft; 
11970 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66            /* Lef
11980 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45  t subnode */.  E
11990 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20  xpr *pRight;    
119a0 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73        /* Right s
119b0 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  ubnode */.  unio
119c0 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74  n {.    ExprList
119d0 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20   *pList;     /* 
119e0 46 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  Function argumen
119f0 74 73 20 6f 72 20 69 6e 20 22 3c 65 78 70 72 3e  ts or in "<expr>
11a00 20 49 4e 20 28 3c 65 78 70 72 2d 6c 69 73 74 29   IN (<expr-list)
11a10 22 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  " */.    Select 
11a20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
11a30 20 55 73 65 64 20 66 6f 72 20 73 75 62 2d 73 65   Used for sub-se
11a40 6c 65 63 74 73 20 61 6e 64 20 22 3c 65 78 70 72  lects and "<expr
11a50 3e 20 49 4e 20 28 3c 73 65 6c 65 63 74 3e 29 22  > IN (<select>)"
11a60 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a   */.  } x;..  /*
11a70 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
11a80 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ed flag is set i
11a90 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
11aa0 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
11ab0 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
11ac0 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
11ad0 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
11ae0 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
11af0 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
11b00 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
11b10 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
11b20 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
11b30 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
11b40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11b50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11b60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11b70 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53  ********/..#if S
11b80 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
11b90 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65  EPTH>0.  int nHe
11ba0 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
11bb0 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65  /* Height of the
11bc0 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20   tree headed by 
11bd0 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e  this node */.#en
11be0 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65  dif.  int iTable
11bf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11c00 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f  TK_COLUMN: curso
11c10 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  r number of tabl
11c20 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e  e holding column
11c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11c40 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
11c50 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74  REGISTER: regist
11c60 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20  er number.      
11c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c80 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52     ** TK_TRIGGER
11c90 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e  : 1 -> new, 0 ->
11ca0 20 6f 6c 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20   old */.  ynVar 
11cb0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
11cc0 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
11cd0 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31  olumn index.  -1
11ce0 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20   for rowid..    
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d00 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41       ** TK_VARIA
11d10 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75  BLE: variable nu
11d20 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20  mber (always >= 
11d30 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67  1). */.  i16 iAg
11d40 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
11d50 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69  /* Which entry i
11d60 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c  n pAggInfo->aCol
11d70 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20  [] or ->aFunc[] 
11d80 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a  */.  i16 iRightJ
11d90 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49  oinTable;   /* I
11da0 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74  f EP_FromJoin, t
11db0 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f  he right table o
11dc0 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20  f the join */.  
11dd0 75 38 20 66 6c 61 67 73 32 3b 20 20 20 20 20 20  u8 flags2;      
11de0 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64         /* Second
11df0 20 73 65 74 20 6f 66 20 66 6c 61 67 73 2e 20 20   set of flags.  
11e00 45 50 32 5f 2e 2e 2e 20 2a 2f 0a 20 20 75 38 20  EP2_... */.  u8 
11e10 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  op2;            
11e20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54      /* TK_REGIST
11e30 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c  ER: original val
11e40 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20  ue of Expr.op.  
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e60 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c         ** TK_COL
11e70 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f  UMN: the value o
11e80 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75  f p5 for OP_Colu
11e90 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
11eb0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20  K_AGG_FUNCTION: 
11ec0 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f  nesting depth */
11ed0 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
11ee0 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65  Info;     /* Use
11ef0 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55  d by TK_AGG_COLU
11f00 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55  MN and TK_AGG_FU
11f10 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c  NCTION */.  Tabl
11f20 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
11f30 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20     /* Table for 
11f40 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73  TK_COLUMN expres
11f50 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sions. */.};../*
11f60 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
11f70 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e  g are the meanin
11f80 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68  gs of bits in th
11f90 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  e Expr.flags fie
11fa0 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
11fb0 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 20 30 78 30  P_FromJoin   0x0
11fc0 30 30 31 20 20 2f 2a 20 4f 72 69 67 69 6e 61 74  001  /* Originat
11fd0 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e  ed in ON or USIN
11fe0 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
11ff0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  in */.#define EP
12000 5f 41 67 67 20 20 20 20 20 20 20 20 30 78 30 30  _Agg        0x00
12010 30 32 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  02  /* Contains 
12020 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
12030 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
12040 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
12050 73 6f 6c 76 65 64 20 20 20 30 78 30 30 30 34 20  solved   0x0004 
12060 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65   /* IDs have bee
12070 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f  n resolved to CO
12080 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LUMNs */.#define
12090 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 20 30   EP_Error      0
120a0 78 30 30 30 38 20 20 2f 2a 20 45 78 70 72 65 73  x0008  /* Expres
120b0 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  sion contains on
120c0 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73  e or more errors
120d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
120e0 69 73 74 69 6e 63 74 20 20 20 30 78 30 30 31 30  istinct   0x0010
120f0 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66    /* Aggregate f
12100 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53  unction with DIS
12110 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  TINCT keyword */
12120 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53  .#define EP_VarS
12130 65 6c 65 63 74 20 20 30 78 30 30 32 30 20 20 2f  elect  0x0020  /
12140 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72  * pSelect is cor
12150 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e  related, not con
12160 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  stant */.#define
12170 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 20 30   EP_DblQuoted  0
12180 78 30 30 34 30 20 20 2f 2a 20 74 6f 6b 65 6e 2e  x0040  /* token.
12190 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  z was originally
121a0 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65   in "..." */.#de
121b0 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e  fine EP_InfixFun
121c0 63 20 20 30 78 30 30 38 30 20 20 2f 2a 20 54 72  c  0x0080  /* Tr
121d0 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20  ue for an infix 
121e0 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20  function: LIKE, 
121f0 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65  GLOB, etc */.#de
12200 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20  fine EP_Collate 
12210 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20 54 72     0x0100  /* Tr
12220 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
12230 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 61 72 74 6f  _COLLATE opearto
12240 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
12250 46 69 78 65 64 44 65 73 74 20 20 30 78 30 32 30  FixedDest  0x020
12260 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 6e 65 65  0  /* Result nee
12270 64 65 64 20 69 6e 20 61 20 73 70 65 63 69 66 69  ded in a specifi
12280 63 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 23 64  c register */.#d
12290 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75  efine EP_IntValu
122a0 65 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 49  e   0x0400  /* I
122b0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e  nteger value con
122c0 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c  tained in u.iVal
122d0 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ue */.#define EP
122e0 5f 78 49 73 53 65 6c 65 63 74 20 20 30 78 30 38  _xIsSelect  0x08
122f0 30 30 20 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74  00  /* x.pSelect
12300 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72   is valid (other
12310 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29  wise x.pList is)
12320 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48   */.#define EP_H
12330 69 6e 74 20 20 20 20 20 20 20 30 78 31 30 30 30  int       0x1000
12340 20 20 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f    /* Not used */
12350 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75  .#define EP_Redu
12360 63 65 64 20 20 20 20 30 78 32 30 30 30 20 20 2f  ced    0x2000  /
12370 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 69 73  * Expr struct is
12380 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
12390 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
123a0 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e  #define EP_Token
123b0 4f 6e 6c 79 20 20 30 78 34 30 30 30 20 20 2f 2a  Only  0x4000  /*
123c0 20 45 78 70 72 20 73 74 72 75 63 74 20 69 73 20   Expr struct is 
123d0 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49  EXPR_TOKENONLYSI
123e0 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
123f0 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74  .#define EP_Stat
12400 69 63 20 20 20 20 20 30 78 38 30 30 30 20 20 2f  ic     0x8000  /
12410 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79  * Held in memory
12420 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72   not obtained fr
12430 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 0a  om malloc() */..
12440 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
12450 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
12460 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
12470 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 32 20  the Expr.flags2 
12480 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
12490 65 20 45 50 32 5f 4d 61 6c 6c 6f 63 65 64 54 6f  e EP2_MallocedTo
124a0 6b 65 6e 20 20 30 78 30 30 30 31 20 20 2f 2a 20  ken  0x0001  /* 
124b0 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44  Need to sqlite3D
124c0 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f  bFree() Expr.zTo
124d0 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ken */.#define E
124e0 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65 20 20  P2_Irreducible  
124f0 20 20 30 78 30 30 30 32 20 20 2f 2a 20 43 61 6e    0x0002  /* Can
12500 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55  not EXPRDUP_REDU
12510 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a  CE this Expr */.
12520 0a 2f 2a 0a 2a 2a 20 54 68 65 20 70 73 65 75 64  ./*.** The pseud
12530 6f 2d 72 6f 75 74 69 6e 65 20 73 71 6c 69 74 65  o-routine sqlite
12540 33 45 78 70 72 53 65 74 49 72 72 65 64 75 63 69  3ExprSetIrreduci
12550 62 6c 65 20 73 65 74 73 20 74 68 65 20 45 50 32  ble sets the EP2
12560 5f 49 72 72 65 64 75 63 69 62 6c 65 0a 2a 2a 20  _Irreducible.** 
12570 66 6c 61 67 20 6f 6e 20 61 6e 20 65 78 70 72 65  flag on an expre
12580 73 73 69 6f 6e 20 73 74 72 75 63 74 75 72 65 2e  ssion structure.
12590 20 20 54 68 69 73 20 66 6c 61 67 20 69 73 20 75    This flag is u
125a0 73 65 64 20 66 6f 72 20 56 56 26 41 20 6f 6e 6c  sed for VV&A onl
125b0 79 2e 20 20 54 68 65 0a 2a 2a 20 72 6f 75 74 69  y.  The.** routi
125c0 6e 65 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  ne is implemente
125d0 64 20 61 73 20 61 20 6d 61 63 72 6f 20 74 68 61  d as a macro tha
125e0 74 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 77 68 65  t only works whe
125f0 6e 20 69 6e 20 64 65 62 75 67 67 69 6e 67 20 6d  n in debugging m
12600 6f 64 65 2c 0a 2a 2a 20 73 6f 20 61 73 20 6e 6f  ode,.** so as no
12610 74 20 74 6f 20 62 75 72 64 65 6e 20 70 72 6f 64  t to burden prod
12620 75 63 74 69 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a  uction code..*/.
12630 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
12640 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70  BUG.# define Exp
12650 72 53 65 74 49 72 72 65 64 75 63 69 62 6c 65 28  rSetIrreducible(
12660 58 29 20 20 28 58 29 2d 3e 66 6c 61 67 73 32 20  X)  (X)->flags2 
12670 7c 3d 20 45 50 32 5f 49 72 72 65 64 75 63 69 62  |= EP2_Irreducib
12680 6c 65 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  le.#else.# defin
12690 65 20 45 78 70 72 53 65 74 49 72 72 65 64 75 63  e ExprSetIrreduc
126a0 69 62 6c 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ible(X).#endif..
126b0 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
126c0 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
126d0 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
126e0 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
126f0 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  e .** Expr.flags
12700 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
12710 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72  ne ExprHasProper
12720 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45  ty(E,P)     (((E
12730 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  )->flags&(P))==(
12740 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  P)).#define Expr
12750 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 45  HasAnyProperty(E
12760 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67  ,P)  (((E)->flag
12770 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
12780 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ne ExprSetProper
12790 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d  ty(E,P)     (E)-
127a0 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
127b0 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f  ine ExprClearPro
127c0 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29  perty(E,P)   (E)
127d0 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
127e0 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
127f0 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d  etermine the num
12800 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71  ber of bytes req
12810 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61  uired by a norma
12820 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63  l Expr .** struc
12830 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  t, an Expr struc
12840 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65  t with the EP_Re
12850 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69  duced flag set i
12860 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a  n Expr.flags .**
12870 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72   and an Expr str
12880 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
12890 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73  TokenOnly flag s
128a0 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  et..*/.#define E
128b0 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20  XPR_FULLSIZE    
128c0 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78         sizeof(Ex
128d0 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a  pr)           /*
128e0 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64   Full size */.#d
128f0 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43  efine EXPR_REDUC
12900 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66  EDSIZE        of
12910 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62  fsetof(Expr,iTab
12920 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66  le)  /* Common f
12930 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69  eatures */.#defi
12940 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ne EXPR_TOKENONL
12950 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65  YSIZE      offse
12960 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20  tof(Expr,pLeft) 
12970 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75    /* Fewer featu
12980 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c  res */../*.** Fl
12990 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  ags passed to th
129a0 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
129b0 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65  () function. See
129c0 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d   the header comm
129d0 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71  ent .** above sq
129e0 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
129f0 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23  or details..*/.#
12a00 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52  define EXPRDUP_R
12a10 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78  EDUCE         0x
12a20 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65  0001  /* Used re
12a30 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20  duced-size Expr 
12a40 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  nodes */../*.** 
12a50 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
12a60 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70  sions.  Each exp
12a70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69  ression may opti
12a80 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a  onally have a.**
12a90 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f   name.  An expr/
12aa0 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  name combination
12ab0 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
12ac0 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75  several ways, su
12ad0 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73  ch.** as the lis
12ae0 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44  t of "expr AS ID
12af0 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69  " fields followi
12b00 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72  ng a "SELECT" or
12b10 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20   in the.** list 
12b20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69  of "ID = expr" i
12b30 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54  tems in an UPDAT
12b40 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78  E.  A list of ex
12b50 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a  pressions can.**
12b60 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73   also be used as
12b70 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
12b80 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20   a function, in 
12b90 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61  which case the a
12ba0 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20  .zName.** field 
12bb0 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
12bc0 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68  ** By default th
12bd0 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65  e Expr.zSpan fie
12be0 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e  ld holds a human
12bf0 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69  -readable descri
12c00 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ption of.** the 
12c10 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
12c20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  is used in the g
12c30 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72  eneration of err
12c40 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a  or messages and.
12c50 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73  ** column labels
12c60 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
12c70 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74   Expr.zSpan is t
12c80 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78  ypically the tex
12c90 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e  t of a.** column
12ca0 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69   expression as i
12cb0 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45  t exists in a SE
12cc0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
12cd0 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20   However, if.** 
12ce0 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66  the bSpanIsTab f
12cf0 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
12d00 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f   zSpan is overlo
12d10 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65  aded to mean the
12d20 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20   name.** of the 
12d30 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e  result column in
12d40 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42   the form: DATAB
12d50 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e  ASE.TABLE.COLUMN
12d60 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a  .  This later.**
12d70 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f   form is used fo
12d80 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f  r name resolutio
12d90 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52  n with nested FR
12da0 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73  OM clauses..*/.s
12db0 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b  truct ExprList {
12dc0 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20  .  int nExpr;   
12dd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12de0 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
12df0 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  ns on the list *
12e00 2f 0a 20 20 69 6e 74 20 69 45 43 75 72 73 6f 72  /.  int iECursor
12e10 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 44  ;          /* VD
12e20 42 45 20 43 75 72 73 6f 72 20 61 73 73 6f 63 69  BE Cursor associ
12e30 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 45  ated with this E
12e40 78 70 72 4c 69 73 74 20 2a 2f 0a 20 20 73 74 72  xprList */.  str
12e50 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65  uct ExprList_ite
12e60 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  m { /* For each 
12e70 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
12e80 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78  e list */.    Ex
12e90 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
12ea0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73        /* The lis
12eb0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
12ec0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
12ed0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
12ee0 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61  /* Token associa
12ef0 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78  ted with this ex
12f00 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
12f10 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
12f20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69          /* Origi
12f30 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
12f40 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
12f50 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20    u8 sortOrder; 
12f60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66            /* 1 f
12f70 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72  or DESC or 0 for
12f80 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69   ASC */.    unsi
12f90 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20  gned done :1;   
12fa0 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f      /* A flag to
12fb0 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70   indicate when p
12fc0 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e  rocessing is fin
12fd0 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73  ished */.    uns
12fe0 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62  igned bSpanIsTab
12ff0 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f   :1; /* zSpan ho
13000 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c  lds DB.TABLE.COL
13010 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 31 36 20 69  UMN */.    u16 i
13020 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20  OrderByCol;     
13030 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20     /* For ORDER 
13040 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  BY, column numbe
13050 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20  r in result set 
13060 2a 2f 0a 20 20 20 20 75 31 36 20 69 41 6c 69 61  */.    u16 iAlia
13070 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
13080 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72  * Index into Par
13090 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20  se.aAlias[] for 
130a0 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b  zName */.  } *a;
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130c0 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77    /* Alloc a pow
130d0 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65  er of two greate
130e0 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45  r or equal to nE
130f0 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  xpr */.};../*.**
13100 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
13110 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
13120 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 61  s used by the pa
13130 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62  rser to record b
13140 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  oth.** the parse
13150 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70   tree for an exp
13160 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  ression and the 
13170 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65  span of input te
13180 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  xt for an.** exp
13190 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ression..*/.stru
131a0 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20  ct ExprSpan {.  
131b0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
131c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70        /* The exp
131d0 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72  ression parse tr
131e0 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ee */.  const ch
131f0 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a  ar *zStart;   /*
13200 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65 72   First character
13210 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
13220 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
13230 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65  zEnd;     /* One
13240 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74 20   character past 
13250 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
13260 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   text */.};../*.
13270 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
13280 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
13290 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70   can hold a simp
132a0 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74  le list of ident
132b0 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20  ifiers,.** such 
132c0 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62  as the list "a,b
132d0 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  ,c" in the follo
132e0 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a  wing statements:
132f0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45  .**.**      INSE
13300 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
13310 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20   VALUES ...;.** 
13320 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
13330 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63  X idx ON t(a,b,c
13340 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  );.**      CREAT
13350 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42  E TRIGGER trig B
13360 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20  EFORE UPDATE ON 
13370 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a  t(a,b,c) ...;.**
13380 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61  .** The IdList.a
13390 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73  .idx field is us
133a0 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69  ed when the IdLi
133b0 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  st represents th
133c0 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c  e list of.** col
133d0 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20  umn names after 
133e0 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  a table name in 
133f0 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
13400 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61  ent.  In the sta
13410 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20  tement.**.**    
13420 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
13430 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20  ,b,c) ....**.** 
13440 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d  If "a" is the k-
13450 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62  th column of tab
13460 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c  le "t", then IdL
13470 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e  ist.a[0].idx==k.
13480 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73  .*/.struct IdLis
13490 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c  t {.  struct IdL
134a0 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63  ist_item {.    c
134b0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
134c0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
134d0 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20  identifier */.  
134e0 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20    int idx;      
134f0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
13500 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b  some Table.aCol[
13510 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  ] of a column na
13520 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  med zName */.  }
13530 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20   *a;.  int nId; 
13540 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13550 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  r of identifiers
13560 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
13570 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  };../*.** The bi
13580 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
13590 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
135a0 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
135b0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
135c0 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
135d0 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
135e0 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
135f0 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
13600 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
13610 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
13620 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
13630 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
13640 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
13650 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
13660 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
13670 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65   ix86..*/.typede
13680 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a  f u64 Bitmask;..
13690 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
136a0 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42 69   of bits in a Bi
136b0 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65  tmask.  "BMS" me
136c0 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a  ans "BitMask Siz
136d0 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42  e"..*/.#define B
136e0 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f  MS  ((int)(sizeo
136f0 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a  f(Bitmask)*8))..
13700 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61  /*.** A bit in a
13710 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66   Bitmask.*/.#def
13720 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20  ine MASKBIT(n)  
13730 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c   (((Bitmask)1)<<
13740 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  (n))../*.** The 
13750 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
13760 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68  ure describes th
13770 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
13780 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
13790 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62  ent..** Each tab
137a0 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
137b0 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
137c0 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20  e is a separate 
137d0 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68  element of.** th
137e0 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72  e SrcList.a[] ar
137f0 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20  ray..**.** With 
13800 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20  the addition of 
13810 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
13820 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66  e support, the f
13830 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
13840 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62  re.** can also b
13850 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69  e used to descri
13860 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  be a particular 
13870 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68  table such as th
13880 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20  e table that.** 
13890 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61  is modified by a
138a0 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  n INSERT, DELETE
138b0 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74  , or UPDATE stat
138c0 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64  ement.  In stand
138d0 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68  ard SQL,.** such
138e0 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65   a table must be
138f0 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20   a simple name: 
13900 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69  ID.  But in SQLi
13910 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61  te, the table ca
13920 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e  n.** now be iden
13930 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61  tified by a data
13940 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74  base name, a dot
13950 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
13960 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a   name: ID.ID..**
13970 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65  .** The jointype
13980 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77   starts out show
13990 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70  ing the join typ
139a0 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75  e between the cu
139b0 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61  rrent table.** a
139c0 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c  nd the next tabl
139d0 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20  e on the list.  
139e0 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64  The parser build
139f0 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20  s the list this 
13a00 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69  way..** But sqli
13a10 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
13a20 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20  oinType() later 
13a30 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74  shifts the joint
13a40 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63  ypes so that eac
13a50 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78  h.** jointype ex
13a60 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e  presses the join
13a70 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62   between the tab
13a80 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
13a90 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ous table..**.**
13aa0 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20   In the colUsed 
13ab0 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d  field, the high-
13ac0 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36  order bit (bit 6
13ad0 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65  3) is set if the
13ae0 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69   table.** contai
13af0 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20  ns more than 63 
13b00 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20  columns and the 
13b10 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63  64-th or later c
13b20 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a  olumn is used..*
13b30 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  /.struct SrcList
13b40 20 7b 0a 20 20 75 38 20 6e 53 72 63 3b 20 20 20   {.  u8 nSrc;   
13b50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13b60 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  f tables or subq
13b70 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52  ueries in the FR
13b80 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  OM clause */.  u
13b90 38 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  8 nAlloc;      /
13ba0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
13bb0 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
13bc0 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
13bd0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
13be0 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
13bf0 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
13c00 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
13c10 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
13c20 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
13c30 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
13c40 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
13c50 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
13c60 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
13c70 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
13c80 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
13c90 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
13ca0 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
13cb0 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
13cc0 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
13cd0 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
13ce0 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
13cf0 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
13d00 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
13d10 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
13d20 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
13d30 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
13d40 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
13d50 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
13d60 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
13d70 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
13d80 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
13d90 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
13da0 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
13db0 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
13dc0 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
13dd0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
13de0 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
13df0 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
13e00 62 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e  b */.    u8 join
13e10 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79  type;      /* Ty
13e20 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65  pe of join betwe
13e30 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64  en this able and
13e40 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
13e50 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f  .    unsigned no
13e60 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
13e70 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
13e80 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
13e90 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
13ea0 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65  unsigned isCorre
13eb0 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72  lated :1;  /* Tr
13ec0 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20  ue if sub-query 
13ed0 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f  is correlated */
13ee0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69  .    unsigned vi
13ef0 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20  aCoroutine :1;  
13f00 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61  /* Implemented a
13f10 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  s a co-routine *
13f20 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
13f30 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
13f40 20 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20    u8 iSelectId; 
13f50 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63      /* If pSelec
13f60 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20  t!=0, the id of 
13f70 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69  the sub-select i
13f80 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a  n EQP */.#endif.
13f90 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b      int iCursor;
13fa0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
13fb0 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
13fc0 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
13fd0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
13fe0 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20   Expr *pOn;     
13ff0 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61     /* The ON cla
14000 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
14010 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73  .    IdList *pUs
14020 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53  ing;   /* The US
14030 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
14040 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d  join */.    Bitm
14050 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a  ask colUsed;  /*
14060 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65   Bit N (1<<N) se
14070 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66  t if column N of
14080 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f   pTab is used */
14090 0a 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65  .    char *zInde
140a0 78 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e 74 69  x;     /* Identi
140b0 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58  fier from "INDEX
140c0 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20  ED BY <zIndex>" 
140d0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e  clause */.    In
140e0 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20  dex *pIndex;    
140f0 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  /* Index structu
14100 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  re corresponding
14110 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20 61   to zIndex, if a
14120 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20  ny */.  } a[1]; 
14130 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
14140 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
14150 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20  h identifier on 
14160 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
14170 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20  /*.** Permitted 
14180 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72  values of the Sr
14190 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65  cList.a.jointype
141a0 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e   field.*/.#defin
141b0 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30  e JT_INNER     0
141c0 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20  x0001    /* Any 
141d0 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72  kind of inner or
141e0 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23   cross join */.#
141f0 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20  define JT_CROSS 
14200 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
14210 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66   Explicit use of
14220 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f   the CROSS keywo
14230 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  rd */.#define JT
14240 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30  _NATURAL   0x000
14250 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  4    /* True for
14260 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69   a "natural" joi
14270 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
14280 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38  LEFT      0x0008
14290 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65      /* Left oute
142a0 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
142b0 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30  e JT_RIGHT     0
142c0 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68  x0010    /* Righ
142d0 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
142e0 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52  #define JT_OUTER
142f0 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f       0x0020    /
14300 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65  * The "OUTER" ke
14310 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74  yword is present
14320 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45   */.#define JT_E
14330 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20  RROR     0x0040 
14340 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72     /* unknown or
14350 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69   unsupported joi
14360 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  n type */.../*.*
14370 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69  * Flags appropri
14380 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72  ate for the wctr
14390 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72  lFlags parameter
143a0 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65   of sqlite3Where
143b0 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74  Begin().** and t
143c0 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74  he WhereInfo.wct
143d0 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a  rlFlags member..
143e0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
143f0 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20  _ORDERBY_NORMAL 
14400 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f    0x0000 /* No-o
14410 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
14420 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20  RE_ORDERBY_MIN  
14430 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52      0x0001 /* OR
14440 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
14450 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63  g for min() func
14460 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
14470 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20  E_ORDERBY_MAX   
14480 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44     0x0002 /* ORD
14490 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
144a0 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20   for max() func 
144b0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
144c0 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44  _ONEPASS_DESIRED
144d0 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74    0x0004 /* Want
144e0 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20   to do one-pass 
144f0 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f  UPDATE/DELETE */
14500 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
14510 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20  UPLICATES_OK    
14520 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20  0x0008 /* Ok to 
14530 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72  return a row mor
14540 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23  e than once */.#
14550 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49  define WHERE_OMI
14560 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78  T_OPEN_CLOSE  0x
14570 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75  0010 /* Table cu
14580 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64  rsors are alread
14590 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  y open */.#defin
145a0 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41  e WHERE_FORCE_TA
145b0 42 4c 45 20 20 20 20 20 20 30 78 30 30 32 30 20  BLE      0x0020 
145c0 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e  /* Do not use an
145d0 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72   index-only sear
145e0 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ch */.#define WH
145f0 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c  ERE_ONETABLE_ONL
14600 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f  Y    0x0040 /* O
14610 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73 74  nly code the 1st
14620 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69   table in pTabLi
14630 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  st */.#define WH
14640 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20 20  ERE_AND_ONLY    
14650 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44       0x0080 /* D
14660 6f 6e 27 74 20 75 73 65 20 69 6e 64 69 63 65 73  on't use indices
14670 20 66 6f 72 20 4f 52 20 74 65 72 6d 73 20 2a 2f   for OR terms */
14680 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47  .#define WHERE_G
14690 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20  ROUPBY          
146a0 30 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72  0x0100 /* pOrder
146b0 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47  By is really a G
146c0 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69  ROUP BY */.#defi
146d0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
146e0 54 42 59 20 20 20 20 20 20 20 30 78 30 32 30 30  TBY       0x0200
146f0 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20   /* pOrderby is 
14700 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43  really a DISTINC
14710 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  T clause */.#def
14720 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44  ine WHERE_WANT_D
14730 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 34 30  ISTINCT    0x040
14740 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20  0 /* All output 
14750 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74  needs to be dist
14760 69 6e 63 74 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f  inct */../* Allo
14770 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
14780 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68  s from sqlite3Wh
14790 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a  ereIsDistinct().
147a0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
147b0 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20  _DISTINCT_NOOP  
147c0 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e      0  /* DISTIN
147d0 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75  CT keyword not u
147e0 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
147f0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
14800 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f  IQUE    1  /* No
14810 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23   duplicates */.#
14820 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
14830 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20  TINCT_ORDERED   
14840 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63  2  /* All duplic
14850 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e  ates are adjacen
14860 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
14870 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52  RE_DISTINCT_UNOR
14880 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c  DERED 3  /* Dupl
14890 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74  icates are scatt
148a0 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  ered */../*.** A
148b0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66   NameContext def
148c0 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69  ines a context i
148d0 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c  n which to resol
148e0 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c  ve table and col
148f0 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54  umn.** names.  T
14900 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69  he context consi
14910 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66  sts of a list of
14920 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72   tables (the pSr
14930 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64  cList) field and
14940 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61  .** a list of na
14950 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28  med expression (
14960 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61  pEList).  The na
14970 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  med expression l
14980 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55  ist may.** be NU
14990 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f  LL.  The pSrc co
149a0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
149b0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
149c0 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74  a SELECT or.** t
149d0 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
149e0 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79  g operated on by
149f0 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c   INSERT, UPDATE,
14a00 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65   or DELETE.  The
14a10 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65  .** pEList corre
14a20 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65  sponds to the re
14a30 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45  sult set of a SE
14a40 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c  LECT and is NULL
14a50 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74   for.** other st
14a60 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
14a70 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e  NameContexts can
14a80 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65   be nested.  Whe
14a90 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  n resolving name
14aa0 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73  s, the inner-mos
14ab0 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  t .** context is
14ac0 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e   searched first.
14ad0 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73    If no match is
14ae0 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74   found, the next
14af0 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78   outer.** contex
14b00 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49  t is checked.  I
14b10 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c  f there is still
14b20 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e   no match, the n
14b30 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69  ext context.** i
14b40 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73  s checked.  This
14b50 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75   process continu
14b60 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20  es until either 
14b70 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
14b80 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65  .** or all conte
14b90 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20  xts are check.  
14ba0 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20  When a match is 
14bb0 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20  found, the nRef 
14bc0 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65  member of.** the
14bd0 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e   context contain
14be0 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73  ing the match is
14bf0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a   incremented. .*
14c00 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65  *.** Each subque
14c10 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61  ry gets a new Na
14c20 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20  meContext.  The 
14c30 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e  pNext field poin
14c40 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d  ts to the.** Nam
14c50 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20  eContext in the 
14c60 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54  parent query.  T
14c70 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20  hus the process 
14c80 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a  of scanning the.
14c90 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c  ** NameContext l
14ca0 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
14cb0 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72  to searching thr
14cc0 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c  ough successivel
14cd0 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75  y outer.** subqu
14ce0 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f  eries looking fo
14cf0 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74  r a match..*/.st
14d00 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ruct NameContext
14d10 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
14d20 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  se;       /* The
14d30 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63   parser */.  Src
14d40 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
14d50 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
14d60 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20   tables used to 
14d70 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f  resolve names */
14d80 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
14d90 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f  ist;    /* Optio
14da0 6e 61 6c 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  nal list of name
14db0 64 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  d expressions */
14dc0 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
14dd0 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72  Info;   /* Infor
14de0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67  mation about agg
14df0 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20  regates at this 
14e00 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43  level */.  NameC
14e10 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20  ontext *pNext;  
14e20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61  /* Next outer na
14e30 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c  me context.  NUL
14e40 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20  L for outermost 
14e50 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
14e60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14e70 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73  ber of names res
14e80 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f  olved by this co
14e90 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  ntext */.  int n
14ea0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
14eb0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
14ec0 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  ors encountered 
14ed0 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20  while resolving 
14ee0 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20 6e 63  names */.  u8 nc
14ef0 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
14f00 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  /* Zero or more 
14f10 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  NC_* flags defin
14f20 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a  ed below */.};..
14f30 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
14f40 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d  lues for the Nam
14f50 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67  eContext, ncFlag
14f60 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
14f70 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20  ine NC_AllowAgg 
14f80 20 30 78 30 31 20 20 20 20 2f 2a 20 41 67 67 72   0x01    /* Aggr
14f90 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
14fa0 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
14fb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
14fc0 61 73 41 67 67 20 20 20 20 30 78 30 32 20 20 20  asAgg    0x02   
14fd0 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
14fe0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
14ff0 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
15000 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
15010 20 30 78 30 34 20 20 20 20 2f 2a 20 54 72 75 65   0x04    /* True
15020 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
15030 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
15040 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
15050 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
15060 63 20 30 78 30 38 20 20 20 20 2f 2a 20 54 72 75  c 0x08    /* Tru
15070 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
15080 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
15090 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
150a0 6e 65 20 4e 43 5f 41 73 4d 61 79 62 65 20 20 20  ne NC_AsMaybe   
150b0 30 78 31 30 20 20 20 20 2f 2a 20 52 65 73 6f 6c  0x10    /* Resol
150c0 76 65 20 74 6f 20 41 53 20 74 65 72 6d 73 20 6f  ve to AS terms o
150d0 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
150e0 20 6f 6e 6c 79 0a 20 20 20 20 20 20 20 20 20 20   only.          
150f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15100 20 20 20 2a 2a 20 69 66 20 6e 6f 20 6f 74 68 65     ** if no othe
15110 72 20 72 65 73 6f 6c 75 74 69 6f 6e 20 69 73 20  r resolution is 
15120 61 76 61 69 6c 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  available */../*
15130 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
15140 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
15150 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
15160 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74  ins all informat
15170 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f  ion.** needed to
15180 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66   generate code f
15190 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45  or a single SELE
151a0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
151b0 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65  .** nLimit is se
151c0 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65  t to -1 if there
151d0 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61   is no LIMIT cla
151e0 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73  use.  nOffset is
151f0 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66   set to 0..** If
15200 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49   there is a LIMI
15210 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61  T clause, the pa
15220 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74  rser sets nLimit
15230 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
15240 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e   the.** limit an
15250 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65  d nOffset to the
15260 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66   value of the of
15270 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68  fset (or 0 if th
15280 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66  ere is not.** of
15290 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65  fset).  But late
152a0 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64  r on, nLimit and
152b0 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20   nOffset become 
152c0 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
152d0 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56  ions.** in the V
152e0 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20  DBE that record 
152f0 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66  the limit and of
15300 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a  fset counters..*
15310 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68  *.** addrOpenEph
15320 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74  m[] entries cont
15330 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20  ain the address 
15340 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  of OP_OpenEpheme
15350 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20  ral opcodes..** 
15360 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20  These addresses 
15370 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73  must be stored s
15380 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f  o that we can go
15390 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69   back and fill i
153a0 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49  n.** the P4_KEYI
153b0 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d  NFO and P2 param
153c0 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65  eters later.  Ne
153d0 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66  ither the KeyInf
153e0 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d  o nor.** the num
153f0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
15400 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70  n P2 can be comp
15410 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65  uted at the same
15420 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20   time.** as the 
15430 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74  OP_OpenEphm inst
15440 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64  ruction is coded
15450 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20   because not.** 
15460 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69  enough informati
15470 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d  on about the com
15480 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b  pound query is k
15490 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69  nown at that poi
154a0 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e  nt..** The KeyIn
154b0 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54  fo for addrOpenT
154c0 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63  ran[0] and [1] c
154d0 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
154e0 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66  g sequences.** f
154f0 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  or the result se
15500 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  t.  The KeyInfo 
15510 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  for addrOpenEphm
15520 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [2] contains col
15530 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e  lating.** sequen
15540 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45  ces for the ORDE
15550 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  R BY clause..*/.
15560 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a  struct Select {.
15570 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
15580 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  st;      /* The 
15590 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65  fields of the re
155a0 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  sult */.  u8 op;
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155c0 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55   /* One of: TK_U
155d0 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49  NION TK_ALL TK_I
155e0 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45  NTERSECT TK_EXCE
155f0 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46  PT */.  u16 selF
15600 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
15610 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76  * Various SF_* v
15620 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69  alues */.  int i
15630 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20  Limit, iOffset; 
15640 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
15650 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49  sters holding LI
15660 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75  MIT & OFFSET cou
15670 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61  nters */.  int a
15680 64 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b 20  ddrOpenEphm[3]; 
15690 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65    /* OP_OpenEphe
156a0 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65  m opcodes relate
156b0 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
156c0 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63   */.  u64 nSelec
156d0 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20  tRow;        /* 
156e0 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
156f0 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
15700 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
15710 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rc;         /* T
15720 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
15730 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
15740 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
15750 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a  e WHERE clause *
15760 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
15770 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68  roupBy;    /* Th
15780 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
15790 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61  e */.  Expr *pHa
157a0 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  ving;         /*
157b0 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   The HAVING clau
157c0 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
157d0 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f   *pOrderBy;    /
157e0 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
157f0 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63  lause */.  Selec
15800 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20  t *pPrior;      
15810 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63    /* Prior selec
15820 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
15830 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
15840 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e   */.  Select *pN
15850 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
15860 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74  Next select to t
15870 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d  he left in a com
15880 70 6f 75 6e 64 20 2a 2f 0a 20 20 53 65 6c 65 63  pound */.  Selec
15890 74 20 2a 70 52 69 67 68 74 6d 6f 73 74 3b 20 20  t *pRightmost;  
158a0 20 20 2f 2a 20 52 69 67 68 74 2d 6d 6f 73 74 20    /* Right-most 
158b0 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70  select in a comp
158c0 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74  ound select stat
158d0 65 6d 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72 20  ement */.  Expr 
158e0 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20  *pLimit;        
158f0 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65    /* LIMIT expre
15900 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
15910 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
15920 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20   Expr *pOffset; 
15930 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45          /* OFFSE
15940 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
15950 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
15960 64 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  d. */.};../*.** 
15970 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
15980 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61  or Select.selFla
15990 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72  gs.  The "SF" pr
159a0 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a  efix stands for.
159b0 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22  ** "Select Flag"
159c0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ..*/.#define SF_
159d0 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 20  Distinct        
159e0 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75  0x0001  /* Outpu
159f0 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54  t should be DIST
15a00 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  INCT */.#define 
15a10 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20  SF_Resolved     
15a20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64     0x0002  /* Id
15a30 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62  entifiers have b
15a40 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a  een resolved */.
15a50 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65  #define SF_Aggre
15a60 67 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30  gate       0x000
15a70 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61  4  /* Contains a
15a80 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
15a90 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ns */.#define SF
15aa0 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20  _UsesEphemeral  
15ab0 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73   0x0008  /* Uses
15ac0 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72   the OpenEphemer
15ad0 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65  al opcode */.#de
15ae0 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64  fine SF_Expanded
15af0 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20          0x0010  
15b00 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  /* sqlite3Select
15b10 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20  Expand() called 
15b20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69  on this */.#defi
15b30 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66  ne SF_HasTypeInf
15b40 6f 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a  o     0x0020  /*
15b50 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73   FROM subqueries
15b60 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61   have Table meta
15b70 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20  data */.#define 
15b80 53 46 5f 55 73 65 53 6f 72 74 65 72 20 20 20 20  SF_UseSorter    
15b90 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 53 6f     0x0040  /* So
15ba0 72 74 20 75 73 69 6e 67 20 61 20 73 6f 72 74 65  rt using a sorte
15bb0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  r */.#define SF_
15bc0 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 20  Values          
15bd0 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68  0x0080  /* Synth
15be0 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55  esized from VALU
15bf0 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  ES clause */.#de
15c00 66 69 6e 65 20 53 46 5f 4d 61 74 65 72 69 61 6c  fine SF_Material
15c10 69 7a 65 20 20 20 20 20 30 78 30 31 30 30 20 20  ize     0x0100  
15c20 2f 2a 20 46 6f 72 63 65 20 6d 61 74 65 72 69 61  /* Force materia
15c30 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 76 69 65 77  lization of view
15c40 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
15c50 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20  NestedFrom      
15c60 30 78 30 32 30 30 20 20 2f 2a 20 50 61 72 74 20  0x0200  /* Part 
15c70 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a  of a parenthesiz
15c80 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  ed FROM clause *
15c90 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65  /.../*.** The re
15ca0 73 75 6c 74 73 20 6f 66 20 61 20 73 65 6c 65 63  sults of a selec
15cb0 74 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62  t can be distrib
15cc0 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  uted in several 
15cd0 77 61 79 73 2e 20 20 54 68 65 0a 2a 2a 20 22 53  ways.  The.** "S
15ce0 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73  RT" prefix means
15cf0 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 20   "SELECT Result 
15d00 54 79 70 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Type"..*/.#defin
15d10 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20  e SRT_Union     
15d20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72     1  /* Store r
15d30 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e  esult as keys in
15d40 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
15d50 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20  fine SRT_Except 
15d60 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f        2  /* Remo
15d70 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61  ve result from a
15d80 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a   UNION index */.
15d90 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73  #define SRT_Exis
15da0 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53  ts       3  /* S
15db0 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65  tore 1 if the re
15dc0 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74  sult is not empt
15dd0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
15de0 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20  _Discard      4 
15df0 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20   /* Do not save 
15e00 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77  the results anyw
15e10 68 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20  here */../* The 
15e20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
15e30 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61  is ignored for a
15e40 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
15e50 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72  */.#define Ignor
15e60 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28  ableOrderby(X) (
15e70 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f  (X->eDest)<=SRT_
15e80 44 69 73 63 61 72 64 29 0a 0a 23 64 65 66 69 6e  Discard)..#defin
15e90 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20  e SRT_Output    
15ea0 20 20 20 35 20 20 2f 2a 20 4f 75 74 70 75 74 20     5  /* Output 
15eb0 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75  each row of resu
15ec0 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
15ed0 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 20 36  T_Mem          6
15ee0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
15ef0 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65  t in a memory ce
15f00 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ll */.#define SR
15f10 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 20 37  T_Set          7
15f20 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
15f30 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  ts as keys in an
15f40 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
15f50 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20  e SRT_Table     
15f60 20 20 20 38 20 20 2f 2a 20 53 74 6f 72 65 20 72     8  /* Store r
15f70 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
15f80 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
15f90 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
15fa0 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
15fb0 20 20 39 20 20 2f 2a 20 43 72 65 61 74 65 20 74    9  /* Create t
15fc0 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64  ransient tab and
15fd0 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f   store like SRT_
15fe0 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Table */.#define
15ff0 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
16000 20 31 30 20 20 2f 2a 20 47 65 6e 65 72 61 74 65   10  /* Generate
16010 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
16020 20 72 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a   result */../*.*
16030 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
16040 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73   this object des
16050 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20  cribes where to 
16060 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c  put of the resul
16070 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43  ts of.** a SELEC
16080 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
16090 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
160a0 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
160b0 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74          /* How t
160c0 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65  o dispose of the
160d0 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66   results.  On of
160e0 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f   SRT_* above. */
160f0 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74 3b  .  char affSdst;
16100 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
16110 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74   used when eDest
16120 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69  ==SRT_Set */.  i
16130 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20  nt iSDParm;     
16140 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20   /* A parameter 
16150 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73  used by the eDes
16160 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f  t disposal metho
16170 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74  d */.  int iSdst
16180 3b 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65  ;        /* Base
16190 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20   register where 
161a0 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74  results are writ
161b0 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64  ten */.  int nSd
161c0 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  st;        /* Nu
161d0 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
161e0 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 7d  s allocated */.}
161f0 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20  ;../*.** During 
16200 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20  code generation 
16210 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  of statements th
16220 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e  at do inserts in
16230 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  to AUTOINCREMENT
16240 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65   .** tables, the
16250 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
16260 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68  mation is attach
16270 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e  ed to the Table.
16280 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70  u.autoInc.p.** p
16290 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61  ointer of each a
162a0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62  utoincrement tab
162b0 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d  le to record som
162c0 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69  e side informati
162d0 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  on that.** the c
162e0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65  ode generator ne
162f0 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f  eds.  We have to
16300 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20   keep per-table 
16310 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a  autoincrement.**
16320 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
16330 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65  case inserts are
16340 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69   down within tri
16350 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73  ggers.  Triggers
16360 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61   do not.** norma
16370 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74  lly coordinate t
16380 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c  heir activities,
16390 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20   but we do need 
163a0 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  to coordinate th
163b0 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64  e.** loading and
163c0 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69   saving of autoi
163d0 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61  ncrement informa
163e0 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
163f0 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20  AutoincInfo {.  
16400 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65  AutoincInfo *pNe
16410 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e  xt;   /* Next in
16420 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69  fo block in a li
16430 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a  st of them all *
16440 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
16450 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
16460 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f  le this info blo
16470 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a  ck refers to */.
16480 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
16490 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
164a0 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
164b0 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  ] of database ho
164c0 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20  lding pTab */.  
164d0 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20  int regCtr;     
164e0 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
164f0 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
16500 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74   the rowid count
16510 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
16520 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  Size of the colu
16530 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e  mn cache.*/.#ifn
16540 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  def SQLITE_N_COL
16550 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53  CACHE.# define S
16560 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
16570 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   10.#endif../*.*
16580 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69  * At least one i
16590 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
165a0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
165b0 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  re is created fo
165c0 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67  r each .** trigg
165d0 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66  er that may be f
165e0 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69  ired while parsi
165f0 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50  ng an INSERT, UP
16600 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a  DATE or DELETE.*
16610 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c  * statement. All
16620 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72   such objects ar
16630 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
16640 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
16650 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70  ed at.** Parse.p
16660 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64  TriggerPrg and d
16670 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74  eleted once stat
16680 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f  ement compilatio
16690 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f  n has been.** co
166a0 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41  mpleted..**.** A
166b0 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61   Vdbe sub-progra
166c0 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  m that implement
166d0 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57  s the body and W
166e0 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72  HEN clause of tr
166f0 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72  igger.** Trigger
16700 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73  Prg.pTrigger, as
16710 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74  suming a default
16720 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
16730 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65  use of.** Trigge
16740 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20  rPrg.orconf, is 
16750 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72  stored in the Tr
16760 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61  iggerPrg.pProgra
16770 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54  m variable..** T
16780 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  he Parse.pTrigge
16790 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20  rPrg list never 
167a0 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74  contains two ent
167b0 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61  ries with the sa
167c0 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72  me.** values for
167d0 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61   both pTrigger a
167e0 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a  nd orconf..**.**
167f0 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   The TriggerPrg.
16800 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69  aColmask[0] vari
16810 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61  able is set to a
16820 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63   mask of old.* c
16830 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73  olumns.** access
16840 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20  ed (or set to 0 
16850 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72  for triggers fir
16860 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  ed as a result o
16870 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61  f INSERT .** sta
16880 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61  tements). Simila
16890 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72  rly, the Trigger
168a0 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20  Prg.aColmask[1] 
168b0 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
168c0 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20  to.** a mask of 
168d0 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73  new.* columns us
168e0 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
168f0 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  m..*/.struct Tri
16900 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67  ggerPrg {.  Trig
16910 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
16920 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74      /* Trigger t
16930 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20  his program was 
16940 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20  coded from */.  
16950 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78  TriggerPrg *pNex
16960 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
16970 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70  entry in Parse.p
16980 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
16990 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
169a0 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
169b0 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e  Program implemen
169c0 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72  ting pTrigger/or
169d0 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72  conf */.  int or
169e0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
169f0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
16a00 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
16a10 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73  */.  u32 aColmas
16a20 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  k[2];        /* 
16a30 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20  Masks of old.*, 
16a40 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63  new.* columns ac
16a50 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  cessed */.};../*
16a60 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20  .** The yDbMask 
16a70 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65  datatype for the
16a80 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20   bitmask of all 
16a90 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
16aa0 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  es..*/.#if SQLIT
16ab0 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
16ac0 30 0a 20 20 74 79 70 65 64 65 66 20 73 71 6c 69  0.  typedef sqli
16ad0 74 65 33 5f 75 69 6e 74 36 34 20 79 44 62 4d 61  te3_uint64 yDbMa
16ae0 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  sk;.#else.  type
16af0 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
16b00 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6e 64 69 66   yDbMask;.#endif
16b10 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70  ../*.** An SQL p
16b20 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
16b30 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73  A copy of this s
16b40 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
16b50 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68  ed through.** th
16b60 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77  e parser and dow
16b70 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70  n into all the p
16b80 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75  arser action rou
16b90 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
16ba0 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64  .** carry around
16bb0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
16bc0 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74  t is global to t
16bd0 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e  he entire parse.
16be0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63  .**.** The struc
16bf0 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20  ture is divided 
16c00 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20  into two parts. 
16c10 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72   When the parser
16c20 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e   and code.** gen
16c30 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73  erate call thems
16c40 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c  elves recursivel
16c50 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72  y, the first par
16c60 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75  t of the structu
16c70 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e  re.** is constan
16c80 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64  t but the second
16c90 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61   part is reset a
16ca0 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
16cb0 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61  and end of.** ea
16cc0 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a  ch recursion..**
16cd0 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f  .** The nTableLo
16ce0 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63  ck and aTableLoc
16cf0 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  k variables are 
16d00 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65  only used if the
16d10 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a   shared-cache .*
16d20 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61  * feature is ena
16d30 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33  bled (if sqlite3
16d40 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64  Tsd()->useShared
16d50 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54  Data is true). T
16d60 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  hey are.** used 
16d70 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74  to store the set
16d80 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20   of table-locks 
16d90 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
16da0 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a  statement being.
16db0 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e  ** compiled. Fun
16dc0 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62  ction sqlite3Tab
16dd0 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64  leLock() is used
16de0 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20   to add entries 
16df0 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a  to the.** list..
16e00 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20  */.struct Parse 
16e10 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
16e20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
16e30 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74  main database st
16e40 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61  ructure */.  cha
16e50 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20  r *zErrMsg;     
16e60 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65    /* An error me
16e70 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20  ssage */.  Vdbe 
16e80 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
16e90 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72  /* An engine for
16ea0 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62   executing datab
16eb0 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a  ase bytecode */.
16ec0 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
16ed0 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e         /* Return
16ee0 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75   code from execu
16ef0 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  tion */.  u8 col
16f00 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f  NamesSet;      /
16f10 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f  * TRUE after OP_
16f20 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62  ColumnName has b
16f30 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56  een issued to pV
16f40 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63  dbe */.  u8 chec
16f50 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a  kSchema;      /*
16f60 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63   Causes schema c
16f70 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65  ookie check afte
16f80 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20  r an error */.  
16f90 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20  u8 nested;      
16fa0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16fb0 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
16fc0 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64  o the parser/cod
16fd0 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20  e generator */. 
16fe0 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20   u8 nTempReg;   
16ff0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17000 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  of temporary reg
17010 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52  isters in aTempR
17020 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54 65  eg[] */.  u8 nTe
17030 6d 70 49 6e 55 73 65 3b 20 20 20 20 20 20 20 2f  mpInUse;       /
17040 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 54 65 6d  * Number of aTem
17050 70 52 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c 79  pReg[] currently
17060 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a   checked out */.
17070 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20    u8 nColCache; 
17080 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17090 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
170a0 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20  ColCache[] */.  
170b0 75 38 20 69 43 6f 6c 43 61 63 68 65 3b 20 20 20  u8 iColCache;   
170c0 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74       /* Next ent
170d0 72 79 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b  ry in aColCache[
170e0 5d 20 74 6f 20 72 65 70 6c 61 63 65 20 2a 2f 0a  ] to replace */.
170f0 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74    u8 isMultiWrit
17100 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  e;     /* True i
17110 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
17120 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75  modify/insert mu
17130 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20  ltiple rows */. 
17140 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20   u8 mayAbort;   
17150 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
17160 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74   statement may t
17170 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
17180 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  ception */.  int
17190 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20   aTempReg[8];   
171a0 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65    /* Holding are
171b0 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  a for temporary 
171c0 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69  registers */.  i
171d0 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20  nt nRangeReg;   
171e0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74      /* Size of t
171f0 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  he temporary reg
17200 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
17210 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20   int iRangeReg; 
17220 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72        /* First r
17230 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f  egister in tempo
17240 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
17250 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ock */.  int nEr
17260 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
17270 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
17280 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
17290 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  nTab;           
172a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72   /* Number of pr
172b0 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74  eviously allocat
172c0 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20  ed VDBE cursors 
172d0 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
172e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
172f0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
17300 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  lls used so far 
17310 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20  */.  int nSet;  
17320 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17330 62 65 72 20 6f 66 20 73 65 74 73 20 75 73 65 64  ber of sets used
17340 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
17350 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20   nOnce;         
17360 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f    /* Number of O
17370 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69  P_Once instructi
17380 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ons so far */.  
17390 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20  int ckBase;     
173a0 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
173b0 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75  ister of data du
173c0 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74  ring check const
173d0 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  raints */.  int 
173e0 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20  iCacheLevel;    
173f0 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c   /* ColCache val
17400 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68  id when aColCach
17410 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63  e[].iLevel<=iCac
17420 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74  heLevel */.  int
17430 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20   iCacheCnt;     
17440 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65    /* Counter use
17450 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43  d to generate aC
17460 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61  olCache[].lru va
17470 6c 75 65 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  lues */.  struct
17480 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20   yColCache {.   
17490 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
174a0 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
174b0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f  cursor number */
174c0 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e  .    int iColumn
174d0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
174e0 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  ble column numbe
174f0 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70  r */.    u8 temp
17500 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Reg;           /
17510 2a 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70  * iReg is a temp
17520 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e   register that n
17530 65 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64  eeds to be freed
17540 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76   */.    int iLev
17550 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  el;           /*
17560 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a   Nesting level *
17570 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20  /.    int iReg; 
17580 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
17590 65 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66  eg with value of
175a0 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20   this column. 0 
175b0 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20  means none. */. 
175c0 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20     int lru;     
175d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73           /* Leas
175e0 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20  t recently used 
175f0 65 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d  entry has the sm
17600 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a  allest value */.
17610 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51    } aColCache[SQ
17620 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d  LITE_N_COLCACHE]
17630 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61  ;  /* One for ea
17640 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20  ch column cache 
17650 65 6e 74 72 79 20 2a 2f 0a 20 20 79 44 62 4d 61  entry */.  yDbMa
17660 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
17670 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
17680 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
17690 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
176a0 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
176b0 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
176c0 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
176d0 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
176e0 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  s */.  int cooki
176f0 65 47 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20 41  eGoto;      /* A
17700 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f 74  ddress of OP_Got
17710 6f 20 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72 69  o to cookie veri
17720 66 69 65 72 20 73 75 62 72 6f 75 74 69 6e 65 20  fier subroutine 
17730 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56  */.  int cookieV
17740 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  alue[SQLITE_MAX_
17750 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a  ATTACHED+2];  /*
17760 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69   Values of cooki
17770 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a  es to verify */.
17780 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
17790 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
177a0 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
177b0 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
177c0 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
177d0 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
177e0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
177f0 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
17800 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
17810 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  jects */.  int n
17820 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20  MaxArg;         
17830 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73  /* Max args pass
17840 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ed to user funct
17850 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72  ion by sub-progr
17860 61 6d 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f  am */.  Token co
17870 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20  nstraintName;/* 
17880 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73  Name of the cons
17890 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  traint currently
178a0 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f   being parsed */
178b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
178c0 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
178d0 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f  E.  int nTableLo
178e0 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ck;        /* Nu
178f0 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e  mber of locks in
17900 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20   aTableLock */. 
17910 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62   TableLock *aTab
17920 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69  leLock; /* Requi
17930 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20  red table locks 
17940 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  for shared-cache
17950 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   mode */.#endif.
17960 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
17970 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d  Ainc;  /* Inform
17980 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f  ation about AUTO
17990 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65  INCREMENT counte
179a0 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f  rs */..  /* Info
179b0 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69  rmation used whi
179c0 6c 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65  le coding trigge
179d0 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20  r programs. */. 
179e0 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65   Parse *pTopleve
179f0 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73  l;    /* Parse s
17a00 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69  tructure for mai
17a10 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55  n program (or NU
17a20 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  LL) */.  Table *
17a30 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a  pTriggerTab;  /*
17a40 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20   Table triggers 
17a50 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20  are being coded 
17a60 66 6f 72 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75  for */.  u32 nQu
17a70 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a  eryLoop;      /*
17a80 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69   Est number of i
17a90 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71  terations of a q
17aa0 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29  uery (10*log2(N)
17ab0 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61  ) */.  u32 oldma
17ac0 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  sk;         /* M
17ad0 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
17ae0 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20  umns referenced 
17af0 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b  */.  u32 newmask
17b00 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
17b10 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
17b20 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
17b30 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70  .  u8 eTriggerOp
17b40 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50  ;       /* TK_UP
17b50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
17b60 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a  or TK_DELETE */.
17b70 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20    u8 eOrconf;   
17b80 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
17b90 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
17ba0 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72  licy for trigger
17bb0 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64   steps */.  u8 d
17bc0 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20  isableTriggers; 
17bd0 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61   /* True to disa
17be0 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
17bf0 0a 20 20 2f 2a 20 41 62 6f 76 65 20 69 73 20 63  .  /* Above is c
17c00 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20  onstant between 
17c10 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c  recursions.  Bel
17c20 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f  ow is reset befo
17c30 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a  re and after.  *
17c40 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
17c50 20 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b   */..  int nVar;
17c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c70 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f   /* Number of '?
17c80 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e  ' variables seen
17c90 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66   in the SQL so f
17ca0 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61  ar */.  int nzVa
17cb0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
17cc0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
17cd0 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69  vailable slots i
17ce0 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75  n azVar[] */.  u
17cf0 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
17d00 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
17d10 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
17d20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
17d30 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69   the query */.#i
17d40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
17d50 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
17d60 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b   u8 declareVtab;
17d70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
17d80 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c  ue if inside sql
17d90 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
17da0 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74  b() */.  int nVt
17db0 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20  abLock;         
17dc0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17dd0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74  virtual tables t
17de0 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  o lock */.#endif
17df0 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20  .  int nAlias;  
17e00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17e10 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65  Number of aliase
17e20 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  d result set col
17e30 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  umns */.  int nH
17e40 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
17e50 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
17e60 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66  n tree height of
17e70 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c   current sub-sel
17e80 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ect */.#ifndef S
17e90 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
17ea0 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74  IN.  int iSelect
17eb0 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Id;            /
17ec0 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20  * ID of current 
17ed0 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41  select for EXPLA
17ee0 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69  IN output */.  i
17ef0 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64  nt iNextSelectId
17f00 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  ;        /* Next
17f10 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63   available selec
17f20 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e  t ID for EXPLAIN
17f30 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
17f40 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72  f.  char **azVar
17f50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17f60 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d   Pointers to nam
17f70 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73  es of parameters
17f80 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70   */.  Vdbe *pRep
17f90 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20  repare;         
17fa0 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72  /* VM being repr
17fb0 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52  epared (sqlite3R
17fc0 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20  eprepare()) */. 
17fd0 20 69 6e 74 20 2a 61 41 6c 69 61 73 3b 20 20 20   int *aAlias;   
17fe0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
17ff0 67 69 73 74 65 72 20 75 73 65 64 20 74 6f 20 68  gister used to h
18000 6f 6c 64 20 61 6c 69 61 73 65 64 20 72 65 73 75  old aliased resu
18010 6c 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  lt */.  const ch
18020 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20  ar *zTail;      
18030 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78    /* All SQL tex
18040 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20  t past the last 
18050 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64  semicolon parsed
18060 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
18070 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  wTable;         
18080 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67  /* A table being
18090 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
180a0 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
180b0 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54    Trigger *pNewT
180c0 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54  rigger;     /* T
180d0 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e  rigger under con
180e0 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41  struct by a CREA
180f0 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20  TE TRIGGER */.  
18100 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74  const char *zAut
18110 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65  hContext; /* The
18120 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74   6th parameter t
18130 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c  o db->xAuth call
18140 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  backs */.  Token
18150 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20   sNameToken;    
18160 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69       /* Token wi
18170 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73  th unqualified s
18180 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d  chema object nam
18190 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61  e */.  Token sLa
181a0 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  stToken;        
181b0 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b   /* The last tok
181c0 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66  en parsed */.#if
181d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
181e0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
181f0 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20  Token sArg;     
18200 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d            /* Com
18210 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20  plete text of a 
18220 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20  module argument 
18230 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56  */.  Table **apV
18240 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f  tabLock;       /
18250 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72  * Pointer to vir
18260 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64  tual tables need
18270 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23  ing locking */.#
18280 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70  endif.  Table *p
18290 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20  ZombieTab;      
182a0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62    /* List of Tab
182b0 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65  le objects to de
182c0 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20  lete after code 
182d0 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  gen */.  Trigger
182e0 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67  Prg *pTriggerPrg
182f0 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73  ;  /* Linked lis
18300 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67  t of coded trigg
18310 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ers */.};../*.**
18320 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
18330 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65  currently inside
18340 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c   an sqlite3_decl
18350 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e  are_vtab() call.
18360 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
18370 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
18380 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  BLE.  #define IN
18390 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a  _DECLARE_VTAB 0.
183a0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
183b0 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  IN_DECLARE_VTAB 
183c0 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65  (pParse->declare
183d0 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  Vtab).#endif../*
183e0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
183f0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
18400 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 62   structure can b
18410 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20  e declared on a 
18420 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a  stack and used.*
18430 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50 61  * to save the Pa
18440 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
18450 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69   value so that i
18460 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65  t can be restore
18470 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75  d later..*/.stru
18480 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b  ct AuthContext {
18490 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
184a0 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f  AuthContext;   /
184b0 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72 73  * Put saved Pars
184c0 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68  e.zAuthContext h
184d0 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ere */.  Parse *
184e0 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20  pParse;         
184f0 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73       /* The Pars
18500 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d  e structure */.}
18510 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c  ;../*.** Bitfiel
18520 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76  d flags for P5 v
18530 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20  alue in various 
18540 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66  opcodes..*/.#def
18550 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  ine OPFLAG_NCHAN
18560 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  GE       0x01   
18570 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74   /* Set to updat
18580 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f  e db->nChange */
18590 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
185a0 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78  LASTROWID     0x
185b0 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  02    /* Set to 
185c0 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52  update db->lastR
185d0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
185e0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
185f0 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20       0x04    /* 
18600 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69  This OP_Insert i
18610 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20  s an sql UPDATE 
18620 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
18630 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20  G_APPEND        
18640 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20  0x08    /* This 
18650 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
18660 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65  an append */.#de
18670 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53  fine OPFLAG_USES
18680 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20  EEKRESULT 0x10  
18690 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69    /* Try to avoi
186a0 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65  d a seek in Btre
186b0 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65  eInsert() */.#de
186c0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41  fine OPFLAG_CLEA
186d0 52 43 41 43 48 45 20 20 20 20 30 78 32 30 20 20  RCACHE    0x20  
186e0 20 20 2f 2a 20 43 6c 65 61 72 20 70 73 65 75 64    /* Clear pseud
186f0 6f 2d 74 61 62 6c 65 20 63 61 63 68 65 20 69 6e  o-table cache in
18700 20 4f 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 23 64   OP_Column */.#d
18710 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e  efine OPFLAG_LEN
18720 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20  GTHARG     0x40 
18730 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
18740 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65  only used for le
18750 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e  ngth() */.#defin
18760 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  e OPFLAG_TYPEOFA
18770 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f  RG     0x80    /
18780 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79  * OP_Column only
18790 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66   used for typeof
187a0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
187b0 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20  FLAG_BULKCSR    
187c0 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
187d0 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20  _Open** used to 
187e0 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72  open bulk cursor
187f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
18800 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20  AG_P2ISREG      
18810 20 30 78 30 32 20 20 20 20 2f 2a 20 50 32 20 74   0x02    /* P2 t
18820 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61  o OP_Open** is a
18830 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
18840 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
18850 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20  AG_PERMUTE      
18860 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
18870 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20  ompare: use the 
18880 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a  permutation */..
18890 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67  /*. * Each trigg
188a0 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  er present in th
188b0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
188c0 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61  a is stored as a
188d0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a  n instance of. *
188e0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
188f0 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73   . *. * Pointers
18900 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66   to instances of
18910 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
18920 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77  are stored in tw
18930 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e  o ways.. * 1. In
18940 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20   the "trigHash" 
18950 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74  hash table (part
18960 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a   of the sqlite3*
18970 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73   that represents
18980 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61   the . *    data
18990 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f  base). This allo
189a0 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63  ws Trigger struc
189b0 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72  tures to be retr
189c0 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20  ieved by name.. 
189d0 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72  * 2. All trigger
189e0 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
189f0 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  h a single table
18a00 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c   form a linked l
18a10 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20  ist, using the. 
18a20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65  *    pNext membe
18a30 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  r of struct Trig
18a40 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74  ger. A pointer t
18a50 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
18a60 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20  ent of the. *   
18a70 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20   linked list is 
18a80 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70  stored as the "p
18a90 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20  Trigger" member 
18aa0 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  of the associate
18ab0 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54  d. *    struct T
18ac0 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20  able.. *. * The 
18ad0 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
18ae0 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  er points to the
18af0 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
18b00 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a  f a linked list.
18b10 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68   * containing th
18b20 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
18b30 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68   specified as th
18b40 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
18b50 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  m.. */.struct Tr
18b60 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a  igger {.  char *
18b70 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
18b80 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66    /* The name of
18b90 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20   the trigger    
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bb0 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74      */.  char *t
18bc0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
18bd0 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72   /* The table or
18be0 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74   view to which t
18bf0 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69  he trigger appli
18c00 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  es */.  u8 op;  
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
18c30 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
18c40 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20  TK_INSERT       
18c50 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b    */.  u8 tr_tm;
18c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18c70 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52  * One of TRIGGER
18c80 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52  _BEFORE, TRIGGER
18c90 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72  _AFTER */.  Expr
18ca0 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20   *pWhen;        
18cb0 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20      /* The WHEN 
18cc0 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78  clause of the ex
18cd0 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65  pression (may be
18ce0 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69   NULL) */.  IdLi
18cf0 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20  st *pColumns;   
18d00 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
18d10 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c  s an UPDATE OF <
18d20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69  column-list> tri
18d30 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20  gger,.          
18d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d50 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c     the <column-l
18d60 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68  ist> is stored h
18d70 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
18d80 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
18d90 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
18da0 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  ining the trigge
18db0 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  r */.  Schema *p
18dc0 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f  TabSchema;     /
18dd0 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
18de0 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ing the table */
18df0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
18e00 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69  step_list; /* Li
18e10 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67  nk list of trigg
18e20 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73  er program steps
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
18e40 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74    Trigger *pNext
18e50 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
18e60 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69  t trigger associ
18e70 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61  ated with the ta
18e80 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ble */.};../*.**
18e90 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69   A trigger is ei
18ea0 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72  ther a BEFORE or
18eb0 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65   an AFTER trigge
18ec0 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  r.  The followin
18ed0 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64  g constants.** d
18ee0 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20  etermine which. 
18ef0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20  .**.** If there 
18f00 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69  are multiple tri
18f10 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74  ggers, you might
18f20 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20   of some BEFORE 
18f30 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a  and some AFTER..
18f40 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73  ** In that cases
18f50 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20  , the constants 
18f60 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65  below can be ORe
18f70 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23  d together..*/.#
18f80 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42  define TRIGGER_B
18f90 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65  EFORE  1.#define
18fa0 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20   TRIGGER_AFTER  
18fb0 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73   2../*. * An ins
18fc0 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20  tance of struct 
18fd0 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75  TriggerStep is u
18fe0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73  sed to store a s
18ff0 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d  ingle SQL statem
19000 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61  ent. * that is a
19010 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67   part of a trigg
19020 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a  er-program. . *.
19030 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20   * Instances of 
19040 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
19050 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ep are stored in
19060 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64   a singly linked
19070 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a   list (linked. *
19080 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78   using the "pNex
19090 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72  t" member) refer
190a0 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74  enced by the "st
190b0 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
190c0 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63  of the . * assoc
190d0 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69  iated struct Tri
190e0 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54  gger instance. T
190f0 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
19100 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   of the linked l
19110 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69  ist is. * the fi
19120 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20  rst step of the 
19130 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
19140 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22  . * . * The "op"
19150 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65   member indicate
19160 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  s whether this i
19170 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49  s a "DELETE", "I
19180 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22  NSERT", "UPDATE"
19190 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20   or. * "SELECT" 
191a0 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d  statement. The m
191b0 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f  eanings of the o
191c0 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20  ther members is 
191d0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
191e0 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22  e . * value of "
191f0 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  op" as follows:.
19200 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
19210 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e  INSERT). * orcon
19220 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74  f    -> stores t
19230 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  he ON CONFLICT a
19240 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c  lgorithm. * pSel
19250 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ect   -> If this
19260 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
19270 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  TO ... SELECT ..
19280 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
19290 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
192a0 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20    this stores a 
192b0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53  pointer to the S
192c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
192d0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
192e0 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e  . * target    ->
192f0 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67   A token holding
19300 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65   the quoted name
19310 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
19320 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a   insert into.. *
19330 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66   pExprList -> If
19340 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
19350 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55  RT INTO ... VALU
19360 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  ES ... statement
19370 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
19380 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
19390 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20  es values to be 
193a0 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77  inserted. Otherw
193b0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64  ise NULL.. * pId
193c0 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69  List   -> If thi
193d0 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
193e0 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e  NTO ... (<column
193f0 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20  -names>) VALUES 
19400 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20  ... . *         
19410 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20       statement, 
19420 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73  then this stores
19430 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65   the column-name
19440 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20  s to be. *      
19450 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64          inserted
19460 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70   into.. *. * (op
19470 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20   == TK_DELETE). 
19480 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41  * target    -> A
19490 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74   token holding t
194a0 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f  he quoted name o
194b0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64  f the table to d
194c0 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70  elete from.. * p
194d0 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
194e0 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
194f0 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
19500 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
19510 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
19520 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
19530 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a  ise NULL.. * . *
19540 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54   (op == TK_UPDAT
19550 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20  E). * target    
19560 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69  -> A token holdi
19570 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61  ng the quoted na
19580 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
19590 74 6f 20 75 70 64 61 74 65 20 72 6f 77 73 20 6f  to update rows o
195a0 66 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  f.. * pWhere    
195b0 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
195c0 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  use of the UPDAT
195d0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
195e0 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
195f0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
19600 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
19610 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
19620 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63   A list of the c
19630 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65  olumns to update
19640 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
19650 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20  ions to update. 
19660 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
19670 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69  hem to. See sqli
19680 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75  te3Update() docu
19690 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43  mentation of "pC
196a0 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20  hanges". *      
196b0 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
196c0 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74  .. * . */.struct
196d0 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20   TriggerStep {. 
196e0 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
196f0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
19700 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
19710 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c  DATE, TK_INSERT,
19720 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20   TK_SELECT */.  
19730 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  u8 orconf;      
19740 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62       /* OE_Rollb
19750 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72  ack etc. */.  Tr
19760 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20  igger *pTrig;   
19770 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65     /* The trigge
19780 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70  r that this step
19790 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f   is a part of */
197a0 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
197b0 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43  ct;     /* SELEC
197c0 54 20 73 74 61 74 6d 65 6e 74 20 6f 72 20 52 48  T statment or RH
197d0 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f  S of INSERT INTO
197e0 20 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a   .. SELECT ... *
197f0 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67 65 74  /.  Token target
19800 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67  ;        /* Targ
19810 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c  et table for DEL
19820 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53  ETE, UPDATE, INS
19830 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ERT */.  Expr *p
19840 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a  Where;        /*
19850 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
19860 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20  e for DELETE or 
19870 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a  UPDATE steps */.
19880 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70    ExprList *pExp
19890 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c  rList; /* SET cl
198a0 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e  ause for UPDATE.
198b0 20 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20    VALUES clause 
198c0 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
198d0 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b  IdList *pIdList;
198e0 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
198f0 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20  ames for INSERT 
19900 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
19910 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
19920 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69  t in the link-li
19930 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  st */.  TriggerS
19940 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20  tep *pLast;  /* 
19950 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  Last element in 
19960 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64  link-list. Valid
19970 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e   for 1st elem on
19980 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ly */.};../*.** 
19990 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
199a0 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
199b0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   information use
199c0 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 46  d by the sqliteF
199d0 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65  ix....** routine
199e0 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74  s as they walk t
199f0 68 65 20 70 61 72 73 65 20 74 72 65 65 20 74 6f  he parse tree to
19a00 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20 72   make database r
19a10 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70  eferences.** exp
19a20 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65  licit.  .*/.type
19a30 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78  def struct DbFix
19a40 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75  er DbFixer;.stru
19a50 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50  ct DbFixer {.  P
19a60 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
19a70 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e     /* The parsin
19a80 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f  g context.  Erro
19a90 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74  r messages writt
19aa0 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  en here */.  Sch
19ab0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
19ac0 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f   /* Fix items to
19ad0 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a   this schema */.
19ae0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
19af0 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  b;    /* Make su
19b00 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61  re all objects a
19b10 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  re contained in 
19b20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
19b30 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
19b40 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f  Type;  /* Type o
19b50 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
19b60 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
19b70 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63   messages */.  c
19b80 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d  onst Token *pNam
19b90 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  e; /* Name of th
19ba0 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
19bb0 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
19bc0 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  sages */.};../*.
19bd0 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75  ** An objected u
19be0 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74  sed to accumulat
19bf0 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20  e the text of a 
19c00 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a  string where we.
19c10 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73  ** do not necess
19c20 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62  arily know how b
19c30 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69  ig the string wi
19c40 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64  ll be in the end
19c50 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41  ..*/.struct StrA
19c60 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33  ccum {.  sqlite3
19c70 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
19c80 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61   Optional databa
19c90 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  se for lookaside
19ca0 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a  .  Can be NULL *
19cb0 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b  /.  char *zBase;
19cc0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61           /* A ba
19cd0 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  se allocation.  
19ce0 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e  Not from malloc.
19cf0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78   */.  char *zTex
19d00 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  t;         /* Th
19d10 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74  e string collect
19d20 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
19d30 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20  nt  nChar;      
19d40 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
19d50 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66   the string so f
19d60 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c  ar */.  int  nAl
19d70 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  loc;         /* 
19d80 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20  Amount of space 
19d90 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65  allocated in zTe
19da0 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41  xt */.  int  mxA
19db0 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  lloc;        /* 
19dc0 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20  Maximum allowed 
19dd0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f  string length */
19de0 0a 20 20 75 38 20 20 20 6d 61 6c 6c 6f 63 46 61  .  u8   mallocFa
19df0 69 6c 65 64 3b 20 20 20 2f 2a 20 42 65 63 6f 6d  iled;   /* Becom
19e00 65 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6d  es true if any m
19e10 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
19e20 20 66 61 69 6c 73 20 2a 2f 0a 20 20 75 38 20 20   fails */.  u8  
19e30 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20 20   useMalloc;     
19e40 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a   /* 0: none,  1:
19e50 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
19e60 2c 20 20 32 3a 20 73 71 6c 69 74 65 33 5f 6d 61  ,  2: sqlite3_ma
19e70 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20 20 20 74  lloc */.  u8   t
19e80 6f 6f 42 69 67 3b 20 20 20 20 20 20 20 20 20 2f  ooBig;         /
19e90 2a 20 42 65 63 6f 6d 65 73 20 74 72 75 65 20 69  * Becomes true i
19ea0 66 20 73 74 72 69 6e 67 20 73 69 7a 65 20 65 78  f string size ex
19eb0 63 65 65 64 73 20 6c 69 6d 69 74 73 20 2a 2f 0a  ceeds limits */.
19ec0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e  };../*.** A poin
19ed0 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
19ee0 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
19ef0 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66   communicate inf
19f00 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d  ormation.** from
19f10 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64   sqlite3Init and
19f20 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20   OP_ParseSchema 
19f30 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  into the sqlite3
19f40 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  InitCallback..*/
19f50 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
19f60 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
19f70 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
19f80 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e  atabase being in
19f90 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63  itialized */.  c
19fa0 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20  har **pzErrMsg; 
19fb0 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73     /* Error mess
19fc0 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  age stored here 
19fd0 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
19fe0 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f           /* 0 fo
19ff0 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  r main database.
1a000 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e    1 for TEMP, 2.
1a010 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a  . for ATTACHed *
1a020 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
1a030 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
1a040 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65  t code stored he
1a050 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61  re */.} InitData
1a060 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75  ;../*.** Structu
1a070 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c  re containing gl
1a080 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69  obal configurati
1a090 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  on data for the 
1a0a0 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a  SQLite library..
1a0b0 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  **.** This struc
1a0c0 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69  ture also contai
1a0d0 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e  ns some state in
1a0e0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
1a0f0 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
1a100 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73  ig {.  int bMems
1a110 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  tat;            
1a120 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1a130 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72   to enable memor
1a140 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e  y status */.  in
1a150 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20  t bCoreMutex;   
1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a170 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
1a180 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20  e core mutexing 
1a190 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75  */.  int bFullMu
1a1a0 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
1a1b0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1a1c0 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75  o enable full mu
1a1d0 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
1a1e0 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20  bOpenUri;       
1a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a200 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72   True to interpr
1a210 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20  et filenames as 
1a220 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55  URIs */.  int bU
1a230 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20  seCis;          
1a240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
1a250 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69  se covering indi
1a260 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61  ces for full-sca
1a270 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74  ns */.  int mxSt
1a280 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  rlen;           
1a290 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
1a2a0 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67  imum string leng
1a2b0 74 68 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f  th */.  int szLo
1a2c0 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
1a2d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1a2e0 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
1a2f0 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20  uffer size */.  
1a300 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20  int nLookaside; 
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a320 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
1a330 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f  kaside buffer co
1a340 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  unt */.  sqlite3
1a350 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20  _mem_methods m; 
1a360 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
1a370 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61  w-level memory a
1a380 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66  llocation interf
1a390 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
1a3a0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d  _mutex_methods m
1a3b0 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f  utex;      /* Lo
1a3c0 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e  w-level mutex in
1a3d0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
1a3e0 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68  ite3_pcache_meth
1a3f0 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f  ods2 pcache2;  /
1a400 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65  * Low-level page
1a410 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65  -cache interface
1a420 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61   */.  void *pHea
1a430 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1a440 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20          /* Heap 
1a450 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f  storage space */
1a460 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20  .  int nHeap;   
1a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a480 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1a490 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pHeap[] */.  int
1a4a0 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20   mnReq, mxReq;  
1a4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a4c0 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65  * Min and max he
1a4d0 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65  ap requests size
1a4e0 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  s */.  sqlite3_i
1a4f0 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20  nt64 szMmap;    
1a500 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70           /* mmap
1a510 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65  () space per ope
1a520 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69  n file */.  sqli
1a530 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70  te3_int64 mxMmap
1a540 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1a550 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66   Maximum value f
1a560 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76  or szMmap */.  v
1a570 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20  oid *pScratch;  
1a580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a590 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f   /* Scratch memo
1a5a0 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63  ry */.  int szSc
1a5b0 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1a5c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
1a5d0 65 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63  e of each scratc
1a5e0 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e  h buffer */.  in
1a5f0 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20  t nScratch;     
1a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a610 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72  /* Number of scr
1a620 61 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a  atch buffers */.
1a630 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20    void *pPage;  
1a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a650 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68      /* Page cach
1a660 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  e memory */.  in
1a670 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20  t szPage;       
1a680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a690 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
1a6a0 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20  page in pPage[] 
1a6b0 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20  */.  int nPage; 
1a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1a6e0 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61   of pages in pPa
1a6f0 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  ge[] */.  int mx
1a700 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20  ParserStack;    
1a710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
1a720 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20  aximum depth of 
1a730 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b  the parser stack
1a740 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64   */.  int shared
1a750 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20  CacheEnabled;   
1a760 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20          /* true 
1a770 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  if shared-cache 
1a780 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a  mode enabled */.
1a790 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d    /* The above m
1a7a0 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69  ight be initiali
1a7b0 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e  zed to non-zero.
1a7c0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
1a7d0 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20  need to always. 
1a7e0 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65   ** initially be
1a7f0 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20   zero, however. 
1a800 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b  */.  int isInit;
1a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a820 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1a830 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74  fter initializat
1a840 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64  ion has finished
1a850 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67   */.  int inProg
1a860 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20  ress;           
1a870 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1a880 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  while initializa
1a890 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
1a8a0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65   */.  int isMute
1a8b0 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  xInit;          
1a8c0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1a8d0 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72  after mutexes ar
1a8e0 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  e initialized */
1a8f0 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49  .  int isMallocI
1a900 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1a910 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1a920 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
1a930 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
1a940 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20  t isPCacheInit; 
1a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a960 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
1a970 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
1a980 7a 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  zed */.  sqlite3
1a990 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74  _mutex *pInitMut
1a9a0 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75  ex;        /* Mu
1a9b0 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69  tex used by sqli
1a9c0 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
1a9d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e   */.  int nRefIn
1a9e0 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  itMutex;        
1a9f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1aa00 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49  r of users of pI
1aa10 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 76 6f  nitMutex */.  vo
1aa20 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a  id (*xLog)(void*
1aa30 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
1aa40 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66  ); /* Function f
1aa50 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20  or logging */.  
1aa60 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20  void *pLogArg;  
1aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa80 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
1aa90 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29  gument to xLog()
1aaa0 20 2a 2f 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c   */.  int bLocal
1aab0 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20  timeFault;      
1aac0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1aad0 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d  to fail localtim
1aae0 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 69 66  e() calls */.#if
1aaf0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1ab00 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28  E_SQLLOG.  void(
1ab10 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c  *xSqllog)(void*,
1ab20 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1ab30 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  har*, int);.  vo
1ab40 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a  id *pSqllogArg;.
1ab50 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
1ab60 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72   Context pointer
1ab70 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72   passed down thr
1ab80 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61  ough the tree-wa
1ab90 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61  lk..*/.struct Wa
1aba0 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  lker {.  int (*x
1abb0 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61  ExprCallback)(Wa
1abc0 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20  lker*, Expr*);  
1abd0 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66     /* Callback f
1abe0 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  or expressions *
1abf0 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63  /.  int (*xSelec
1ac00 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  tCallback)(Walke
1ac10 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a  r*,Select*);  /*
1ac20 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   Callback for SE
1ac30 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65  LECTs */.  Parse
1ac40 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac60 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63       /* Parser c
1ac70 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e  ontext.  */.  in
1ac80 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20  t walkerDepth;  
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aca0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1acb0 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20  r of subqueries 
1acc0 2a 2f 0a 20 20 75 38 20 62 53 65 6c 65 63 74 44  */.  u8 bSelectD
1acd0 65 70 74 68 46 69 72 73 74 3b 20 20 20 20 20 20  epthFirst;      
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1acf0 2a 20 44 6f 20 73 75 62 71 75 65 72 69 65 73 20  * Do subqueries 
1ad00 66 69 72 73 74 20 2a 2f 0a 20 20 75 6e 69 6f 6e  first */.  union
1ad10 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad30 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61       /* Extra da
1ad40 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ta for callback 
1ad50 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65  */.    NameConte
1ad60 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20  xt *pNC;        
1ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad80 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74    /* Naming cont
1ad90 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ext */.    int i
1ada0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adc0 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
1add0 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 53 72   value */.    Sr
1ade0 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae00 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d           /* FROM
1ae10 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73   clause */.    s
1ae20 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a  truct SrcCount *
1ae30 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20  pSrcCount;      
1ae40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
1ae50 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66  nting column ref
1ae60 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75  erences */.  } u
1ae70 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64  ;.};../* Forward
1ae80 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f   declarations */
1ae90 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1aea0 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78  Expr(Walker*, Ex
1aeb0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1aec0 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61  3WalkExprList(Wa
1aed0 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lker*, ExprList*
1aee0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1aef0 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a  lkSelect(Walker*
1af00 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
1af10 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1af20 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53  tExpr(Walker*, S
1af30 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
1af40 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72  ite3WalkSelectFr
1af50 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  om(Walker*, Sele
1af60 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  ct*);../*.** Ret
1af70 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  urn code from th
1af80 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c  e parse-tree wal
1af90 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20  king primitives 
1afa0 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c  and their.** cal
1afb0 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69  lbacks..*/.#defi
1afc0 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20  ne WRC_Continue 
1afd0 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e     0   /* Contin
1afe0 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69  ue down into chi
1aff0 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ldren */.#define
1b000 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20   WRC_Prune      
1b010 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69   1   /* Omit chi
1b020 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e  ldren but contin
1b030 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69  ue walking sibli
1b040 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ngs */.#define W
1b050 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32  RC_Abort       2
1b060 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68     /* Abandon th
1b070 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a  e tree walk */..
1b080 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a  /*.** Assuming z
1b090 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  In points to the
1b0a0 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   first byte of a
1b0b0 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
1b0c0 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e  ,.** advance zIn
1b0d0 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
1b0e0 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
1b0f0 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68  he next UTF-8 ch
1b100 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  aracter..*/.#def
1b110 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f  ine SQLITE_SKIP_
1b120 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20  UTF8(zIn) {     
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b140 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49     \.  if( (*(zI
1b150 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20  n++))>=0xc0 ){  
1b160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b170 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1b180 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26    while( (*zIn &
1b190 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20   0xc0)==0x80 ){ 
1b1a0 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20  zIn++; }        
1b1b0 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20       \.  }      
1b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
1b1f0 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  }../*.** The SQL
1b200 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f  ITE_*_BKPT macro
1b210 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
1b220 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20  s for the error 
1b230 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68  codes with.** th
1b240 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20  e same name but 
1b250 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50  without the _BKP
1b260 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65  T suffix.  These
1b270 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a   macros invoke.*
1b280 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  * routines that 
1b290 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d  report the line-
1b2a0 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20  number on which 
1b2b0 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e  the error origin
1b2c0 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71  ated.** using sq
1b2d0 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68  lite3_log().  Th
1b2e0 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20  e routines also 
1b2f0 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e  provide a conven
1b300 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f  ient place.** to
1b310 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
1b320 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69  breakpoint..*/.i
1b330 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
1b340 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  tError(int);.int
1b350 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
1b360 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
1b370 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
1b380 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65  or(int);.#define
1b390 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
1b3a0 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72  BKPT sqlite3Corr
1b3b0 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
1b3c0 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
1b3d0 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71  E_MISUSE_BKPT sq
1b3e0 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
1b3f0 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
1b400 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  ne SQLITE_CANTOP
1b410 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  EN_BKPT sqlite3C
1b420 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c  antopenError(__L
1b430 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46  INE__).../*.** F
1b440 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e  TS4 is really an
1b450 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46   extension for F
1b460 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62  TS3.  It is enab
1b470 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  led using the.**
1b480 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1b490 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20  TS3 macro.  But 
1b4a0 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  to avoid confusi
1b4b0 6f 6e 20 77 65 20 61 6c 73 6f 20 61 6c 6c 0a 2a  on we also all.*
1b4c0 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  * the SQLITE_ENA
1b4d0 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74  BLE_FTS4 macro t
1b4e0 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c  o serve as an al
1b4f0 69 73 73 65 20 66 6f 72 20 53 51 4c 49 54 45 5f  isse for SQLITE_
1b500 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a  ENABLE_FTS3..*/.
1b510 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1b520 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20  TE_ENABLE_FTS4) 
1b530 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1b540 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a  TE_ENABLE_FTS3).
1b550 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1b560 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 65 6e 64  ENABLE_FTS3.#end
1b570 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74  if../*.** The ct
1b580 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20  ype.h header is 
1b590 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41  needed for non-A
1b5a0 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49  SCII systems.  I
1b5b0 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65  t is also.** nee
1b5c0 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e  ded by FTS3 when
1b5d0 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65   FTS3 is include
1b5e0 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d  d in the amalgam
1b5f0 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  ation..*/.#if !d
1b600 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53  efined(SQLITE_AS
1b610 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  CII) || \.    (d
1b620 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
1b630 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65  ABLE_FTS3) && de
1b640 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41  fined(SQLITE_AMA
1b650 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e  LGAMATION)).# in
1b660 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a  clude <ctype.h>.
1b670 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1b680 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1b690 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61  os mimic the sta
1b6a0 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75  ndard library fu
1b6b0 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28  nctions toupper(
1b6c0 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c  ),.** isspace(),
1b6d0 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69   isalnum(), isdi
1b6e0 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67  git() and isxdig
1b6f0 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65  it(), respective
1b700 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74  ly. The.** sqlit
1b710 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20  e versions only 
1b720 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63  work for ASCII c
1b730 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72  haracters, regar
1b740 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e  dless of locale.
1b750 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
1b760 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65  E_ASCII.# define
1b770 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
1b780 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74  x)  ((x)&~(sqlit
1b790 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1b7a0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1b7b0 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73  x20)).# define s
1b7c0 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
1b7d0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
1b7e0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1b7f0 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20  ar)(x)]&0x01).# 
1b800 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1b810 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69  alnum(x)   (sqli
1b820 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1b830 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1b840 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73  0x06).# define s
1b850 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
1b860 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
1b870 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1b880 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20  ar)(x)]&0x02).# 
1b890 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1b8a0 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69  digit(x)   (sqli
1b8b0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1b8c0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1b8d0 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73  0x04).# define s
1b8e0 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
1b8f0 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65  )  (sqlite3Ctype
1b900 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1b910 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20  ar)(x)]&0x08).# 
1b920 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
1b930 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69  lower(x)   (sqli
1b940 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
1b950 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1b960 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  x)]).#else.# def
1b970 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
1b980 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28  er(x)   toupper(
1b990 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1b9a0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1b9b0 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20  ite3Isspace(x)  
1b9c0 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e   isspace((unsign
1b9d0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1b9e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1b9f0 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75  lnum(x)   isalnu
1ba00 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  m((unsigned char
1ba10 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1ba20 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
1ba30 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69     isalpha((unsi
1ba40 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1ba50 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1ba60 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69  sdigit(x)   isdi
1ba70 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
1ba80 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1ba90 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
1baa0 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75  (x)  isxdigit((u
1bab0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1bac0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1bad0 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74  e3Tolower(x)   t
1bae0 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64  olower((unsigned
1baf0 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64 69   char)(x)).#endi
1bb00 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61  f../*.** Interna
1bb10 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f  l function proto
1bb20 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  types.*/.#define
1bb30 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 20   sqlite3StrICmp 
1bb40 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 0a  sqlite3_stricmp.
1bb50 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65  int sqlite3Strle
1bb60 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  n30(const char*)
1bb70 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ;.#define sqlite
1bb80 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65  3StrNICmp sqlite
1bb90 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20  3_strnicmp..int 
1bba0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69  sqlite3MallocIni
1bbb0 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  t(void);.void sq
1bbc0 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76  lite3MallocEnd(v
1bbd0 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  oid);.void *sqli
1bbe0 74 65 33 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  te3Malloc(int);.
1bbf0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
1bc00 6c 6f 63 5a 65 72 6f 28 69 6e 74 29 3b 0a 76 6f  locZero(int);.vo
1bc10 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
1bc20 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a  locZero(sqlite3*
1bc30 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1bc40 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
1bc50 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
1bc60 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
1bc70 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  StrDup(sqlite3*,
1bc80 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
1bc90 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
1bca0 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  NDup(sqlite3*,co
1bcb0 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
1bcc0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65  .void *sqlite3Re
1bcd0 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 69 6e 74  alloc(void*, int
1bce0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1bcf0 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28  DbReallocOrFree(
1bd00 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
1bd10 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
1bd20 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28  qlite3DbRealloc(
1bd30 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
1bd40 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1bd50 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69  lite3DbFree(sqli
1bd60 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e  te3*, void*);.in
1bd70 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  t sqlite3MallocS
1bd80 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  ize(void*);.int 
1bd90 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53  sqlite3DbMallocS
1bda0 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ize(sqlite3*, vo
1bdb0 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
1bdc0 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63  te3ScratchMalloc
1bdd0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
1bde0 74 65 33 53 63 72 61 74 63 68 46 72 65 65 28 76  te3ScratchFree(v
1bdf0 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
1be00 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69  ite3PageMalloc(i
1be10 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1be20 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29  3PageFree(void*)
1be30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ;.void sqlite3Me
1be40 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64  mSetDefault(void
1be50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1be60 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73  enignMallocHooks
1be70 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c  (void (*)(void),
1be80 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29   void (*)(void))
1be90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61  ;.int sqlite3Hea
1bea0 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64  pNearlyFull(void
1beb0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73  );../*.** On sys
1bec0 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20  tems with ample 
1bed0 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20  stack space and 
1bee0 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c  that support all
1bef0 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75  oca(), make.** u
1bf00 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74  se of alloca() t
1bf10 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  o obtain space f
1bf20 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74  or large automat
1bf30 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20  ic objects.  By 
1bf40 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61  default,.** obta
1bf50 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61  in space from ma
1bf60 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  lloc()..**.** Th
1bf70 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69  e alloca() routi
1bf80 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73  ne never returns
1bf90 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c   NULL.  This wil
1bfa0 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74  l cause code pat
1bfb0 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20  hs.** that deal 
1bfc0 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63  with sqlite3Stac
1bfd0 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  kAlloc() failure
1bfe0 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61  s to be unreacha
1bff0 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ble..*/.#ifdef S
1c000 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41  QLITE_USE_ALLOCA
1c010 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c020 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
1c030 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a  ,N)   alloca(N).
1c040 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1c050 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
1c060 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f  ,N)  memset(allo
1c070 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64  ca(N), 0, N).# d
1c080 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1c090 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
1c0a0 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e    .#else.# defin
1c0b0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
1c0c0 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71  locRaw(D,N)   sq
1c0d0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
1c0e0 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
1c0f0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
1c100 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74  Zero(D,N)  sqlit
1c110 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44  e3DbMallocZero(D
1c120 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
1c130 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
1c140 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  P)       sqlite3
1c150 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64  DbFree(D,P).#end
1c160 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
1c170 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
1c180 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
1c190 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
1c1a0 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
1c1b0 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23  (void);.#endif.#
1c1c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1c1d0 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73  BLE_MEMSYS5.cons
1c1e0 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
1c1f0 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
1c200 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64  mGetMemsys5(void
1c210 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  );.#endif...#ifn
1c220 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58  def SQLITE_MUTEX
1c230 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f  _OMIT.  sqlite3_
1c240 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
1c250 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61  nst *sqlite3Defa
1c260 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  ultMutex(void);.
1c270 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1c280 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
1c290 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28  qlite3NoopMutex(
1c2a0 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
1c2b0 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
1c2c0 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a  utexAlloc(int);.
1c2d0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
1c2e0 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20  exInit(void);.  
1c2f0 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
1c300 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  End(void);.#endi
1c310 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  f..int sqlite3St
1c320 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a  atusValue(int);.
1c330 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
1c340 75 73 41 64 64 28 69 6e 74 2c 20 69 6e 74 29 3b  usAdd(int, int);
1c350 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
1c360 74 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74 29  tusSet(int, int)
1c370 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
1c380 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
1c390 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69  POINT.  int sqli
1c3a0 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29  te3IsNaN(double)
1c3b0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
1c3c0 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29   sqlite3IsNaN(X)
1c3d0 20 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64    0.#endif..void
1c3e0 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66   sqlite3VXPrintf
1c3f0 28 53 74 72 41 63 63 75 6d 2a 2c 20 69 6e 74 2c  (StrAccum*, int,
1c400 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61   const char*, va
1c410 5f 6c 69 73 74 29 3b 0a 23 69 66 6e 64 65 66 20  _list);.#ifndef 
1c420 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
1c430 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50  E.void sqlite3XP
1c440 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
1c450 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
1c460 2e 29 3b 0a 23 65 6e 64 69 66 0a 63 68 61 72 20  .);.#endif.char 
1c470 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28  *sqlite3MPrintf(
1c480 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1c490 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
1c4a0 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
1c4b0 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
1c4c0 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
1c4d0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  ;.char *sqlite3M
1c4e0 41 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33 2a  Appendf(sqlite3*
1c4f0 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,char*,const cha
1c500 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66  r*,...);.#if def
1c510 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
1c520 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
1c530 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69  ITE_DEBUG).  voi
1c540 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  d sqlite3DebugPr
1c550 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  intf(const char*
1c560 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23  , ...);.#endif.#
1c570 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1c580 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a  E_TEST).  void *
1c590 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54  sqlite3TestTextT
1c5a0 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a  oPtr(const char*
1c5b0 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 75  );.#endif../* Ou
1c5c0 74 70 75 74 20 66 6f 72 6d 61 74 74 69 6e 67 20  tput formatting 
1c5d0 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 53 54 43  for SQLITE_TESTC
1c5e0 54 52 4c 5f 45 58 50 4c 41 49 4e 20 2a 2f 0a 23  TRL_EXPLAIN */.#
1c5f0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1c600 45 5f 45 4e 41 42 4c 45 5f 54 52 45 45 5f 45 58  E_ENABLE_TREE_EX
1c610 50 4c 41 49 4e 29 0a 20 20 76 6f 69 64 20 73 71  PLAIN).  void sq
1c620 6c 69 74 65 33 45 78 70 6c 61 69 6e 42 65 67 69  lite3ExplainBegi
1c630 6e 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  n(Vdbe*);.  void
1c640 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50   sqlite3ExplainP
1c650 72 69 6e 74 66 28 56 64 62 65 2a 2c 20 63 6f 6e  rintf(Vdbe*, con
1c660 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
1c670 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1c680 70 6c 61 69 6e 4e 4c 28 56 64 62 65 2a 29 3b 0a  plainNL(Vdbe*);.
1c690 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1c6a0 70 6c 61 69 6e 50 75 73 68 28 56 64 62 65 2a 29  plainPush(Vdbe*)
1c6b0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1c6c0 45 78 70 6c 61 69 6e 50 6f 70 28 56 64 62 65 2a  ExplainPop(Vdbe*
1c6d0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1c6e0 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 56  3ExplainFinish(V
1c6f0 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  dbe*);.  void sq
1c700 6c 69 74 65 33 45 78 70 6c 61 69 6e 53 65 6c 65  lite3ExplainSele
1c710 63 74 28 56 64 62 65 2a 2c 20 53 65 6c 65 63 74  ct(Vdbe*, Select
1c720 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1c730 65 33 45 78 70 6c 61 69 6e 45 78 70 72 28 56 64  e3ExplainExpr(Vd
1c740 62 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  be*, Expr*);.  v
1c750 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1c760 69 6e 45 78 70 72 4c 69 73 74 28 56 64 62 65 2a  inExprList(Vdbe*
1c770 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
1c780 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
1c790 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69  te3VdbeExplanati
1c7a0 6f 6e 28 56 64 62 65 2a 29 3b 0a 23 65 6c 73 65  on(Vdbe*);.#else
1c7b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c7c0 33 45 78 70 6c 61 69 6e 42 65 67 69 6e 28 58 29  3ExplainBegin(X)
1c7d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c7e0 33 45 78 70 6c 61 69 6e 53 65 6c 65 63 74 28 41  3ExplainSelect(A
1c7f0 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
1c800 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 28  ite3ExplainExpr(
1c810 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
1c820 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72  lite3ExplainExpr
1c830 4c 69 73 74 28 41 2c 42 29 0a 23 20 64 65 66 69  List(A,B).# defi
1c840 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1c850 6e 46 69 6e 69 73 68 28 58 29 0a 23 20 64 65 66  nFinish(X).# def
1c860 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 45  ine sqlite3VdbeE
1c870 78 70 6c 61 6e 61 74 69 6f 6e 28 58 29 20 30 0a  xplanation(X) 0.
1c880 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71  #endif...void sq
1c890 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63  lite3SetString(c
1c8a0 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  har **, sqlite3*
1c8b0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
1c8c0 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
1c8d0 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  3ErrorMsg(Parse*
1c8e0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
1c8f0 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..);.int sqlite3
1c900 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a  Dequote(char*);.
1c910 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f  int sqlite3Keywo
1c920 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73  rdCode(const uns
1c930 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74  igned char*, int
1c940 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
1c950 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20  nParser(Parse*, 
1c960 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
1c970 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  r **);.void sqli
1c980 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28  te3FinishCoding(
1c990 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
1c9a0 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50  ite3GetTempReg(P
1c9b0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
1c9c0 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
1c9d0 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  eg(Parse*,int);.
1c9e0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
1c9f0 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
1ca00 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1ca10 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67  3ReleaseTempRang
1ca20 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
1ca30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1ca40 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65  learTempRegCache
1ca50 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a  (Parse*);.Expr *
1ca60 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63  sqlite3ExprAlloc
1ca70 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
1ca80 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  nst Token*,int);
1ca90 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
1caa0 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  pr(sqlite3*,int,
1cab0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
1cac0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74  id sqlite3ExprAt
1cad0 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c  tachSubtrees(sql
1cae0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72  ite3*,Expr*,Expr
1caf0 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  *,Expr*);.Expr *
1cb00 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72  sqlite3PExpr(Par
1cb10 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c  se*, int, Expr*,
1cb20 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
1cb30 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ken*);.Expr *sql
1cb40 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69  ite3ExprAnd(sqli
1cb50 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  te3*,Expr*, Expr
1cb60 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
1cb70 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61  3ExprFunction(Pa
1cb80 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  rse*,ExprList*, 
1cb90 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1cba0 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56  lite3ExprAssignV
1cbb0 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c  arNumber(Parse*,
1cbc0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
1cbd0 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28  lite3ExprDelete(
1cbe0 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29  sqlite3*, Expr*)
1cbf0 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
1cc00 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e  te3ExprListAppen
1cc10 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  d(Parse*,ExprLis
1cc20 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  t*,Expr*);.void 
1cc30 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
1cc40 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78  etName(Parse*,Ex
1cc50 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69  prList*,Token*,i
1cc60 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1cc70 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e  3ExprListSetSpan
1cc80 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
1cc90 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
1cca0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
1ccb0 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
1ccc0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
1ccd0 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73  nt sqlite3Init(s
1cce0 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29  qlite3*, char**)
1ccf0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
1cd00 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c  tCallback(void*,
1cd10 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68   int, char**, ch
1cd20 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar**);.void sqli
1cd30 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a  te3Pragma(Parse*
1cd40 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
1cd50 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
1cd60 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
1cd70 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
1cd80 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ion(sqlite3*);.v
1cd90 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
1cda0 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65  OneSchema(sqlite
1cdb0 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
1cdc0 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74  lite3CollapseDat
1cdd0 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69 74  abaseArray(sqlit
1cde0 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
1cdf0 65 33 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  e3BeginParse(Par
1ce00 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
1ce10 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65  qlite3CommitInte
1ce20 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69  rnalChanges(sqli
1ce30 74 65 33 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  te3*);.Table *sq
1ce40 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66  lite3ResultSetOf
1ce50 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65  Select(Parse*,Se
1ce60 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lect*);.void sql
1ce70 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61  ite3OpenMasterTa
1ce80 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ble(Parse *, int
1ce90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1cea0 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a  tartTable(Parse*
1ceb0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
1cec0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  nt,int,int,int);
1ced0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1cee0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f  Column(Parse*,To
1cef0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
1cf00 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61  te3AddNotNull(Pa
1cf10 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
1cf20 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61   sqlite3AddPrima
1cf30 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  ryKey(Parse*, Ex
1cf40 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
1cf50 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1cf60 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e  lite3AddCheckCon
1cf70 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
1cf80 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
1cf90 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79 70  ite3AddColumnTyp
1cfa0 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  e(Parse*,Token*)
1cfb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1cfc0 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61  dDefaultValue(Pa
1cfd0 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b  rse*,ExprSpan*);
1cfe0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1cff0 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73  CollateType(Pars
1d000 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
1d010 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c  d sqlite3EndTabl
1d020 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
1d030 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 29 3b  Token*,Select*);
1d040 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
1d050 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  eUri(const char*
1d060 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73  ,const char*,uns
1d070 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20  igned int*,.    
1d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d090 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68  sqlite3_vfs**,ch
1d0a0 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42  ar**,char **);.B
1d0b0 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e  tree *sqlite3DbN
1d0c0 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74  ameToBtree(sqlit
1d0d0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
1d0e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
1d0f0 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a  eOnce(Parse *);.
1d100 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33  .Bitvec *sqlite3
1d110 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32  BitvecCreate(u32
1d120 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
1d130 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a  tvecTest(Bitvec*
1d140 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
1d150 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74  te3BitvecSet(Bit
1d160 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  vec*, u32);.void
1d170 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c   sqlite3BitvecCl
1d180 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ear(Bitvec*, u32
1d190 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
1d1a0 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74  qlite3BitvecDest
1d1b0 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33  roy(Bitvec*);.u3
1d1c0 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  2 sqlite3BitvecS
1d1d0 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e  ize(Bitvec*);.in
1d1e0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
1d1f0 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
1d200 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73  nt*);..RowSet *s
1d210 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74  qlite3RowSetInit
1d220 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
1d230 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  , unsigned int);
1d240 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
1d250 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a  SetClear(RowSet*
1d260 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1d270 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53  owSetInsert(RowS
1d280 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  et*, i64);.int s
1d290 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
1d2a0 28 52 6f 77 53 65 74 2a 2c 20 75 38 20 69 42 61  (RowSet*, u8 iBa
1d2b0 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
1d2c0 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
1d2d0 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
1d2e0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
1d2f0 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
1d300 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
1d310 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  ken*,Select*,int
1d320 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66  ,int);..#if !def
1d330 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1d340 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e  _VIEW) || !defin
1d350 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
1d360 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69  IRTUALTABLE).  i
1d370 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  nt sqlite3ViewGe
1d380 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72  tColumnNames(Par
1d390 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  se*,Table*);.#el
1d3a0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1d3b0 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
1d3c0 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e  Names(A,B) 0.#en
1d3d0 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
1d3e0 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  3DropTable(Parse
1d3f0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
1d400 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1d410 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c  ite3CodeDropTabl
1d420 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
1d430 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1d440 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
1d450 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
1d460 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  able*);.#ifndef 
1d470 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
1d480 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64  INCREMENT.  void
1d490 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
1d4a0 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65  ementBegin(Parse
1d4b0 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69   *pParse);.  voi
1d4c0 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
1d4d0 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20  rementEnd(Parse 
1d4e0 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a  *pParse);.#else.
1d4f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1d500 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
1d510 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  in(X).# define s
1d520 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
1d530 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66  entEnd(X).#endif
1d540 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
1d550 43 6f 72 6f 75 74 69 6e 65 28 50 61 72 73 65 2a  Coroutine(Parse*
1d560 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63  , Select*, Selec
1d570 74 44 65 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  tDest*);.void sq
1d580 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73  lite3Insert(Pars
1d590 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
1d5a0 70 72 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a  prList*, Select*
1d5b0 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  , IdList*, int);
1d5c0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72  .void *sqlite3Ar
1d5d0 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69  rayAllocate(sqli
1d5e0 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69  te3*,void*,int,i
1d5f0 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73  nt*,int*);.IdLis
1d600 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
1d610 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
1d620 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a   IdList*, Token*
1d630 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64  );.int sqlite3Id
1d640 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74  ListIndex(IdList
1d650 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
1d660 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
1d670 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73  SrcListEnlarge(s
1d680 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
1d690 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72  *, int, int);.Sr
1d6a0 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
1d6b0 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  cListAppend(sqli
1d6c0 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
1d6d0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
1d6e0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
1d6f0 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72  3SrcListAppendFr
1d700 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53  omTerm(Parse*, S
1d710 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
1d720 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20   Token*,.       
1d730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1d750 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  oken*, Select*, 
1d760 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  Expr*, IdList*);
1d770 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
1d780 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61  ListIndexedBy(Pa
1d790 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
1d7a0 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20  , Token *);.int 
1d7b0 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79  sqlite3IndexedBy
1d7c0 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20  Lookup(Parse *, 
1d7d0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
1d7e0 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tem *);.void sql
1d7f0 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
1d800 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74  JoinType(SrcList
1d810 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d820 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72  SrcListAssignCur
1d830 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63  sors(Parse*, Src
1d840 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
1d850 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65  ite3IdListDelete
1d860 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
1d870 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1d880 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73  3SrcListDelete(s
1d890 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
1d8a0 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
1d8b0 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61  e3CreateIndex(Pa
1d8c0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
1d8d0 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  n*,SrcList*,Expr
1d8e0 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a  List*,int,Token*
1d8f0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1d900 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a            Token*
1d910 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1d920 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64  d sqlite3DropInd
1d930 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  ex(Parse*, SrcLi
1d940 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
1d950 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72  qlite3Select(Par
1d960 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65  se*, Select*, Se
1d970 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65  lectDest*);.Sele
1d980 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
1d990 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72  tNew(Parse*,Expr
1d9a0 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  List*,SrcList*,E
1d9b0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a  xpr*,ExprList*,.
1d9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9d0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45           Expr*,E
1d9e0 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70  xprList*,u16,Exp
1d9f0 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  r*,Expr*);.void 
1da00 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c  sqlite3SelectDel
1da10 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65  ete(sqlite3*, Se
1da20 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
1da30 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f  qlite3SrcListLoo
1da40 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  kup(Parse*, SrcL
1da50 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
1da60 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72  e3IsReadOnly(Par
1da70 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
1da80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
1da90 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  penTable(Parse*,
1daa0 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69   int iCur, int i
1dab0 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  Db, Table*, int)
1dac0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
1dad0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
1dae0 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29  TE_DELETE_LIMIT)
1daf0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1db00 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
1db10 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  Y).Expr *sqlite3
1db20 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65  LimitWhere(Parse
1db30 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
1db40 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
1db50 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23  ,Expr*,char*);.#
1db60 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
1db70 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72  e3DeleteFrom(Par
1db80 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
1db90 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
1dba0 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a  te3Update(Parse*
1dbb0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
1dbc0 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  List*, Expr*, in
1dbd0 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73  t);.WhereInfo *s
1dbe0 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
1dbf0 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
1dc00 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
1dc10 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69  ,ExprList*,u16,i
1dc20 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1dc30 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49  3WhereEnd(WhereI
1dc40 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74  nfo*);.u64 sqlit
1dc50 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77  e3WhereOutputRow
1dc60 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a  Count(WhereInfo*
1dc70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
1dc80 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68  ereIsDistinct(Wh
1dc90 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
1dca0 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64  qlite3WhereIsOrd
1dcb0 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  ered(WhereInfo*)
1dcc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
1dcd0 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28  reContinueLabel(
1dce0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
1dcf0 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65   sqlite3WhereBre
1dd00 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  akLabel(WhereInf
1dd10 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
1dd20 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57  WhereOkOnePass(W
1dd30 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
1dd40 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
1dd50 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  etColumn(Parse*,
1dd60 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1dd70 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69  t, int, u8);.voi
1dd80 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
1dd90 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
1dda0 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  e(Vdbe*, Table*,
1ddb0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
1ddc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1ddd0 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a  rCodeMove(Parse*
1dde0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1ddf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1de00 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72  prCacheStore(Par
1de10 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
1de20 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1de30 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50  3ExprCachePush(P
1de40 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
1de50 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70  ite3ExprCachePop
1de60 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
1de70 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1de80 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65  acheRemove(Parse
1de90 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
1dea0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
1deb0 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29  cheClear(Parse*)
1dec0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1ded0 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43  prCacheAffinityC
1dee0 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e  hange(Parse*, in
1def0 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
1df00 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72  ite3ExprCode(Par
1df10 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
1df20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1df30 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a  rCodeTemp(Parse*
1df40 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  , Expr*, int*);.
1df50 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1df60 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  odeTarget(Parse*
1df70 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
1df80 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1df90 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65  deAndCache(Parse
1dfa0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
1dfb0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1dfc0 43 6f 64 65 43 6f 6e 73 74 61 6e 74 73 28 50 61  CodeConstants(Pa
1dfd0 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  rse*, Expr*);.in
1dfe0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1dff0 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  eExprList(Parse*
1e000 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
1e010 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1e020 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50  ite3ExprIfTrue(P
1e030 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1e040 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1e050 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
1e060 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1e070 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65  int, int);.Table
1e080 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62   *sqlite3FindTab
1e090 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  le(sqlite3*,cons
1e0a0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
1e0b0 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
1e0c0 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
1e0d0 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
1e0e0 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  ew,const char*, 
1e0f0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
1e100 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
1e110 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73  teTableItem(Pars
1e120 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74  e*,int isView,st
1e130 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
1e140 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  m *);.Index *sql
1e150 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71  ite3FindIndex(sq
1e160 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1e170 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
1e180 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
1e190 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
1e1a0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  le(sqlite3*,int,
1e1b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
1e1c0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
1e1d0 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73  AndDeleteIndex(s
1e1e0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
1e1f0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
1e200 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72  qlite3Vacuum(Par
1e210 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
1e220 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
1e230 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68  *, sqlite3*);.ch
1e240 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46  ar *sqlite3NameF
1e250 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33  romToken(sqlite3
1e260 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
1e270 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
1e280 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  re(Expr*, Expr*)
1e290 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1e2a0 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70  rListCompare(Exp
1e2b0 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
1e2c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e2d0 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65  ExprAnalyzeAggre
1e2e0 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  gates(NameContex
1e2f0 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
1e300 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
1e310 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43  yzeAggList(NameC
1e320 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74  ontext*,ExprList
1e330 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
1e340 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53  unctionUsesThisS
1e350 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73  rc(Expr*, SrcLis
1e360 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74  t*);.Vdbe *sqlit
1e370 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a  e3GetVdbe(Parse*
1e380 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
1e390 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69  rngSaveState(voi
1e3a0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
1e3b0 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65  PrngRestoreState
1e3c0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1e3d0 69 74 65 33 50 72 6e 67 52 65 73 65 74 53 74 61  ite3PrngResetSta
1e3e0 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
1e3f0 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
1e400 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
1e410 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
1e420 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
1e430 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
1e440 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
1e450 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
1e460 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
1e470 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
1e480 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
1e490 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
1e4a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1e4b0 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e  ommitTransaction
1e4c0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1e4d0 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72  qlite3RollbackTr
1e4e0 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
1e4f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1e500 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
1e510 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
1e520 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
1e530 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
1e540 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
1e550 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
1e560 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
1e570 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
1e580 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
1e590 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
1e5a0 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
1e5b0 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29  ntNotJoin(Expr*)
1e5c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1e5d0 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e  rIsConstantOrFun
1e5e0 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  ction(Expr*);.in
1e5f0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49  t sqlite3ExprIsI
1e600 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e  nteger(Expr*, in
1e610 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1e620 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f  ExprCanBeNull(co
1e630 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  nst Expr*);.void
1e640 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1e650 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62 65 2a  IsNullJump(Vdbe*
1e660 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 69  , const Expr*, i
1e670 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1e680 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f  lite3ExprNeedsNo
1e690 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63  AffinityChange(c
1e6a0 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72  onst Expr*, char
1e6b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
1e6c0 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72  Rowid(const char
1e6d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e6e0 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74  GenerateRowDelet
1e6f0 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
1e700 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
1e710 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 29   Trigger *, int)
1e720 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
1e730 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65  nerateRowIndexDe
1e740 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62  lete(Parse*, Tab
1e750 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b  le*, int, int*);
1e760 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65  .int sqlite3Gene
1e770 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72  rateIndexKey(Par
1e780 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
1e790 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1e7a0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
1e7b0 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b  eConstraintCheck
1e7c0 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  s(Parse*,Table*,
1e7d0 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20  int,int,.       
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1e800 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  t*,int,int,int,i
1e810 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  nt,int*);.void s
1e820 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e  qlite3CompleteIn
1e830 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  sertion(Parse*, 
1e840 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1e850 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  , int*, int, int
1e860 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
1e870 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
1e880 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
1e890 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  able*, int, int)
1e8a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
1e8b0 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
1e8c0 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  n(Parse*, int, i
1e8d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1e8e0 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73  3MultiWrite(Pars
1e8f0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1e900 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a  3MayAbort(Parse*
1e910 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48  );.void sqlite3H
1e920 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  altConstraint(Pa
1e930 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
1e940 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70  char*, int);.Exp
1e950 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75  r *sqlite3ExprDu
1e960 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  p(sqlite3*,Expr*
1e970 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20  ,int);.ExprList 
1e980 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
1e990 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
1e9a0 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63  rList*,int);.Src
1e9b0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
1e9c0 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
1e9d0 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ,SrcList*,int);.
1e9e0 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
1e9f0 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  dListDup(sqlite3
1ea00 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65  *,IdList*);.Sele
1ea10 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
1ea20 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  tDup(sqlite3*,Se
1ea30 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  lect*,int);.void
1ea40 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49   sqlite3FuncDefI
1ea50 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48 61 73  nsert(FuncDefHas
1ea60 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46  h*, FuncDef*);.F
1ea70 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46  uncDef *sqlite3F
1ea80 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  indFunction(sqli
1ea90 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1eaa0 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b  ,int,int,u8,u8);
1eab0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
1eac0 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
1ead0 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
1eae0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
1eaf0 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e  isterDateTimeFun
1eb00 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
1eb10 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
1eb20 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  erGlobalFunction
1eb30 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
1eb40 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
1eb50 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  k(sqlite3*);.int
1eb60 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
1eb70 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69  eckSickOrOk(sqli
1eb80 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
1eb90 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28  te3ChangeCookie(
1eba0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23  Parse*, int);..#
1ebb0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1ebc0 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26  TE_OMIT_VIEW) &&
1ebd0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1ebe0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76  _OMIT_TRIGGER).v
1ebf0 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72  oid sqlite3Mater
1ec00 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65  ializeView(Parse
1ec10 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
1ec20 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
1ec30 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1ec40 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f  MIT_TRIGGER.  vo
1ec50 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
1ec60 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
1ec70 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
1ec80 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63  ,int,IdList*,Src
1ec90 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecb0 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74    Expr*,int, int
1ecc0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1ecd0 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50  3FinishTrigger(P
1ece0 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74  arse*, TriggerSt
1ecf0 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20  ep*, Token*);.  
1ed00 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
1ed10 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
1ed20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
1ed30 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
1ed40 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72  opTriggerPtr(Par
1ed50 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  se*, Trigger*);.
1ed60 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
1ed70 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
1ed80 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c  Parse *, Table*,
1ed90 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
1eda0 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20   int *pMask);.  
1edb0 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
1edc0 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73  TriggerList(Pars
1edd0 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20  e *, Table *);. 
1ede0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
1edf0 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73  eRowTrigger(Pars
1ee00 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69  e*, Trigger *, i
1ee10 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
1ee20 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20  nt, Table *,.   
1ee30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee40 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e           int, in
1ee50 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
1ee60 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
1ee70 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73  iggerDirect(Pars
1ee80 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  e *, Trigger *, 
1ee90 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
1eea0 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
1eeb0 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65  sqliteViewTrigge
1eec0 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  rs(Parse*, Table
1eed0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45  *, Expr*, int, E
1eee0 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69  xprList*);.  voi
1eef0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
1ef00 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74  riggerStep(sqlit
1ef10 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  e3*, TriggerStep
1ef20 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
1ef30 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
1ef40 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69  rSelectStep(sqli
1ef50 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  te3*,Select*);. 
1ef60 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
1ef70 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65  lite3TriggerInse
1ef80 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  rtStep(sqlite3*,
1ef90 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c  Token*, IdList*,
1efa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efc0 20 20 20 20 20 20 20 20 20 45 78 70 72 4c 69 73           ExprLis
1efd0 74 2a 2c 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a  t*,Select*,u8);.
1efe0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
1eff0 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64  qlite3TriggerUpd
1f000 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ateStep(sqlite3*
1f010 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
1f020 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  *, Expr*, u8);. 
1f030 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
1f040 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
1f050 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
1f060 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a  Token*, Expr*);.
1f070 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
1f080 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
1f090 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
1f0a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
1f0b0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
1f0c0 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
1f0d0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1f0e0 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
1f0f0 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
1f100 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
1f110 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
1f120 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
1f130 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
1f140 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
1f150 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
1f160 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
1f170 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  (p)).#else.# def
1f180 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
1f190 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45  ersExist(B,C,D,E
1f1a0 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73  ,F) 0.# define s
1f1b0 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
1f1c0 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  ger(A,B).# defin
1f1d0 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  e sqlite3DropTri
1f1e0 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64  ggerPtr(A,B).# d
1f1f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c  efine sqlite3Unl
1f200 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
1f210 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66  ger(A,B,C).# def
1f220 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
1f230 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c  owTrigger(A,B,C,
1f240 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64  D,E,F,G,H,I).# d
1f250 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
1f260 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
1f270 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23  t(A,B,C,D,E,F).#
1f280 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1f290 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29  riggerList(X, Y)
1f2a0 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
1f2b0 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
1f2c0 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73  (p) p.# define s
1f2d0 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
1f2e0 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  mask(A,B,C,D,E,F
1f2f0 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e  ,G) 0.#endif..in
1f300 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70  t sqlite3JoinTyp
1f310 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
1f320 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
1f330 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1f340 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28  reateForeignKey(
1f350 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
1f360 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c  *, Token*, ExprL
1f370 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
1f380 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72   sqlite3DeferFor
1f390 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
1f3a0 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
1f3b0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
1f3c0 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73  IZATION.  void s
1f3d0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50  qlite3AuthRead(P
1f3e0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65  arse*,Expr*,Sche
1f3f0 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20  ma*,SrcList*);. 
1f400 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
1f410 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74  Check(Parse*,int
1f420 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
1f430 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
1f440 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
1f450 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
1f460 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20  extPush(Parse*, 
1f470 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f  AuthContext*, co
1f480 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
1f490 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
1f4a0 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e  ntextPop(AuthCon
1f4b0 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  text*);.  int sq
1f4c0 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c  lite3AuthReadCol
1f4d0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
1f4e0 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  har *, const cha
1f4f0 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  r *, int);.#else
1f500 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f510 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c  3AuthRead(a,b,c,
1f520 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  d).# define sqli
1f530 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62  te3AuthCheck(a,b
1f540 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54  ,c,d,e)    SQLIT
1f550 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71  E_OK.# define sq
1f560 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
1f570 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65  Push(a,b,c).# de
1f580 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
1f590 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28  ContextPop(a)  (
1f5a0 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69  (void)(a)).#endi
1f5b0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74  f.void sqlite3At
1f5c0 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
1f5d0 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  r*, Expr*, Expr*
1f5e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
1f5f0 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  etach(Parse*, Ex
1f600 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1f610 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72  3FixInit(DbFixer
1f620 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  *, Parse*, int, 
1f630 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
1f640 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  st Token*);.int 
1f650 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73  sqlite3FixSrcLis
1f660 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c  t(DbFixer*, SrcL
1f670 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
1f680 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69  e3FixSelect(DbFi
1f690 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xer*, Select*);.
1f6a0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
1f6b0 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  pr(DbFixer*, Exp
1f6c0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1f6d0 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69  FixExprList(DbFi
1f6e0 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xer*, ExprList*)
1f6f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
1f700 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69  TriggerStep(DbFi
1f710 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65  xer*, TriggerSte
1f720 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  p*);.int sqlite3
1f730 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20  AtoF(const char 
1f740 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74  *z, double*, int
1f750 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
1f760 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
1f770 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   char *, int*);.
1f780 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28  int sqlite3Atoi(
1f790 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
1f7a0 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  t sqlite3Utf16By
1f7b0 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64  teLen(const void
1f7c0 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68   *pData, int nCh
1f7d0 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
1f7e0 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73  Utf8CharLen(cons
1f7f0 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69  t char *pData, i
1f800 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73  nt nByte);.u32 s
1f810 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63  qlite3Utf8Read(c
1f820 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 0a 2f 2a 0a  onst u8**);../*.
1f830 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72  ** Routines to r
1f840 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76 61  ead and write va
1f850 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
1f860 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20 75  tegers.  These u
1f870 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66  sed to.** be def
1f880 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75  ined locally, bu
1f890 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65  t now we use the
1f8a0 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73   varint routines
1f8b0 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a   in the util.c.*
1f8c0 2a 20 66 69 6c 65 2e 20 20 43 6f 64 65 20 73 68  * file.  Code sh
1f8d0 6f 75 6c 64 20 75 73 65 20 74 68 65 20 4d 41 43  ould use the MAC
1f8e0 52 4f 20 66 6f 72 6d 73 20 62 65 6c 6f 77 2c 20  RO forms below, 
1f8f0 61 73 20 74 68 65 20 56 61 72 69 6e 74 33 32 20  as the Varint32 
1f900 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 61 72 65 20  versions.** are 
1f910 63 6f 64 65 64 20 74 6f 20 61 73 73 75 6d 65 20  coded to assume 
1f920 74 68 65 20 73 69 6e 67 6c 65 20 62 79 74 65 20  the single byte 
1f930 63 61 73 65 20 69 73 20 61 6c 72 65 61 64 79 20  case is already 
1f940 68 61 6e 64 6c 65 64 20 28 77 68 69 63 68 20 0a  handled (which .
1f950 2a 2a 20 74 68 65 20 4d 41 43 52 4f 20 66 6f 72  ** the MACRO for
1f960 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69 6e 74 20  m does)..*/.int 
1f970 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
1f980 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
1f990 20 75 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u64);.int sqlit
1f9a0 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 75 6e  e3PutVarint32(un
1f9b0 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 33  signed char*, u3
1f9c0 32 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  2);.u8 sqlite3Ge
1f9d0 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e  tVarint(const un
1f9e0 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
1f9f0 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65  64 *);.u8 sqlite
1fa00 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e  3GetVarint32(con
1fa10 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
1fa20 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20   *, u32 *);.int 
1fa30 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
1fa40 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20  (u64 v);../*.** 
1fa50 54 68 65 20 68 65 61 64 65 72 20 6f 66 20 61 20  The header of a 
1fa60 72 65 63 6f 72 64 20 63 6f 6e 73 69 73 74 73 20  record consists 
1fa70 6f 66 20 61 20 73 65 71 75 65 6e 63 65 20 76 61  of a sequence va
1fa80 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
1fa90 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
1faa0 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 61 6c   integers are al
1fab0 6d 6f 73 74 20 61 6c 77 61 79 73 20 73 6d 61 6c  most always smal
1fac0 6c 20 61 6e 64 20 61 72 65 20 65 6e 63 6f 64 65  l and are encode
1fad0 64 20 61 73 20 61 20 73 69 6e 67 6c 65 20 62 79  d as a single by
1fae0 74 65 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  te..** The follo
1faf0 77 69 6e 67 20 6d 61 63 72 6f 73 20 74 61 6b 65  wing macros take
1fb00 20 61 64 76 61 6e 74 61 67 65 20 74 68 69 73 20   advantage this 
1fb10 66 61 63 74 20 74 6f 20 70 72 6f 76 69 64 65 20  fact to provide 
1fb20 61 20 66 61 73 74 20 65 6e 63 6f 64 65 0a 2a 2a  a fast encode.**
1fb30 20 61 6e 64 20 64 65 63 6f 64 65 20 6f 66 20 74   and decode of t
1fb40 68 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20 61  he integers in a
1fb50 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 2e 20   record header. 
1fb60 20 49 74 20 69 73 20 66 61 73 74 65 72 20 66 6f   It is faster fo
1fb70 72 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20  r the common.** 
1fb80 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20 69  case where the i
1fb90 6e 74 65 67 65 72 20 69 73 20 61 20 73 69 6e 67  nteger is a sing
1fba0 6c 65 20 62 79 74 65 2e 20 20 49 74 20 69 73 20  le byte.  It is 
1fbb0 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77 65 72 20  a little slower 
1fbc0 77 68 65 6e 20 74 68 65 0a 2a 2a 20 69 6e 74 65  when the.** inte
1fbd0 67 65 72 20 69 73 20 74 77 6f 20 6f 72 20 6d 6f  ger is two or mo
1fbe0 72 65 20 62 79 74 65 73 2e 20 20 42 75 74 20 6f  re bytes.  But o
1fbf0 76 65 72 61 6c 6c 20 69 74 20 69 73 20 66 61 73  verall it is fas
1fc00 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ter..**.** The f
1fc10 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65 73 73  ollowing express
1fc20 69 6f 6e 73 20 61 72 65 20 65 71 75 69 76 61 6c  ions are equival
1fc30 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78  ent:.**.**     x
1fc40 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72   = sqlite3GetVar
1fc50 69 6e 74 33 32 28 20 41 2c 20 26 42 20 29 3b 0a  int32( A, &B );.
1fc60 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74  **     x = sqlit
1fc70 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 20 41  e3PutVarint32( A
1fc80 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 20 20 20  , B );.**.**    
1fc90 20 78 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32   x = getVarint32
1fca0 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 20 20 20 20  ( A, B );.**    
1fcb0 20 78 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32   x = putVarint32
1fcc0 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a  ( A, B );.**.*/.
1fcd0 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
1fce0 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
1fcf0 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38  8)((*(A)<(u8)0x8
1fd00 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41  0)?((B)=(u32)*(A
1fd10 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56  )),1:sqlite3GetV
1fd20 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32  arint32((A),(u32
1fd30 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e   *)&(B))).#defin
1fd40 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c  e putVarint32(A,
1fd50 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75  B)  \.  (u8)(((u
1fd60 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30  32)(B)<(u32)0x80
1fd70 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65  )?(*(A)=(unsigne
1fd80 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a  d char)(B)),1:\.
1fd90 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
1fda0 6e 74 33 32 28 28 41 29 2c 28 42 29 29 29 0a 23  nt32((A),(B))).#
1fdb0 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
1fdc0 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61      sqlite3GetVa
1fdd0 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74  rint.#define put
1fde0 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
1fdf0 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e  3PutVarint...con
1fe00 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
1fe10 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
1fe20 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a  (Vdbe *, Index *
1fe30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
1fe40 61 62 6c 65 41 66 66 69 6e 69 74 79 53 74 72 28  ableAffinityStr(
1fe50 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29  Vdbe *, Table *)
1fe60 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f  ;.char sqlite3Co
1fe70 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78  mpareAffinity(Ex
1fe80 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
1fe90 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  aff2);.int sqlit
1fea0 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f  e3IndexAffinityO
1feb0 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  k(Expr *pExpr, c
1fec0 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79  har idx_affinity
1fed0 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45  );.char sqlite3E
1fee0 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72  xprAffinity(Expr
1fef0 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71   *pExpr);.int sq
1ff00 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73  lite3Atoi64(cons
1ff10 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69  t char*, i64*, i
1ff20 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  nt, u8);.void sq
1ff30 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74  lite3Error(sqlit
1ff40 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
1ff50 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64  char*,...);.void
1ff60 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c   *sqlite3HexToBl
1ff70 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  ob(sqlite3*, con
1ff80 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
1ff90 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65  n);.u8 sqlite3He
1ffa0 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69  xToInt(int h);.i
1ffb0 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72  nt sqlite3TwoPar
1ffc0 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54  tName(Parse *, T
1ffd0 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  oken *, Token *,
1ffe0 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66   Token **);..#if
1fff0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
20000 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
20010 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
20020 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28  | \.    defined(
20030 53 51 4c 49 54 45 5f 44 45 42 55 47 5f 4f 53 5f  SQLITE_DEBUG_OS_
20040 54 52 41 43 45 29 0a 63 6f 6e 73 74 20 63 68 61  TRACE).const cha
20050 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d  r *sqlite3ErrNam
20060 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  e(int);.#endif..
20070 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
20080 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a  te3ErrStr(int);.
20090 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53  int sqlite3ReadS
200a0 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61  chema(Parse *pPa
200b0 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  rse);.CollSeq *s
200c0 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65  qlite3FindCollSe
200d0 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e  q(sqlite3*,u8 en
200e0 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  c, const char*,i
200f0 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  nt);.CollSeq *sq
20100 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53  lite3LocateCollS
20110 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
20120 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61  , const char*zNa
20130 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  me);.CollSeq *sq
20140 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71  lite3ExprCollSeq
20150 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
20160 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78  Expr *pExpr);.Ex
20170 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
20180 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50  ddCollateToken(P
20190 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
201a0 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78  pr*, Token*);.Ex
201b0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
201c0 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28  ddCollateString(
201d0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e  Parse*,Expr*,con
201e0 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20  st char*);.Expr 
201f0 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70  *sqlite3ExprSkip
20200 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a  Collate(Expr*);.
20210 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
20220 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
20230 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74   CollSeq *);.int
20240 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a   sqlite3CheckObj
20250 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  ectName(Parse *,
20260 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
20270 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
20280 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74  SetChanges(sqlit
20290 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  e3 *, int);.int 
202a0 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
202b0 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
202c0 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69  qlite3SubInt64(i
202d0 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
202e0 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36  lite3MulInt64(i6
202f0 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
20300 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74  ite3AbsInt32(int
20310 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
20320 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45  _ENABLE_8_3_NAME
20330 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  S.void sqlite3Fi
20340 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20  leSuffix3(const 
20350 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23  char*, char*);.#
20360 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
20370 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
20380 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20  (X,Y).#endif.u8 
20390 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
203a0 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  n(const char *z,
203b0 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69  int);..const voi
203c0 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54  d *sqlite3ValueT
203d0 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ext(sqlite3_valu
203e0 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  e*, u8);.int sql
203f0 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73  ite3ValueBytes(s
20400 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
20410 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
20420 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69  ValueSetStr(sqli
20430 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c  te3_value*, int,
20440 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38   const void *,u8
20450 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
20460 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28             void(
20470 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
20480 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
20490 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  e(sqlite3_value*
204a0 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  );.sqlite3_value
204b0 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65   *sqlite3ValueNe
204c0 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68  w(sqlite3 *);.ch
204d0 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36  ar *sqlite3Utf16
204e0 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  to8(sqlite3 *, c
204f0 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
20500 20 75 38 29 3b 0a 23 69 66 64 65 66 20 53 51 4c   u8);.#ifdef SQL
20510 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
20520 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
20530 66 38 74 6f 31 36 28 73 71 6c 69 74 65 33 20 2a  f8to16(sqlite3 *
20540 2c 20 75 38 2c 20 63 68 61 72 20 2a 2c 20 69 6e  , u8, char *, in
20550 74 2c 20 69 6e 74 20 2a 29 3b 0a 23 65 6e 64 69  t, int *);.#endi
20560 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  f.int sqlite3Val
20570 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74  ueFromExpr(sqlit
20580 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38  e3 *, Expr *, u8
20590 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
205a0 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lue **);.void sq
205b0 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
205c0 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f  ffinity(sqlite3_
205d0 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29  value *, u8, u8)
205e0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
205f0 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78  _AMALGAMATION.ex
20600 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
20610 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
20620 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  OpcodeProperty[]
20630 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
20640 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
20650 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
20660 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
20670 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
20680 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d  qlite3CtypeMap[]
20690 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54  ;.extern const T
206a0 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54  oken sqlite3IntT
206b0 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20  okens[];.extern 
206c0 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63  SQLITE_WSD struc
206d0 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20  t Sqlite3Config 
206e0 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65  sqlite3Config;.e
206f0 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
20700 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c   FuncDefHash sql
20710 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69  ite3GlobalFuncti
20720 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ons;.#ifndef SQL
20730 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74  ITE_OMIT_WSD.ext
20740 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50  ern int sqlite3P
20750 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64  endingByte;.#end
20760 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  if.#endif.void s
20770 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
20780 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ved(sqlite3*, in
20790 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
207a0 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65  id sqlite3Reinde
207b0 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  x(Parse*, Token*
207c0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
207d0 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63  sqlite3AlterFunc
207e0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
207f0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65  d sqlite3AlterRe
20800 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a  nameTable(Parse*
20810 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
20820 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
20830 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75  GetToken(const u
20840 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
20850 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  int *);.void sql
20860 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28  ite3NestedParse(
20870 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
20880 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
20890 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
208a0 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
208b0 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
208c0 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c  qlite3CodeSubsel
208d0 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70  ect(Parse *, Exp
208e0 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  r *, int, int);.
208f0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
20900 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53  ctPrep(Parse*, S
20910 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
20920 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ext*);.int sqlit
20930 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28  e3MatchSpanName(
20940 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
20950 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
20960 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
20970 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
20980 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73  ResolveExprNames
20990 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
209a0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
209b0 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74  te3ResolveSelect
209c0 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65  Names(Parse*, Se
209d0 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
209e0 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
209f0 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f  3ResolveOrderGro
20a00 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c  upBy(Parse*, Sel
20a10 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ect*, ExprList*,
20a20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
20a30 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
20a40 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c  nDefault(Vdbe *,
20a50 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
20a60 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20a70 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43  3AlterFinishAddC
20a80 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54  olumn(Parse *, T
20a90 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
20aa0 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41  lite3AlterBeginA
20ab0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
20ac0 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f  , SrcList *);.Co
20ad0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65  llSeq *sqlite3Ge
20ae0 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c  tCollSeq(Parse*,
20af0 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
20b00 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
20b10 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
20b20 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
20b30 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
20b40 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c  3Analyze(Parse*,
20b50 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
20b60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76  ;.int sqlite3Inv
20b70 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42  okeBusyHandler(B
20b80 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e  usyHandler*);.in
20b90 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28  t sqlite3FindDb(
20ba0 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
20bb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
20bc0 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33  ndDbName(sqlite3
20bd0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
20be0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e  );.int sqlite3An
20bf0 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74  alysisLoad(sqlit
20c00 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f  e3*,int iDB);.vo
20c10 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
20c20 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c  IndexSamples(sql
20c30 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76  ite3*,Index*);.v
20c40 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75  oid sqlite3Defau
20c50 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29  ltRowEst(Index*)
20c60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
20c70 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69  gisterLikeFuncti
20c80 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ons(sqlite3*, in
20c90 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  t);.int sqlite3I
20ca0 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71  sLikeFunction(sq
20cb0 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
20cc0 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  *,char*);.void s
20cd0 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c  qlite3MinimumFil
20ce0 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20  eFormat(Parse*, 
20cf0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
20d00 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65  sqlite3SchemaCle
20d10 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65  ar(void *);.Sche
20d20 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d  ma *sqlite3Schem
20d30 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  aGet(sqlite3 *, 
20d40 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71  Btree *);.int sq
20d50 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64  lite3SchemaToInd
20d60 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ex(sqlite3 *db, 
20d70 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e  Schema *);.KeyIn
20d80 66 6f 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78  fo *sqlite3Index
20d90 4b 65 79 69 6e 66 6f 28 50 61 72 73 65 20 2a 2c  Keyinfo(Parse *,
20da0 20 49 6e 64 65 78 20 2a 29 3b 0a 69 6e 74 20 73   Index *);.int s
20db0 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63  qlite3CreateFunc
20dc0 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
20dd0 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69  t char *, int, i
20de0 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76  nt, void *, .  v
20df0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
20e00 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
20e10 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a  ite3_value **),.
20e20 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
20e30 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
20e40 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
20e50 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  ), void (*)(sqli
20e60 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20  te3_context*),. 
20e70 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
20e80 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a  *pDestructor.);.
20e90 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78  int sqlite3ApiEx
20ea0 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  it(sqlite3 *db, 
20eb0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
20ec0 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73  3OpenTempDatabas
20ed0 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69  e(Parse *);..voi
20ee0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
20ef0 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c  mInit(StrAccum*,
20f00 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   char*, int, int
20f10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
20f20 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74  trAccumAppend(St
20f30 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68  rAccum*,const ch
20f40 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ar*,int);.void s
20f50 71 6c 69 74 65 33 41 70 70 65 6e 64 53 70 61 63  qlite3AppendSpac
20f60 65 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 29  e(StrAccum*,int)
20f70 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53  ;.char *sqlite3S
20f80 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74  trAccumFinish(St
20f90 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73  rAccum*);.void s
20fa0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65  qlite3StrAccumRe
20fb0 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  set(StrAccum*);.
20fc0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
20fd0 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63  ctDestInit(Selec
20fe0 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  tDest*,int,int);
20ff0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72  .Expr *sqlite3Cr
21000 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73  eateColumnExpr(s
21010 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73  qlite3 *, SrcLis
21020 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  t *, int, int);.
21030 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
21040 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69 74  kupRestart(sqlit
21050 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f  e3_backup *);.vo
21060 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
21070 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62  Update(sqlite3_b
21080 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63  ackup *, Pgno, c
21090 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 2f 2a 0a  onst u8 *);../*.
210a0 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
210b0 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65   to the LEMON-ge
210c0 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a  nerated parser.*
210d0 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  /.void *sqlite3P
210e0 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a  arserAlloc(void*
210f0 28 2a 29 28 73 69 7a 65 5f 74 29 29 3b 0a 76 6f  (*)(size_t));.vo
21100 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
21110 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
21120 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
21130 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28  d sqlite3Parser(
21140 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  void*, int, Toke
21150 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  n, Parse*);.#ifd
21160 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
21170 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71  CKDEPTH.  int sq
21180 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b  lite3ParserStack
21190 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e  Peak(void*);.#en
211a0 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
211b0 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69  3AutoLoadExtensi
211c0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
211d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
211e0 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
211f0 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
21200 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
21210 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65  sqlite3*);.#else
21220 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21230 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
21240 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (X).#endif..#ifn
21250 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21260 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76  SHARED_CACHE.  v
21270 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
21280 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e  Lock(Parse *, in
21290 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73  t, int, u8, cons
212a0 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65  t char *);.#else
212b0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
212c0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c  e3TableLock(v,w,
212d0 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23  x,y,z).#endif..#
212e0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
212f0 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  T.  int sqlite3U
21300 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20  tf8To8(unsigned 
21310 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
21320 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
21330 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
21340 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
21350 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20  3VtabClear(Y).# 
21360 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
21370 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c  tabSync(X,Y) SQL
21380 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
21390 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
213a0 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  back(X).#  defin
213b0 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  e sqlite3VtabCom
213c0 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  mit(X).#  define
213d0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
213e0 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69  nc(db) 0.#  defi
213f0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  ne sqlite3VtabLo
21400 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65  ck(X) .#  define
21410 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
21420 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
21430 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
21440 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69  kList(X).#  defi
21450 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  ne sqlite3VtabSa
21460 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29  vepoint(X, Y, Z)
21470 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
21480 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56  fine sqlite3GetV
21490 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54  Table(X,Y)  ((VT
214a0 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20  able*)0).#else. 
214b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
214c0 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20  abClear(sqlite3 
214d0 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  *db, Table*);.  
214e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
214f0 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69  bDisconnect(sqli
21500 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a  te3 *db, Table *
21510 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  p);.   int sqlit
21520 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74  e3VtabSync(sqlit
21530 65 33 20 2a 64 62 2c 20 63 68 61 72 20 2a 2a 29  e3 *db, char **)
21540 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
21550 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c  VtabRollback(sql
21560 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e  ite3 *db);.   in
21570 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  t sqlite3VtabCom
21580 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29  mit(sqlite3 *db)
21590 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
215a0 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65  3VtabLock(VTable
215b0 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
215c0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56  ite3VtabUnlock(V
215d0 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
215e0 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
215f0 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a  ockList(sqlite3*
21600 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
21610 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73  3VtabSavepoint(s
21620 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69  qlite3 *, int, i
21630 6e 74 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a  nt);.   VTable *
21640 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
21650 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
21660 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  *);.#  define sq
21670 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
21680 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61  db) ((db)->nVTra
21690 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56  ns>0 && (db)->aV
216a0 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66  Trans==0).#endif
216b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
216c0 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61  bMakeWritable(Pa
216d0 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f  rse*,Table*);.vo
216e0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  id sqlite3VtabBe
216f0 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
21700 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
21710 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76   Token*, int);.v
21720 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46  oid sqlite3VtabF
21730 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65  inishParse(Parse
21740 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
21750 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49   sqlite3VtabArgI
21760 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  nit(Parse*);.voi
21770 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
21780 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54  Extend(Parse*, T
21790 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
217a0 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
217b0 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  e(sqlite3*, int,
217c0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
217d0 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  har **);.int sql
217e0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e  ite3VtabCallConn
217f0 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ect(Parse*, Tabl
21800 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
21810 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
21820 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
21830 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
21840 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  t sqlite3VtabBeg
21850 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54  in(sqlite3 *, VT
21860 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66  able *);.FuncDef
21870 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65   *sqlite3VtabOve
21880 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71  rloadFunction(sq
21890 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a  lite3 *,FuncDef*
218a0 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72  , int nArg, Expr
218b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
218c0 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28  InvalidFunction(
218d0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
218e0 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
218f0 75 65 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ue**);.int sqlit
21900 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49  e3VdbeParameterI
21910 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73  ndex(Vdbe*, cons
21920 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  t char*, int);.i
21930 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66  nt sqlite3Transf
21940 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74  erBindings(sqlit
21950 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74  e3_stmt *, sqlit
21960 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 69 6e 74 20  e3_stmt *);.int 
21970 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
21980 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71  (Vdbe*);.void sq
21990 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68 65  lite3ExprListChe
219a0 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c  ckLength(Parse*,
219b0 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
219c0 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65  t char*);.CollSe
219d0 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79  q *sqlite3Binary
219e0 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50  CompareCollSeq(P
219f0 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
21a00 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  Expr *);.int sql
21a10 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79  ite3TempInMemory
21a20 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29  (const sqlite3*)
21a30 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ;.const char *sq
21a40 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
21a50 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64  name(int);.#ifnd
21a60 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
21a70 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  AL.  int sqlite3
21a80 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74  Checkpoint(sqlit
21a90 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
21aa0 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e  nt*, int*);.  in
21ab0 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61  t sqlite3WalDefa
21ac0 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71  ultHook(void*,sq
21ad0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
21ae0 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  r*,int);.#endif.
21af0 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73  ./* Declarations
21b00 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69   for functions i
21b10 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66  n fkey.c. All of
21b20 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61   these are repla
21b30 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20  ced by.** no-op 
21b40 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46  macros if OMIT_F
21b50 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65  OREIGN_KEY is de
21b60 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63  fined. In this c
21b70 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a  ase no foreign.*
21b80 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c  * key functional
21b90 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ity is available
21ba0 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45  . If OMIT_TRIGGE
21bb0 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74  R is defined but
21bc0 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  .** OMIT_FOREIGN
21bd0 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c  _KEY is not, onl
21be0 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75  y some of the fu
21bf0 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f  nctions are no-o
21c00 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20  ped. In.** this 
21c10 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  case foreign key
21c20 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75  s are parsed, bu
21c30 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74  t no other funct
21c40 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20  ionality is .** 
21c50 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63  provided (enforc
21c60 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73  ement of FK cons
21c70 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73  traints requires
21c80 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75   the triggers su
21c90 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69  b-system)..*/.#i
21ca0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
21cb0 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
21cc0 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EY) && !defined(
21cd0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
21ce0 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  GER).  void sqli
21cf0 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65  te3FkCheck(Parse
21d00 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
21d10 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
21d20 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
21d30 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20  Parse*, SrcList 
21d40 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f  *, Table*);.  vo
21d50 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  id sqlite3FkActi
21d60 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ons(Parse*, Tabl
21d70 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
21d80 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
21d90 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
21da0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
21db0 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
21dc0 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
21dd0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
21de0 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
21df0 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
21e00 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
21e10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
21e20 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 29  Actions(a,b,c,d)
21e30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
21e40 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c  e3FkCheck(a,b,c,
21e50 64 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  d).  #define sql
21e60 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
21e70 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65  a,b,c).  #define
21e80 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
21e90 6b 28 61 2c 62 29 20 20 20 20 20 20 30 0a 20 20  k(a,b)      0.  
21ea0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
21eb0 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c  kRequired(a,b,c,
21ec0 64 29 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e  d) 0.#endif.#ifn
21ed0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21ee0 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
21ef0 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
21f00 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
21f10 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
21f20 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
21f30 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
21f40 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
21f50 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
21f60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
21f70 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
21f80 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
21f90 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
21fa0 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
21fb0 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
21fc0 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
21fd0 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
21fe0 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
21ff0 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
22000 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
22010 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
22020 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
22030 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
22040 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
22050 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
22060 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
22070 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
22080 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
22090 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
220a0 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
220b0 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
220c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
220d0 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73  ILTIN_TEST.** is
220e0 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f   not defined..*/
220f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
22100 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
22110 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
22120 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
22130 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20  c(void);.  void 
22140 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
22150 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65  Malloc(void);.#e
22160 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
22170 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
22180 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69  Malloc().  #defi
22190 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  ne sqlite3EndBen
221a0 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64  ignMalloc().#end
221b0 69 66 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  if..#define IN_I
221c0 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20  NDEX_ROWID      
221d0 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 49       1.#define I
221e0 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20  N_INDEX_EPH     
221f0 20 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e          2.#defin
22200 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
22210 5f 41 53 43 20 20 20 20 20 20 20 33 0a 23 64 65  _ASC       3.#de
22220 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
22230 44 45 58 5f 44 45 53 43 20 20 20 20 20 20 34 0a  DEX_DESC      4.
22240 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49  int sqlite3FindI
22250 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20  nIndex(Parse *, 
22260 45 78 70 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a  Expr *, int*);..
22270 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
22280 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54  ABLE_ATOMIC_WRIT
22290 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  E.  int sqlite3J
222a0 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
222b0 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
222c0 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
222d0 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  file *, int, int
222e0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
222f0 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69  JournalSize(sqli
22300 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e  te3_vfs *);.  in
22310 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
22320 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66  Create(sqlite3_f
22330 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ile *);.  int sq
22340 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73  lite3JournalExis
22350 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  ts(sqlite3_file 
22360 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  *p);.#else.  #de
22370 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
22380 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28  nalSize(pVfs) ((
22390 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29  pVfs)->szOsFile)
223a0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
223b0 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28  e3JournalExists(
223c0 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  p) 1.#endif..voi
223d0 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  d sqlite3MemJour
223e0 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
223f0 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  file *);.int sql
22400 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69  ite3MemJournalSi
22410 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ze(void);.int sq
22420 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61  lite3IsMemJourna
22430 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  l(sqlite3_file *
22440 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  );..#if SQLITE_M
22450 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
22460 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
22470 70 72 53 65 74 48 65 69 67 68 74 28 50 61 72 73  prSetHeight(Pars
22480 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
22490 2a 70 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  *p);.  int sqlit
224a0 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
224b0 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20  ht(Select *);.  
224c0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
224d0 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65  heckHeight(Parse
224e0 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  *, int);.#else. 
224f0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22500 45 78 70 72 53 65 74 48 65 69 67 68 74 28 78 2c  ExprSetHeight(x,
22510 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  y).  #define sql
22520 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
22530 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66  ight(x) 0.  #def
22540 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
22550 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a  heckHeight(x,y).
22560 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69  #endif..u32 sqli
22570 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73  te3Get4byte(cons
22580 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  t u8*);.void sql
22590 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a  ite3Put4byte(u8*
225a0 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20  , u32);..#ifdef 
225b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
225c0 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f  LOCK_NOTIFY.  vo
225d0 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
225e0 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69  tionBlocked(sqli
225f0 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  te3 *, sqlite3 *
22600 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
22610 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
22620 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ked(sqlite3 *db)
22630 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
22640 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
22650 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23  (sqlite3 *db);.#
22660 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
22670 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
22680 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23  Blocked(x,y).  #
22690 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
226a0 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
226b0 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  (x).  #define sq
226c0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
226d0 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a  losed(x).#endif.
226e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
226f0 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
22700 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46  te3ParserTrace(F
22710 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23  ILE*, char *);.#
22720 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
22730 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
22740 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73  E IOTRACE exists
22750 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c   then the global
22760 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c   variable.** sql
22770 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61  ite3IoTrace is a
22780 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72   pointer to a pr
22790 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e  intf-like routin
227a0 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69  e used to.** pri
227b0 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d  nt I/O tracing m
227c0 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66  essages. .*/.#if
227d0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
227e0 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69  E_IOTRACE.# defi
227f0 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69  ne IOTRACE(A)  i
22800 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  f( sqlite3IoTrac
22810 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72  e ){ sqlite3IoTr
22820 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20  ace A; }.  void 
22830 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
22840 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51  ceSql(Vdbe*);.SQ
22850 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64  LITE_EXTERN void
22860 20 28 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63   (*sqlite3IoTrac
22870 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
22880 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
22890 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
228a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
228b0 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
228c0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
228d0 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72  hese routines ar
228e0 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  e available for 
228f0 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67  the mem2.c debug
22900 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
22910 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  cator.** only.  
22920 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f  They are used to
22930 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66   verify that dif
22940 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f  ferent "types" o
22950 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f  f memory.** allo
22960 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70  cations are prop
22970 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20  erly tracked by 
22980 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a  the system..**.*
22990 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
229a0 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20  gSetType() sets 
229b0 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e  the "type" of an
229c0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f   allocation to o
229d0 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d  ne of.** the MEM
229e0 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65  TYPE_* macros de
229f0 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68  fined below.  Th
22a00 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61  e type must be a
22a10 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a   bitmask with.**
22a20 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65   a single bit se
22a30 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  t..**.** sqlite3
22a40 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
22a50 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
22a60 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74  f any of the bit
22a70 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
22a80 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
22a90 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
22aa0 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
22ab0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
22ac0 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69  tType()..** sqli
22ad0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
22ae0 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64  pe() is intended
22af0 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
22b00 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
22b10 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  nts..**.** sqlit
22b20 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
22b30 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
22b40 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62  if none of the b
22b50 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
22b60 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
22b70 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
22b80 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
22b90 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
22ba0 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a  SetType()..**.**
22bb0 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73   Perhaps the mos
22bc0 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e  t important poin
22bd0 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65  t is the differe
22be0 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54  nce between MEMT
22bf0 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20  YPE_HEAP.** and 
22c00 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
22c10 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61  E.  If an alloca
22c20 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f  tion is MEMTYPE_
22c30 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20  LOOKASIDE, that 
22c40 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68  means.** it migh
22c50 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  t have been allo
22c60 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  cated by lookasi
22c70 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61  de, except the a
22c80 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a  llocation was.**
22c90 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f   too large or lo
22ca0 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65  okaside was alre
22cb0 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73  ady full.  It is
22cc0 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65   important to ve
22cd0 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c  rify.** that all
22ce0 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ocations that mi
22cf0 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61  ght have been sa
22d00 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61  tisfied by looka
22d10 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  side are not.** 
22d20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e  passed back to n
22d30 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
22d40 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41  e() routines.  A
22d50 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74  sserts such as t
22d60 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62  he.** example ab
22d70 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f  ove are placed o
22d80 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  n the non-lookas
22d90 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
22da0 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  nes to verify.**
22db0 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
22dc0 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  . .**.** All of 
22dd0 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f  this is no-op fo
22de0 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62  r a production b
22df0 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63  uild.  It only c
22e00 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61  omes into.** pla
22e10 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54  y when the SQLIT
22e20 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69  E_MEMDEBUG compi
22e30 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
22e40 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  s used..*/.#ifde
22e50 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
22e60 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
22e70 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
22e80 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
22e90 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
22ea0 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  HasType(void*,u8
22eb0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
22ec0 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76  MemdebugNoType(v
22ed0 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a  oid*,u8);.#else.
22ee0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22ef0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
22f00 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  X,Y)  /* no-op *
22f10 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  /.# define sqlit
22f20 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
22f30 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69  e(X,Y)  1.# defi
22f40 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
22f50 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20  ugNoType(X,Y)   
22f60 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65  1.#endif.#define
22f70 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20   MEMTYPE_HEAP   
22f80 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e      0x01  /* Gen
22f90 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61  eral heap alloca
22fa0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
22fb0 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
22fc0 44 45 20 20 30 78 30 32 20 20 2f 2a 20 4d 69 67  DE  0x02  /* Mig
22fd0 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f  ht have been loo
22fe0 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 20 2a 2f  kaside memory */
22ff0 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
23000 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30 34  _SCRATCH    0x04
23010 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c    /* Scratch all
23020 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
23030 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43  ine MEMTYPE_PCAC
23040 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20  HE     0x08  /* 
23050 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63  Page cache alloc
23060 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
23070 65 20 4d 45 4d 54 59 50 45 5f 44 42 20 20 20 20  e MEMTYPE_DB    
23080 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 55 73       0x10  /* Us
23090 65 73 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  es sqlite3DbMall
230a0 6f 63 2c 20 6e 6f 74 20 73 71 6c 69 74 65 5f 6d  oc, not sqlite_m
230b0 61 6c 6c 6f 63 20 2a 2f 0a 0a 23 65 6e 64 69 66  alloc */..#endif
230c0 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48   /* _SQLITEINT_H
230d0 5f 20 2a 2f 0a                                   _ */.