/ Hex Artifact Content
Login

Artifact 55f43f10f165c8c17334e33a11b2d58a557b4a2c:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74  .** Similar is t
0540: 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  rue for Mac OS X
0550: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
0560: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20  upported on Mac 
0570: 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72  OS X 9 and later
0580: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
0590: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
05a0: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f  # define _LARGE_
05b0: 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69  FILE       1.# i
05c0: 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53  fndef _FILE_OFFS
05d0: 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69  ET_BITS.#   defi
05e0: 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ne _FILE_OFFSET_
05f0: 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a  BITS 64.# endif.
0600: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0610: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0620: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75  dif../*.** Inclu
0630: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  de the configura
0640: 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70  tion header outp
0650: 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65  ut by 'configure
0660: 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67  ' if we're using
0670: 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66   the.** autoconf
0680: 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a  -based build.*/.
0690: 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c  #ifdef _HAVE_SQL
06a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e  ITE_CONFIG_H.#in
06b0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22  clude "config.h"
06c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
06d0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
06e0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
06f0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
0700: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
0710: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
0720: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
0730: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
0740: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
0750: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
0760: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
0770: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
0780: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
0790: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
07a0: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
07b0: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
07c0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
07d0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
07e0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
07f0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
0800: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
0810: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
0820: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
0830: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
0840: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
0850: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
0860: 2e 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f 47  .. */.#ifndef _G
0870: 4e 55 5f 53 4f 55 52 43 45 0a 23 20 64 65 66 69  NU_SOURCE.# defi
0880: 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ne _GNU_SOURCE.#
0890: 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
08a0: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
08b0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 42 53 44  && !defined(_BSD
08c0: 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e  _SOURCE).# defin
08d0: 65 20 5f 42 53 44 5f 53 4f 55 52 43 45 0a 23 65  e _BSD_SOURCE.#e
08e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
08f0: 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65 61  ude standard hea
0900: 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65 63  der files as nec
0910: 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66  essary.*/.#ifdef
0920: 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23   HAVE_STDINT_H.#
0930: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e  include <stdint.
0940: 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  h>.#endif.#ifdef
0950: 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f 48   HAVE_INTTYPES_H
0960: 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79  .#include <intty
0970: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  pes.h>.#endif../
0980: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
0990: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
09a0: 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74  ed to cast point
09b0: 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20  ers to integers 
09c0: 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20  and.** integers 
09d0: 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68  to pointers.  Th
09e0: 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69  e way you do thi
09f0: 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e  s varies from on
0a00: 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  e compiler.** to
0a10: 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65   the next, so we
0a20: 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20   have developed 
0a30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  the following se
0a40: 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65  t of #if stateme
0a50: 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61  nts.** to genera
0a60: 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d  te appropriate m
0a70: 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65  acros for a wide
0a80: 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c   range of compil
0a90: 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ers..**.** The c
0aa0: 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77 61  orrect "ANSI" wa
0ab0: 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20  y to do this is 
0ac0: 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70 74  to use the intpt
0ad0: 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55 6e  r_t type. .** Un
0ae0: 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68 61  fortunately, tha
0af0: 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f 74  t typedef is not
0b00: 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c   available on al
0b10: 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a  l compilers, or.
0b20: 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61 69  ** if it is avai
0b30: 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69 72  lable, it requir
0b40: 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f  es an #include o
0b50: 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64 65  f specific heade
0b60: 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79 20  rs.** that vary 
0b70: 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65  from one machine
0b80: 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a   to the next..**
0b90: 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36 30  .** Ticket #3860
0ba0: 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d  :  The llvm-gcc-
0bb0: 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f  4.2 compiler fro
0bc0: 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f  m Apple chokes o
0bd0: 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64 2a  n.** the ((void*
0be0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0bf0: 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75 74   construct.  But
0c00: 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20   MSVC chokes on 
0c10: 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a  ((void*)(X))..**
0c20: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 64   So we have to d
0c30: 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f 73  efine the macros
0c40: 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77 61   in different wa
0c50: 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ys depending on 
0c60: 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e  the.** compiler.
0c70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0c80: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0c90: 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65 20  )  /* This case 
0ca0: 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20  should work for 
0cb0: 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  GCC */.# define 
0cc0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
0cd0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 5f  R(X)  ((void*)(_
0ce0: 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29  _PTRDIFF_TYPE__)
0cf0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
0d00: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
0d10: 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54 52  X)  ((int)(__PTR
0d20: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
0d30: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
0d40: 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20 20  __GNUC__)       
0d50: 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d  /* Works for com
0d60: 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68 61  pilers other tha
0d70: 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69  n LLVM */.# defi
0d80: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
0d90: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
0da0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0dc0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
0dd0: 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29 58  ((int)(((char*)X
0de0: 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65 6c  )-(char*)0)).#el
0df0: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f  if defined(HAVE_
0e00: 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55  STDINT_H)   /* U
0e10: 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66 20  se this case if 
0e20: 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65 61  we have ANSI hea
0e30: 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  ders */.# define
0e40: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0e50: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0e60: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 20  intptr_t)(X)).# 
0e70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0e80: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0e90: 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29  nt)(intptr_t)(X)
0ea0: 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20 20  ).#else         
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ec0: 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61 20   /* Generates a 
0ed0: 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69 74  warning - but it
0ee0: 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f   always works */
0ef0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0f00: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
0f10: 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20 64  ((void*)(X)).# d
0f20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
0f30: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
0f40: 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  t)(X)).#endif../
0f50: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
0f60: 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f  THREADSAFE macro
0f70: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
0f80: 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a   as 0, 1, or 2..
0f90: 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78  ** 0 means mutex
0fa0: 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74  es are permanent
0fb0: 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74  ly disable and t
0fc0: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65  he library is ne
0fd0: 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66  ver.** threadsaf
0fe0: 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20  e.  1 means the 
0ff0: 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61  library is seria
1000: 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74  lized which is t
1010: 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65  he highest.** le
1020: 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66  vel of threadsaf
1030: 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68  ety.  2 means th
1040: 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c  e library is mul
1050: 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c  tithreaded - mul
1060: 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73  tiple.** threads
1070: 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20   can use SQLite 
1080: 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77  as long as no tw
1090: 6f 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f  o threads try to
10a0: 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a   use the same.**
10b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
10c0: 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65  tion at the same
10d0: 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64   time..**.** Old
10e0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
10f0: 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70  QLite used an op
1100: 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46  tional THREADSAF
1110: 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73  E macro..** We s
1120: 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20  upport that for 
1130: 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21  legacy..*/.#if !
1140: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1150: 48 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20  HREADSAFE).# if 
1160: 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41  defined(THREADSA
1170: 46 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  FE).#   define S
1180: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
1190: 20 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c   THREADSAFE.# el
11a0: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
11b0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
11c0: 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37  1 /* IMP: R-0727
11d0: 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64  2-22309 */.# end
11e0: 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  if.#endif../*.**
11f0: 20 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77   Powersafe overw
1200: 72 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65  rite is on by de
1210: 66 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20  fault.  But can 
1220: 62 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73  be turned off us
1230: 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c  ing.** the -DSQL
1240: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1250: 45 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e  ERWRITE=0 comman
1260: 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a  d-line option..*
1270: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1280: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1290: 52 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51  RITE.# define SQ
12a0: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
12b0: 56 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69  VERWRITE 1.#endi
12c0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  f../*.** The SQL
12d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
12e0: 54 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73 74  TATUS macro must
12f0: 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 65   be defined as e
1300: 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a  ither 0 or 1..**
1310: 20 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20 77   It determines w
1320: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
1330: 65 20 66 65 61 74 75 72 65 73 20 72 65 6c 61 74  e features relat
1340: 65 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54 45  ed to .** SQLITE
1350: 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55  _CONFIG_MEMSTATU
1360: 53 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  S are available 
1370: 62 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e 6f  by default or no
1380: 74 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63 61  t. This value ca
1390: 6e 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64 64  n.** be overridd
13a0: 65 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  en at runtime us
13b0: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
13c0: 63 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a 2f  config() API..*/
13d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
13e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
13f0: 53 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65  STATUS).# define
1400: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
1410: 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64  MEMSTATUS 1.#end
1420: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c  if../*.** Exactl
1430: 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
1440: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75  lowing macros mu
1450: 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e  st be defined in
1460: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65   order to.** spe
1470: 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72  cify which memor
1480: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62  y allocation sub
1490: 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a  system to use..*
14a0: 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  *.**     SQLITE_
14b0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20  SYSTEM_MALLOC   
14c0: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f         // Use no
14d0: 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c  rmal system mall
14e0: 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49  oc().**     SQLI
14f0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20  TE_WIN32_MALLOC 
1500: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1510: 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65   Win32 native he
1520: 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51  ap API.**     SQ
1530: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55              // U
1550: 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63 61  se a stub alloca
1560: 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73 20  tor that always 
1570: 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c  fails.**     SQL
1580: 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20  ITE_MEMDEBUG    
1590: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65             // De
15a0: 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20  bugging version 
15b0: 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63  of system malloc
15c0: 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64  ().**.** On Wind
15d0: 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c 49  ows, if the SQLI
15e0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f  TE_WIN32_MALLOC_
15f0: 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20 69  VALIDATE macro i
1600: 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74 68  s defined and th
1610: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d 61  e.** assert() ma
1620: 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c 20  cro is enabled, 
1630: 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74  each call into t
1640: 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  he Win32 native 
1650: 68 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a 2a  heap subsystem.*
1660: 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65 61  * will cause Hea
1670: 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65 20  pValidate to be 
1680: 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61 70  called.  If heap
1690: 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75   validation shou
16a0: 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61  ld fail, an.** a
16b0: 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65  ssertion will be
16c0: 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a   triggered..**.*
16d0: 2a 20 28 48 69 73 74 6f 72 69 63 61 6c 20 6e 6f  * (Historical no
16e0: 74 65 3a 20 20 54 68 65 72 65 20 75 73 65 64 20  te:  There used 
16f0: 74 6f 20 62 65 20 73 65 76 65 72 61 6c 20 6f 74  to be several ot
1700: 68 65 72 20 6f 70 74 69 6f 6e 73 2c 20 62 75 74  her options, but
1710: 20 77 65 27 76 65 0a 2a 2a 20 70 61 72 65 64 20   we've.** pared 
1720: 69 74 20 64 6f 77 6e 20 74 6f 20 6a 75 73 74 20  it down to just 
1730: 74 68 65 73 65 20 74 68 72 65 65 2e 29 0a 2a 2a  these three.).**
1740: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
1750: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
1760: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
1770: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1780: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
1790: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
17a0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
17b0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
17c0: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
17d0: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
17e0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
17f0: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
1800: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
1810: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
1820: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
1830: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
1840: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
1850: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
1860: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
1870: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
1880: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
1890: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
18a0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
18b0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
18c0: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
18d0: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
18e0: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
18f0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1900: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1910: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
1920: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
1930: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
1940: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
1950: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
1960: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
1970: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
1980: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
1990: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
19a0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
19b0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
19c0: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
19d0: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
19e0: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
19f0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1a00: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
1a10: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
1a20: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
1a30: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
1a40: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
1a50: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
1a60: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
1a70: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
1a80: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
1a90: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
1aa0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
1ab0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
1ac0: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
1ad0: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
1ae0: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
1af0: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
1b00: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
1b10: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
1b20: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
1b30: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
1b40: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
1b50: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
1b60: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
1b70: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
1b80: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
1b90: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
1ba0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
1bb0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
1bc0: 2f 2a 0a 2a 2a 20 54 68 65 20 54 43 4c 20 68 65  /*.** The TCL he
1bd0: 61 64 65 72 73 20 61 72 65 20 6f 6e 6c 79 20 6e  aders are only n
1be0: 65 65 64 65 64 20 77 68 65 6e 20 63 6f 6d 70 69  eeded when compi
1bf0: 6c 69 6e 67 20 74 68 65 20 54 43 4c 20 62 69 6e  ling the TCL bin
1c00: 64 69 6e 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  dings..*/.#if de
1c10: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 43 4c  fined(SQLITE_TCL
1c20: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 54 43 4c  ) || defined(TCL
1c30: 53 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 74  SH).# include <t
1c40: 63 6c 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  cl.h>.#endif../*
1c50: 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53  .** NDEBUG and S
1c60: 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20  QLITE_DEBUG are 
1c70: 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73  opposites.  It s
1c80: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20  hould always be 
1c90: 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  true that.** def
1ca0: 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64  ined(NDEBUG)==!d
1cb0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1cc0: 42 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69  BUG).  If this i
1cd0: 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
1ce0: 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74  true,.** make it
1cf0: 20 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e   true by definin
1d00: 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20  g or undefining 
1d10: 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65  NDEBUG..**.** Se
1d20: 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b  tting NDEBUG mak
1d30: 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c  es the code smal
1d40: 6c 65 72 20 61 6e 64 20 72 75 6e 20 66 61 73 74  ler and run fast
1d50: 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20  er by disabling 
1d60: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 61 73  the.** number as
1d70: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
1d80: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20  s in the code.  
1d90: 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64  So we want the d
1da0: 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a  efault action.**
1db0: 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55   to be for NDEBU
1dc0: 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20  G to be set and 
1dd0: 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64  NDEBUG to be und
1de0: 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53  efined only if S
1df0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69  QLITE_DEBUG.** i
1e00: 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45  s set.  Thus NDE
1e10: 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f  BUG becomes an o
1e20: 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61  pt-in rather tha
1e30: 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20  n an opt-out.** 
1e40: 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20  feature..*/.#if 
1e50: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
1e60: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1e70: 49 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65  ITE_DEBUG) .# de
1e80: 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65  fine NDEBUG 1.#e
1e90: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
1ea0: 28 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69  (NDEBUG) && defi
1eb0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
1ec0: 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47  ).# undef NDEBUG
1ed0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
1ee0: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
1ef0: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61  cro is used to a
1f00: 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74  id in coverage t
1f10: 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a  esting.  When .*
1f20: 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  * doing coverage
1f30: 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f   testing, the co
1f40: 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74  ndition inside t
1f50: 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a  he argument to.*
1f60: 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73  * testcase() mus
1f70: 74 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62  t be evaluated b
1f80: 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c  oth true and fal
1f90: 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  se in order to.*
1fa0: 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63  * get full branc
1fb0: 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65  h coverage.  The
1fc0: 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72   testcase() macr
1fd0: 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a  o is inserted.**
1fe0: 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20   to help ensure 
1ff0: 61 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f  adequate test co
2000: 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73  verage in places
2010: 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a   where simple.**
2020: 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73   condition/decis
2030: 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20  ion coverage is 
2040: 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72  inadequate.  For
2050: 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61   example, testca
2060: 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75  se().** can be u
2070: 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  sed to make sure
2080: 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73   boundary values
2090: 20 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f   are tested.  Fo
20a0: 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73  r.** bitmask tes
20b0: 74 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63  ts, testcase() c
20c0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61  an be used to ma
20d0: 6b 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74  ke sure each bit
20e0: 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61  .** is significa
20f0: 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c  nt and used at l
2100: 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73  east once.  On s
2110: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73  witch statements
2120: 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70  .** where multip
2130: 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74  le cases go to t
2140: 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66  he same block of
2150: 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28   code, testcase(
2160: 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20  ).** can insure 
2170: 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61  that all cases a
2180: 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a  re evaluated..**
2190: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
21a0: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a  E_COVERAGE_TEST.
21b0: 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
21c0: 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64  verage(int);.# d
21d0: 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58  efine testcase(X
21e0: 29 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69  )  if( X ){ sqli
21f0: 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49  te3Coverage(__LI
2200: 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23  NE__); }.#else.#
2210: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
2220: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2230: 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d  * The TESTONLY m
2240: 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20  acro is used to 
2250: 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65  enclose variable
2260: 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72   declarations or
2270: 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f  .** other bits o
2280: 66 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20  f code that are 
2290: 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72  needed to suppor
22a0: 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a  t the arguments.
22b0: 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61  ** within testca
22c0: 73 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28  se() and assert(
22d0: 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66  ) macros..*/.#if
22e0: 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47   !defined(NDEBUG
22f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
2300: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
2310: 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  T).# define TEST
2320: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
2330: 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e  .# define TESTON
2340: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
2350: 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65  .** Sometimes we
2360: 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d   need a small am
2370: 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63  ount of code suc
2380: 68 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20  h as a variable 
2390: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a  initialization.*
23a0: 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61  * to setup for a
23b0: 20 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20   later assert() 
23c0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64  statement.  We d
23d0: 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20  o not want this 
23e0: 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61  code to.** appea
23f0: 72 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20  r when assert() 
2400: 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68  is disabled.  Th
2410: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
2420: 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a  o is therefore.*
2430: 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69  * used to contai
2440: 6e 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64  n that setup cod
2450: 65 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63  e.  The "VVA" ac
2460: 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72  ronym stands for
2470: 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f  .** "Verificatio
2480: 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61  n, Validation, a
2490: 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e  nd Accreditation
24a0: 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  ".  In other wor
24b0: 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20  ds, the.** code 
24c0: 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28  within VVA_ONLY(
24d0: 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20  ) will only run 
24e0: 64 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74  during verificat
24f0: 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a  ion processes..*
2500: 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  /.#ifndef NDEBUG
2510: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
2520: 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23  LY(X)  X.#else.#
2530: 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59   define VVA_ONLY
2540: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2550: 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64  * The ALWAYS and
2560: 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75   NEVER macros su
2570: 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65  rround boolean e
2580: 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68  xpressions which
2590: 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65   .** are intende
25a0: 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74  d to always be t
25b0: 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65  rue or false, re
25c0: 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63  spectively.  Suc
25d0: 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73  h.** expressions
25e0: 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65   could be omitte
25f0: 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20  d from the code 
2600: 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74  completely.  But
2610: 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63   they.** are inc
2620: 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63  luded in a few c
2630: 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  ases in order to
2640: 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73   enhance the res
2650: 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51  ilience.** of SQ
2660: 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74  Lite to unexpect
2670: 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f  ed behavior - to
2680: 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22   make the code "
2690: 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a  self-healing".**
26a0: 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61   or "ductile" ra
26b0: 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20  ther than being 
26c0: 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72  "brittle" and cr
26d0: 61 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69  ashing at the fi
26e0: 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75  rst.** hint of u
26f0: 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f  nplanned behavio
2700: 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65  r..**.** In othe
2710: 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20  r words, ALWAYS 
2720: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64  and NEVER are ad
2730: 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76  ded for defensiv
2740: 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  e code..**.** Wh
2750: 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67  en doing coverag
2760: 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53  e testing ALWAYS
2770: 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68   and NEVER are h
2780: 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20  ard-coded to.** 
2790: 62 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  be true and fals
27a0: 65 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e  e so that the un
27b0: 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74  reachable code t
27c0: 68 65 6e 20 73 70 65 63 69 66 79 20 77 69 6c 6c  hen specify will
27d0: 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74  .** not be count
27e0: 65 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63  ed as untested c
27f0: 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ode..*/.#if defi
2800: 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52  ned(SQLITE_COVER
2810: 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69  AGE_TEST).# defi
2820: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
2830: 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e    (1).# define N
2840: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30  EVER(X)       (0
2850: 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
2860: 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  (NDEBUG).# defin
2870: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
2880: 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28   ((X)?1:(assert(
2890: 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0),0)).# define 
28a0: 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28  NEVER(X)       (
28b0: 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31  (X)?(assert(0),1
28c0: 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ):0).#else.# def
28d0: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
28e0: 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20     (X).# define 
28f0: 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28  NEVER(X)       (
2900: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2910: 20 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f   Return true (no
2920: 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69  n-zero) if the i
2930: 6e 70 75 74 20 69 73 20 61 20 69 6e 74 65 67 65  nput is a intege
2940: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
2950: 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e  rge.** to fit in
2960: 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20   32-bits.  This 
2970: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
2980: 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20  side of various 
2990: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61  testcase().** ma
29a0: 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74  cros to verify t
29b0: 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74  hat we have test
29c0: 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61  ed SQLite for la
29d0: 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74  rge-file support
29e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f  ..*/.#define IS_
29f0: 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58  BIG_INT(X)  (((X
2a00: 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66  )&~(i64)0xffffff
2a10: 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  ff)!=0)../*.** T
2a20: 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c  he macro unlikel
2a30: 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68  y() is a hint th
2a40: 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62  at surrounds a b
2a50: 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73  oolean.** expres
2a60: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75  sion that is usu
2a70: 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63  ally false.  Mac
2a80: 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72  ro likely() surr
2a90: 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65  ounds.** a boole
2aa0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
2ab0: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
2ac0: 75 65 2e 20 20 47 43 43 20 69 73 20 61 62 6c 65  ue.  GCC is able
2ad0: 20 74 6f 0a 2a 2a 20 75 73 65 20 74 68 65 73 65   to.** use these
2ae0: 20 68 69 6e 74 73 20 74 6f 20 67 65 6e 65 72 61   hints to genera
2af0: 74 65 20 62 65 74 74 65 72 20 63 6f 64 65 2c 20  te better code, 
2b00: 73 6f 6d 65 74 69 6d 65 73 2e 0a 2a 2f 0a 23 69  sometimes..*/.#i
2b10: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
2b20: 5f 5f 29 20 26 26 20 30 0a 23 20 64 65 66 69 6e  __) && 0.# defin
2b30: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 5f  e likely(X)    _
2b40: 5f 62 75 69 6c 74 69 6e 5f 65 78 70 65 63 74 28  _builtin_expect(
2b50: 28 58 29 2c 31 29 0a 23 20 64 65 66 69 6e 65 20  (X),1).# define 
2b60: 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 5f 5f 62  unlikely(X)  __b
2b70: 75 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28 58  uiltin_expect((X
2b80: 29 2c 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ),0).#else.# def
2b90: 69 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20  ine likely(X)   
2ba0: 20 21 21 28 58 29 0a 23 20 64 65 66 69 6e 65 20   !!(X).# define 
2bb0: 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 21 21 28  unlikely(X)  !!(
2bc0: 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c  X).#endif..#incl
2bd0: 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a  ude "sqlite3.h".
2be0: 23 69 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68  #include "hash.h
2bf0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73  ".#include "pars
2c00: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73  e.h".#include <s
2c10: 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  tdio.h>.#include
2c20: 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63   <stdlib.h>.#inc
2c30: 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a  lude <string.h>.
2c40: 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74  #include <assert
2c50: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
2c60: 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49  ddef.h>../*.** I
2c70: 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20  f compiling for 
2c80: 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61 74  a processor that
2c90: 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20   lacks floating 
2ca0: 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a  point support,.*
2cb0: 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e 74  * substitute int
2cc0: 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e  eger for floatin
2cd0: 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65  g-point.*/.#ifde
2ce0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
2cf0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64  OATING_POINT.# d
2d00: 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c  efine double sql
2d10: 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69  ite_int64.# defi
2d20: 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f  ne float sqlite_
2d30: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 4c  int64.# define L
2d40: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73  ONGDOUBLE_TYPE s
2d50: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69 66  qlite_int64.# if
2d60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f  ndef SQLITE_BIG_
2d70: 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20 53  DBL.#   define S
2d80: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 28  QLITE_BIG_DBL ((
2d90: 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 31  (sqlite3_int64)1
2da0: 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a 23  )<<50).# endif.#
2db0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f   define SQLITE_O
2dc0: 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e  MIT_DATETIME_FUN
2dd0: 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  CS 1.# define SQ
2de0: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20  LITE_OMIT_TRACE 
2df0: 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  1.# undef SQLITE
2e00: 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34  _MIXED_ENDIAN_64
2e10: 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65  BIT_FLOAT.# unde
2e20: 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53  f SQLITE_HAVE_IS
2e30: 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  NAN.#endif.#ifnd
2e40: 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ef SQLITE_BIG_DB
2e50: 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  L.# define SQLIT
2e60: 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39 29  E_BIG_DBL (1e99)
2e70: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
2e80: 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73 65  MIT_TEMPDB is se
2e90: 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54 45  t to 1 if SQLITE
2ea0: 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20  _OMIT_TEMPDB is 
2eb0: 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a  defined, or 0.**
2ec0: 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76 69   afterward. Havi
2ed0: 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61 6c  ng this macro al
2ee0: 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73 65  lows us to cause
2ef0: 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72 20   the C compiler 
2f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
2f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
2f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
2f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
2f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
2f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
2f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
2f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
2f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
2f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
2fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
2fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
2fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
2fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
2fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
2ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
3000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
3010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
3020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
3030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
3040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
3050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
3060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
3070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
3080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
3090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
30a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
30b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
30c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
30d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
30e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
30f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
3100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
3110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
3120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
3130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
3140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
3150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
3160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
3170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
3180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
3190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
31a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
31b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
31c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
31d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
31e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
31f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
3200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
3220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
3230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
3240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
3250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 20  _TEMP_STORE 1.# 
3280: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45  define SQLITE_TE
3290: 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20 20 2f  MP_STORE_xc 1  /
32a0: 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63  * Exclude from c
32b0: 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66  time.c */.#endif
32c0: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
32d0: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
32e0: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
32f0: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
3300: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
3310: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
3320: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
3330: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
3340: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
3350: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
3360: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
3370: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
3380: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
3390: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
33a0: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
33b0: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
33c0: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
33d0: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
33e0: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
33f0: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
3400: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
3410: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
3420: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
3430: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
3440: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
3450: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
3460: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
3470: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
3480: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
3490: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
34a0: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
34b0: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
34c0: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
34d0: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
34e0: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
34f0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
3500: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
3510: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
3520: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
3530: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
3540: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
3550: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
3560: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
3570: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
3580: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
3590: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
35a0: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
35b0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
35c0: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
35d0: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
35e0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
35f0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
3600: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
3610: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
3620: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
3630: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3640: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
3650: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
3660: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3670: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
3680: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
3690: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
36a0: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
36b0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
36c0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
36d0: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
36e0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
36f0: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
3700: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
3710: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
3720: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
3730: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
3740: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
3750: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
3760: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
3770: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
3780: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
3790: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
37a0: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
37b0: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
37c0: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
37d0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
37e0: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
37f0: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
3800: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
3810: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
3820: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
3830: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
3840: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
3850: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
3860: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
3870: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
3880: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
3890: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
38a0: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
38b0: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
38c0: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
38d0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
38e0: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
38f0: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
3900: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
3910: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3920: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
3930: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
3940: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
3950: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3960: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
3970: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
3980: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
3990: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
39a0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
39b0: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
39c0: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
39d0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
39e0: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
39f0: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
3a00: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
3a10: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
3a20: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
3a30: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
3a40: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
3a50: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
3a60: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
3a70: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
3a80: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
3a90: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
3aa0: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
3ab0: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
3ac0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
3ad0: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
3ae0: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
3af0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
3b00: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
3b10: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
3b20: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
3b30: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
3b40: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
3b50: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
3b60: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
3b70: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
3b80: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
3b90: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
3ba0: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
3bb0: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
3bc0: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
3bd0: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
3be0: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
3bf0: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
3c00: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
3c10: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
3c20: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
3c30: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
3c40: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
3c50: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
3c60: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
3c70: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
3c80: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
3c90: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
3ca0: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
3cb0: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
3cc0: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
3cd0: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
3ce0: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20   the machine is 
3cf0: 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e  big or little en
3d00: 64 69 61 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61 74  dian,.** evaluat
3d10: 65 64 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a  ed at runtime..*
3d20: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
3d30: 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e  AMALGAMATION.con
3d40: 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e  st int sqlite3on
3d50: 65 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74  e = 1;.#else.ext
3d60: 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71  ern const int sq
3d70: 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66  lite3one;.#endif
3d80: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 69 33 38  .#if defined(i38
3d90: 36 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  6) || defined(__
3da0: 69 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e  i386__) || defin
3db0: 65 64 28 5f 4d 5f 49 58 38 36 29 5c 0a 20 20 20  ed(_M_IX86)\.   
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dd0: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 64 65 66            || def
3de0: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c  ined(__x86_64) |
3df0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f  | defined(__x86_
3e00: 36 34 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53  64__).# define S
3e10: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
3e20: 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51     0.# define SQ
3e30: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
3e40: 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 1.# define SQL
3e50: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
3e60: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a   SQLITE_UTF16LE.
3e70: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
3e80: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
3e90: 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73     (*(char *)(&s
3ea0: 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23  qlite3one)==0).#
3eb0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c   define SQLITE_L
3ec0: 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63  ITTLEENDIAN (*(c
3ed0: 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f  har *)(&sqlite3o
3ee0: 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65  ne)==1).# define
3ef0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
3f00: 49 56 45 20 28 53 51 4c 49 54 45 5f 42 49 47 45  IVE (SQLITE_BIGE
3f10: 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46  NDIAN?SQLITE_UTF
3f20: 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31  16BE:SQLITE_UTF1
3f30: 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  6LE).#endif../*.
3f40: 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72  ** Constants for
3f50: 20 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64   the largest and
3f60: 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62   smallest possib
3f70: 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  le 64-bit signed
3f80: 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68   integers..** Th
3f90: 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64  ese macros are d
3fa0: 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20  esigned to work 
3fb0: 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74  correctly on bot
3fc0: 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d  h 32-bit and 64-
3fd0: 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73  bit.** compilers
3fe0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52  ..*/.#define LAR
3ff0: 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66  GEST_INT64  (0xf
4000: 66 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30  fffffff|(((i64)0
4010: 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29  x7fffffff)<<32))
4020: 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53  .#define SMALLES
4030: 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d  T_INT64 (((i64)-
4040: 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54  1) - LARGEST_INT
4050: 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e  64)../* .** Roun
4060: 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f  d up a number to
4070: 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72   the next larger
4080: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20   multiple of 8. 
4090: 20 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a   This is used.**
40a0: 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65   to force 8-byte
40b0: 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34   alignment on 64
40c0: 2d 62 69 74 20 61 72 63 68 69 74 65 63 74 75 72  -bit architectur
40d0: 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  es..*/.#define R
40e0: 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28 28 28  OUND8(x)     (((
40f0: 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a  x)+7)&~7)../*.**
4100: 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74   Round down to t
4110: 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69  he nearest multi
4120: 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66  ple of 8.*/.#def
4130: 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78  ine ROUNDDOWN8(x
4140: 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a  ) ((x)&~7)../*.*
4150: 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
4160: 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61  e pointer X is a
4170: 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62  ligned to an 8-b
4180: 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54  yte boundary.  T
4190: 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20  his.** macro is 
41a0: 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e  used only within
41b0: 20 61 73 73 65 72 74 28 29 20 74 6f 20 76 65 72   assert() to ver
41c0: 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 64  ify that the cod
41d0: 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c  e gets.** all al
41e0: 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74  ignment restrict
41f0: 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a  ions correct..**
4200: 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53  .** Except, if S
4210: 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49  QLITE_4_BYTE_ALI
4220: 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64  GNED_MALLOC is d
4230: 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65  efined, then the
4240: 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d  .** underlying m
4250: 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e  alloc() implemen
4260: 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72  tion might retur
4270: 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67  n us 4-byte alig
4280: 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e  ned.** pointers.
4290: 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20    In that case, 
42a0: 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79  only verify 4-by
42b0: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f  te alignment..*/
42c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34  .#ifdef SQLITE_4
42d0: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
42e0: 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49  LLOC.# define EI
42f0: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
4300: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
4310: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
4320: 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  )&3)==0).#else.#
4330: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
4340: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
4350: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
4360: 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d  - (char*)0)&7)==
4370: 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0).#endif../*.**
4380: 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e   Disable MMAP on
4390: 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65   platforms where
43a0: 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20   it is known to 
43b0: 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20  not work.*/.#if 
43c0: 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53  defined(__OpenBS
43d0: 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D__) || defined(
43e0: 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e  __QNXNTO__).# un
43f0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
4400: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
4410: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
4420: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
4430: 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d  ./*.** Default m
4440: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d  aximum size of m
4450: 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65  emory used by me
4460: 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20  mory-mapped I/O 
4470: 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69  in the VFS.*/.#i
4480: 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23  fdef __APPLE__.#
4490: 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74   include <Target
44a0: 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a  Conditionals.h>.
44b0: 23 20 69 66 20 54 41 52 47 45 54 5f 4f 53 5f 49  # if TARGET_OS_I
44c0: 50 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65 66 20  PHONE.#   undef 
44d0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
44e0: 53 49 5a 45 0a 23 20 20 20 64 65 66 69 6e 65 20  SIZE.#   define 
44f0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
4500: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
4510: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
4520: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
4530: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
4540: 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c  __linux__) \.  |
4550: 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32  | defined(_WIN32
4560: 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65  ) \.  || (define
4570: 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20  d(__APPLE__) && 
4580: 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f  defined(__MACH__
4590: 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  )) \.  || define
45a0: 64 28 5f 5f 73 75 6e 29 0a 23 20 20 20 64 65 66  d(__sun).#   def
45b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
45c0: 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30  MAP_SIZE 0x7fff0
45d0: 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31  000  /* 21474181
45e0: 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20  12 */.# else.#  
45f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4600: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
4610: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
4620: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
4630: 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65 78 63  SIZE_xc 1 /* exc
4640: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
4650: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  c */.#endif../*.
4660: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 4d  ** The default M
4670: 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f  MAP_SIZE is zero
4680: 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d   on all platform
4690: 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66 20  s.  Or, even if 
46a0: 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66 61  a larger.** defa
46b0: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
46c0: 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63 6f   specified at co
46d0: 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65  mpile-time, make
46e0: 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64 6f   sure that it do
46f0: 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64  es.** not exceed
4700: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61   the maximum mma
4710: 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64  p size..*/.#ifnd
4720: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
4730: 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65  T_MMAP_SIZE.# de
4740: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
4750: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  ULT_MMAP_SIZE 0.
4760: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4770: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
4780: 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75  E_xc 1  /* Exclu
4790: 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20  de from ctime.c 
47a0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51  */.#endif.#if SQ
47b0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
47c0: 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41  P_SIZE>SQLITE_MA
47d0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e  X_MMAP_SIZE.# un
47e0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
47f0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
4800: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
4810: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53  AULT_MMAP_SIZE S
4820: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4830: 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  IZE.#endif../*.*
4840: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
4850: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
4860: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
4870: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
4880: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
4890: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
48a0: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
48b0: 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  . .**.** The sql
48c0: 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20  ite.busyHandler 
48d0: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71  member of the sq
48e0: 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74  lite struct cont
48f0: 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a  ains the busy.**
4900: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68   callback for th
4910: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
4920: 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70  e. Each pager op
4930: 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c  ened via the sql
4940: 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73  ite.** handle is
4950: 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65   passed a pointe
4960: 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79  r to sqlite.busy
4970: 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73  Handler. The bus
4980: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
4990: 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74  lback is current
49a0: 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20  ly invoked only 
49b0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65  from within page
49c0: 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  r.c..*/.typedef 
49d0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
49e0: 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a  er BusyHandler;.
49f0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
4a00: 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75  er {.  int (*xFu
4a10: 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b  nc)(void *,int);
4a20: 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61    /* The busy ca
4a30: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
4a40: 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20   *pArg;         
4a50: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
4a60: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
4a70: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
4a80: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
4a90: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
4aa0: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
4ab0: 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f  sy call */.};../
4ac0: 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  *.** Name of the
4ad0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
4ae0: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73   table.  The mas
4af0: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
4b00: 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69  le.** is a speci
4b10: 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f  al table that ho
4b20: 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e  lds the names an
4b30: 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  d attributes of 
4b40: 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c  all.** user tabl
4b50: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a  es and indices..
4b60: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
4b70: 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71  R_NAME       "sq
4b80: 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65  lite_master".#de
4b90: 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52  fine TEMP_MASTER
4ba0: 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74  _NAME  "sqlite_t
4bb0: 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a  emp_master"../*.
4bc0: 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65  ** The root-page
4bd0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
4be0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a  atabase table..*
4bf0: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
4c00: 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f  _ROOT       1../
4c10: 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66  *.** The name of
4c20: 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c   the schema tabl
4c30: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
4c40: 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28  HEMA_TABLE(x)  (
4c50: 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26  (!OMIT_TEMPDB)&&
4c60: 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54  (x==1)?TEMP_MAST
4c70: 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e  ER_NAME:MASTER_N
4c80: 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f  AME)../*.** A co
4c90: 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20  nvenience macro 
4ca0: 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65  that returns the
4cb0: 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   number of eleme
4cc0: 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72  nts in.** an arr
4cd0: 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41  ay..*/.#define A
4ce0: 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28  rraySize(X)    (
4cf0: 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f  (int)(sizeof(X)/
4d00: 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a  sizeof(X[0])))..
4d10: 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20  /*.** Determine 
4d20: 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
4d30: 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  is a power of tw
4d40: 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  o.*/.#define IsP
4d50: 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28  owerOfTwo(X) (((
4d60: 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a  X)&((X)-1))==0).
4d70: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
4d80: 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20  wing value as a 
4d90: 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73  destructor means
4da0: 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44   to use sqlite3D
4db0: 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20  bFree()..** The 
4dc0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
4dd0: 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73  routine requires
4de0: 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20   two parameters 
4df0: 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a  instead of the .
4e00: 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72  ** one parameter
4e10: 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72   that destructor
4e20: 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e  s normally want.
4e30: 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20    So we have to 
4e40: 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68  introduce .** th
4e50: 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74  is magic value t
4e60: 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f  hat the code kno
4e70: 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66  ws to handle dif
4e80: 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a  ferently.  Any .
4e90: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
4ea0: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
4eb0: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
4ec0: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
4ed0: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
4ee0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
4ef0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
4f00: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
4f10: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
4f20: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
4f30: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
4f40: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
4f50: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
4f60: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
4f70: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
4f80: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
4f90: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
4fa0: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
4fb0: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
4fc0: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
4fd0: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
4fe0: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
4ff0: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
5000: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
5010: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
5020: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
5030: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
5040: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
5050: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
5060: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
5070: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
5080: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
5090: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
50a0: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
50b0: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
50c0: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
50d0: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
50e0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
50f0: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
5100: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
5110: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
5120: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
5130: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
5140: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
5150: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
5160: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
5170: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
5180: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
5190: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
51a0: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
51b0: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
51c0: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
51d0: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
51e0: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
51f0: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
5200: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
5210: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
5220: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
5230: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
5240: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
5250: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
5260: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
5270: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
5280: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
5290: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
52a0: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
52b0: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
52c0: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
52d0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
52e0: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
52f0: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
5300: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
5310: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
5320: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
5330: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
5340: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
5350: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
5360: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
5370: 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20  _WSD .  #define 
5380: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20  GLOBAL(t,v) v.  
5390: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47  #define sqlite3G
53a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69  lobalConfig sqli
53b0: 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66  te3Config.#endif
53c0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
53d0: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65  owing macros are
53e0: 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73   used to suppres
53f0: 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  s compiler warni
5400: 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61  ngs and to.** ma
5410: 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68  ke it clear to h
5420: 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65  uman readers whe
5430: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
5440: 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65  ameter is delibe
5450: 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20  rately .** left 
5460: 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68  unused within th
5470: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
5480: 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c  tion. This usual
5490: 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a  ly happens when.
54a0: 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73  ** a function is
54b0: 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75   called via a fu
54c0: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20  nction pointer. 
54d0: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20  For example the 
54e0: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
54f0: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
5500: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
5510: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
5520: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
5530: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
5540: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
5550: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
5560: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
5570: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
5580: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
5590: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
55a0: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
55b0: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
55c0: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
55d0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
55e0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
55f0: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
5600: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
5610: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
5620: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
5630: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
5640: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
5650: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
5660: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
5670: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
5680: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
5690: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
56a0: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
56b0: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
56c0: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
56d0: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
56e0: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
56f0: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
5700: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
5710: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
5720: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
5730: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
5740: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
5750: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
5760: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
5770: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
5780: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
5790: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
57a0: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
57b0: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
57c0: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
57d0: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
57e0: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
57f0: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
5800: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
5810: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
5820: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
5830: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
5840: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5850: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
5860: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
5870: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
5880: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
5890: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
58a0: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
58b0: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
58c0: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
58d0: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
58e0: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
58f0: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
5900: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
5910: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
5920: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
5930: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
5940: 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78  ruct ExprSpan Ex
5950: 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20  prSpan;.typedef 
5960: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
5970: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5980: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
5990: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a  FuncDestructor;.
59a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
59b0: 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a  uncDef FuncDef;.
59c0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
59d0: 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44  uncDefHash FuncD
59e0: 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20  efHash;.typedef 
59f0: 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64  struct IdList Id
5a00: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
5a10: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
5a20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5a30: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64   IndexSample Ind
5a40: 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65  exSample;.typede
5a50: 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73  f struct KeyClas
5a60: 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65  s KeyClass;.type
5a70: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e  def struct KeyIn
5a80: 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65  fo KeyInfo;.type
5a90: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
5aa0: 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a  side Lookaside;.
5ab0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
5ac0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f  ookasideSlot Loo
5ad0: 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65  kasideSlot;.type
5ae0: 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c  def struct Modul
5af0: 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65  e Module;.typede
5b00: 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  f struct NameCon
5b10: 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  text NameContext
5b20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5b30: 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79   Parse Parse;.ty
5b40: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
5b50: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
5b60: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
5b70: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
5b80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
5b90: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
5ba0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c  pedef struct Sel
5bb0: 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65  ectDest SelectDe
5bc0: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
5bd0: 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69  ct SrcList SrcLi
5be0: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
5bf0: 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41  ct StrAccum StrA
5c00: 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74  ccum;.typedef st
5c10: 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65  ruct Table Table
5c20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5c30: 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65   TableLock Table
5c40: 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74  Lock;.typedef st
5c50: 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e  ruct Token Token
5c60: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5c70: 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72   Trigger Trigger
5c80: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5c90: 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67   TriggerPrg Trig
5ca0: 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20  gerPrg;.typedef 
5cb0: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
5cc0: 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a  ep TriggerStep;.
5cd0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55  typedef struct U
5ce0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e  npackedRecord Un
5cf0: 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79  packedRecord;.ty
5d00: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61  pedef struct VTa
5d10: 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65  ble VTable;.type
5d20: 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43  def struct VtabC
5d30: 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65  tx VtabCtx;.type
5d40: 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65  def struct Walke
5d50: 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65  r Walker;.typede
5d60: 66 20 73 74 72 75 63 74 20 57 68 65 72 65 50 6c  f struct WherePl
5d70: 61 6e 20 57 68 65 72 65 50 6c 61 6e 3b 0a 74 79  an WherePlan;.ty
5d80: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65  pedef struct Whe
5d90: 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f  reInfo WhereInfo
5da0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5db0: 20 57 68 65 72 65 4c 65 76 65 6c 20 57 68 65 72   WhereLevel Wher
5dc0: 65 4c 65 76 65 6c 3b 0a 0a 2f 2a 0a 2a 2a 20 44  eLevel;../*.** D
5dd0: 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64  efer sourcing vd
5de0: 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68  be.h and btree.h
5df0: 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65   until after the
5e00: 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42   "u8" and .** "B
5e10: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
5e20: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
5e30: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
5e40: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
5e50: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
5e60: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
5e70: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
5e80: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
5e90: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
5ea0: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
5eb0: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
5ec0: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69  e "pcache.h"..#i
5ed0: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
5ee0: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
5ef0: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
5f00: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
5f10: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
5f20: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
5f30: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
5f40: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
5f50: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
5f60: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
5f70: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
5f80: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
5f90: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
5fa0: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
5fb0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
5fc0: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
5fd0: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
5fe0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
5ff0: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
6000: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
6010: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
6020: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
6030: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
6040: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
6050: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
6060: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
6070: 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
6080: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42          /* The B
6090: 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  *Tree structure 
60a0: 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73  for this databas
60b0: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73  e file */.  u8 s
60c0: 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20  afety_level;    
60d0: 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69   /* How aggressi
60e0: 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61  ve at syncing da
60f0: 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20  ta to disk */.  
6100: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
6110: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
6120: 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65  to database sche
6130: 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61  ma (possibly sha
6140: 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  red) */.};../*.*
6150: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
6160: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
6170: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
6180: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
6190: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
61a0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
61b0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
61c0: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
61d0: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
61e0: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
61f0: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
6200: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
6210: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
6220: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
6230: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
6240: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
6250: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
6260: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
6270: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
6280: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
6290: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
62a0: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
62b0: 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62  ** .** Schema ob
62c0: 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61  jects are automa
62d0: 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61  tically dealloca
62e0: 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73  ted when the las
62f0: 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20  t Btree that.** 
6300: 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20  references them 
6310: 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20  is destroyed.   
6320: 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20  The TEMP Schema 
6330: 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65  is manually free
6340: 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  d by.** sqlite3_
6350: 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20  close()..*.** A 
6360: 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68  thread must be h
6370: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
6380: 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  n the correspond
6390: 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64  ing Btree in ord
63a0: 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20  er.** to access 
63b0: 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20  Schema content. 
63c0: 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68   This implies th
63d0: 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75  at the thread mu
63e0: 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f  st also be.** ho
63f0: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
6400: 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e   the sqlite3 con
6410: 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  nection pointer 
6420: 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74  that owns the Bt
6430: 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45  ree..** For a TE
6440: 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20  MP Schema, only 
6450: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d  the connection m
6460: 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64  utex is required
6470: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65  ..*/.struct Sche
6480: 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d  ma {.  int schem
6490: 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44  a_cookie;   /* D
64a0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76  atabase schema v
64b0: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
64c0: 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20  r this file */. 
64d0: 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e   int iGeneration
64e0: 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74  ;     /* Generat
64f0: 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e  ion counter.  In
6500: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
6510: 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20  ach change */.  
6520: 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20  Hash tblHash;   
6530: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c       /* All tabl
6540: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
6550: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78  me */.  Hash idx
6560: 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  Hash;        /* 
6570: 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69  All (named) indi
6580: 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ces indexed by n
6590: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72  ame */.  Hash tr
65a0: 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  igHash;       /*
65b0: 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e   All triggers in
65c0: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
65d0: 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68  .  Hash fkeyHash
65e0: 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66  ;       /* All f
65f0: 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72  oreign keys by r
6600: 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20  eferenced table 
6610: 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  name */.  Table 
6620: 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f  *pSeqTab;      /
6630: 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71  * The sqlite_seq
6640: 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64  uence table used
6650: 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   by AUTOINCREMEN
6660: 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66  T */.  u8 file_f
6670: 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53  ormat;      /* S
6680: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72  chema format ver
6690: 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69  sion for this fi
66a0: 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  le */.  u8 enc; 
66b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
66c0: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73  Text encoding us
66d0: 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62  ed by this datab
66e0: 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ase */.  u16 fla
66f0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gs;           /*
6700: 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   Flags associate
6710: 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65  d with this sche
6720: 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68  ma */.  int cach
6730: 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20  e_size;      /* 
6740: 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
6750: 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61  to use in the ca
6760: 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  che */.};../*.**
6770: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
6780: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
6790: 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
67a0: 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a   bits in the .**
67b0: 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   Db.pSchema->fla
67c0: 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
67d0: 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72  fine DbHasProper
67e0: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28  ty(D,I,P)     ((
67f0: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
6800: 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  ema->flags&(P))=
6810: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
6820: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
6830: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
6840: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  b[I].pSchema->fl
6850: 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
6860: 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72  fine DbSetProper
6870: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44  ty(D,I,P)     (D
6880: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
6890: 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  a->flags|=(P).#d
68a0: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
68b0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
68c0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
68d0: 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  ma->flags&=~(P).
68e0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
68f0: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42  alues for the DB
6900: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
6910: 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  field..**.** The
6920: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
6930: 20 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74   flag is set aft
6940: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
6950: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a  schema has been.
6960: 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74  ** read into int
6970: 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65  ernal hash table
6980: 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65  s..**.** DB_Unre
6990: 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74  setViews means t
69a0: 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  hat one or more 
69b0: 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d  views have colum
69c0: 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20  n names that.** 
69d0: 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64  have been filled
69e0: 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63   out.  If the sc
69f0: 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68  hema changes, th
6a00: 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ese column names
6a10: 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65   might.** change
6a20: 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65  s and so the vie
6a30: 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62  w will need to b
6a40: 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  e reset..*/.#def
6a50: 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  ine DB_SchemaLoa
6a60: 64 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f  ded    0x0001  /
6a70: 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73  * The schema has
6a80: 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a   been loaded */.
6a90: 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73  #define DB_Unres
6aa0: 65 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30  etViews    0x000
6ab0: 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73  2  /* Some views
6ac0: 20 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f   have defined co
6ad0: 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  lumn names */.#d
6ae0: 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20  efine DB_Empty  
6af0: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20           0x0004 
6b00: 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20   /* The file is 
6b10: 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20  empty (length 0 
6b20: 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  bytes) */../*.**
6b30: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
6b40: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
6b50: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
6b60: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
6b70: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
6b80: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
6b90: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
6ba0: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
6bb0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49  SQLITE_LIMIT_TRI
6bc0: 47 47 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f  GGER_DEPTH+1)../
6bd0: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d  *.** Lookaside m
6be0: 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f  alloc is a set o
6bf0: 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66  f fixed-size buf
6c00: 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65  fers that can be
6c10: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69   used.** to sati
6c20: 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69  sfy small transi
6c30: 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ent memory alloc
6c40: 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66  ation requests f
6c50: 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73  or objects.** as
6c60: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
6c70: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
6c80: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
6c90: 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c   The use of.** l
6ca0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
6cb0: 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69  provides a signi
6cc0: 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e  ficant performan
6cd0: 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a  ce enhancement.*
6ce0: 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62  * (approx 10%) b
6cf0: 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72  y avoiding numer
6d00: 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20  ous malloc/free 
6d10: 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70  requests while p
6d20: 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74  arsing.** SQL st
6d30: 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
6d40: 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74  The Lookaside st
6d50: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f  ructure holds co
6d60: 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f  nfiguration info
6d70: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
6d80: 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  e.** lookaside m
6d90: 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e  alloc subsystem.
6da0: 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65    Each available
6db0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
6dc0: 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f  on in.** the loo
6dd0: 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d  kaside subsystem
6de0: 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20   is stored on a 
6df0: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c  linked list of L
6e00: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20  ookasideSlot.** 
6e10: 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c  objects..**.** L
6e20: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
6e30: 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c  ions are only al
6e40: 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74  lowed for object
6e50: 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63  s that are assoc
6e60: 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20  iated.** with a 
6e70: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
6e80: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
6e90: 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69   Hence, schema i
6ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f  nformation canno
6eb0: 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69  t.** be stored i
6ec0: 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61  n lookaside beca
6ed0: 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61  use in shared ca
6ee0: 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68  che mode the sch
6ef0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ema information.
6f00: 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20  ** is shared by 
6f10: 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
6f20: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20  e connections.  
6f30: 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65  Therefore, while
6f40: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65   parsing.** sche
6f50: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  ma information, 
6f60: 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45  the Lookaside.bE
6f70: 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63  nabled flag is c
6f80: 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a  leared so that.*
6f90: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * lookaside allo
6fa0: 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20  cations are not 
6fb0: 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63  used to construc
6fc0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a  t the schema obj
6fd0: 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ects..*/.struct 
6fe0: 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31  Lookaside {.  u1
6ff0: 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  6 sz;           
7000: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
7010: 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20   each buffer in 
7020: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45  bytes */.  u8 bE
7030: 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
7040: 20 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64     /* False to d
7050: 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61  isable new looka
7060: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
7070: 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63   */.  u8 bMalloc
7080: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
7090: 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20   True if pStart 
70a0: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
70b0: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a  lite3_malloc() *
70c0: 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20  /.  int nOut;   
70d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
70e0: 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73  umber of buffers
70f0: 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b   currently check
7100: 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  ed out */.  int 
7110: 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20  mxOut;          
7120: 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72      /* Highwater
7130: 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a   mark for nOut *
7140: 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33  /.  int anStat[3
7150: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
7160: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
7170: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
7180: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
7190: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72  okasideSlot *pFr
71a0: 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ee;   /* List of
71b0: 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65   available buffe
71c0: 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  rs */.  void *pS
71d0: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
71e0: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66  /* First byte of
71f0: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
7200: 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69  y space */.  voi
7210: 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  d *pEnd;        
7220: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
7230: 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61  te past end of a
7240: 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a  vailable space *
7250: 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  /.};.struct Look
7260: 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f  asideSlot {.  Lo
7270: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65  okasideSlot *pNe
7280: 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62  xt;    /* Next b
7290: 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73  uffer in the lis
72a0: 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72  t of free buffer
72b0: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
72c0: 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   hash table for 
72d0: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
72e0: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68  ions..**.** Hash
72f0: 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74   each FuncDef st
7300: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65  ructure into one
7310: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48   of the FuncDefH
7320: 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a  ash.a[] slots..*
7330: 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65  * Collisions are
7340: 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e   on the FuncDef.
7350: 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a  pHash chain..*/.
7360: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
7370: 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  sh {.  FuncDef *
7380: 61 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20  a[23];       /* 
7390: 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  Hash table for f
73a0: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
73b0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
73c0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
73d0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
73e0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
73f0: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
7400: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
7410: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
7420: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
7430: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
7440: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
7450: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
7460: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
7470: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
7480: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
7490: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
74a0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
74b0: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
74c0: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
74d0: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
74e0: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
74f0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
7500: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
7510: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
7520: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
7530: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
7540: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
7550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7560: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
7570: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
7580: 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66  n use */.  int f
7590: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
75a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63           /* Misc
75b0: 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e  ellaneous flags.
75c0: 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
75d0: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20  i64 lastRowid;  
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
75f0: 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72   ROWID of most r
7600: 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65  ecent insert (se
7610: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36  e above) */.  i6
7620: 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
7630: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
7640: 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65  efault mmap_size
7650: 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e   setting */.  un
7660: 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46  signed int openF
7670: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46  lags;       /* F
7680: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
7690: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
76a0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
76b0: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
76c0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
76d0: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
76e0: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
76f0: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
7700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7710: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
7720: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
7730: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
7740: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
7750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7760: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
7770: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
7780: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61  ations */.  u8 a
7790: 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20  utoCommit;      
77a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
77b0: 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
77c0: 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f  g. */.  u8 temp_
77d0: 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20  store;          
77e0: 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65        /* 1: file
77f0: 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65   2: memory 0: de
7800: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61  fault */.  u8 ma
7810: 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20  llocFailed;     
7820: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
7830: 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e   if we have seen
7840: 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72   a malloc failur
7850: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
7860: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
7870: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
7880: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
7890: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
78a0: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
78b0: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
78c0: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
78d0: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
78e0: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
78f0: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
7900: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
7910: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
7920: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
7930: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
7940: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
7950: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
7960: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
7970: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
7980: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
7990: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
79a0: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
79b0: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
79c0: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
79d0: 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67  */.  int nextPag
79e0: 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20  esize;          
79f0: 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61     /* Pagesize a
7a00: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
7a10: 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63  0 */.  u32 magic
7a20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7a30: 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75       /* Magic nu
7a40: 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20  mber for detect 
7a50: 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a  library misuse *
7a60: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
7a90: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
7aa0: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
7ab0: 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20  t nTotalChange; 
7ac0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
7ad0: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
7ae0: 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
7af0: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
7b00: 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  t aLimit[SQLITE_
7b10: 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c  N_LIMIT];   /* L
7b20: 69 6d 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63  imits */.  struc
7b30: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66  t sqlite3InitInf
7b40: 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  o {      /* Info
7b50: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72  rmation used dur
7b60: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
7b70: 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65  on */.    int ne
7b80: 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20  wTnum;          
7b90: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67        /* Rootpag
7ba0: 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67  e of table being
7bb0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
7bc0: 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20      u8 iDb;     
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7be0: 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65  /* Which db file
7bf0: 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61   is being initia
7c00: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
7c10: 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  busy;           
7c20: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45           /* TRUE
7c30: 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
7c40: 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20  itializing */.  
7c50: 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67    u8 orphanTrigg
7c60: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
7c70: 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   Last statement 
7c80: 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50  is orphaned TEMP
7c90: 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20   trigger */.  } 
7ca0: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 61 63 74 69  init;.  int acti
7cb0: 76 65 56 64 62 65 43 6e 74 3b 20 20 20 20 20 20  veVdbeCnt;      
7cc0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
7cd0: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
7ce0: 6c 79 20 65 78 65 63 75 74 69 6e 67 20 2a 2f 0a  ly executing */.
7cf0: 20 20 69 6e 74 20 77 72 69 74 65 56 64 62 65 43    int writeVdbeC
7d00: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
7d10: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
7d20: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 61  ive VDBEs that a
7d30: 72 65 20 77 72 69 74 69 6e 67 20 2a 2f 0a 20 20  re writing */.  
7d40: 69 6e 74 20 76 64 62 65 45 78 65 63 43 6e 74 3b  int vdbeExecCnt;
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7d60: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
7d70: 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45  d calls to VdbeE
7d80: 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  xec() */.  int n
7d90: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
7da0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
7db0: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
7dc0: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
7dd0: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
7de0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
7df0: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
7e00: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
7e10: 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65  .  void (*xTrace
7e20: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
7e30: 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  ar*);        /* 
7e40: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
7e50: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
7e60: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7e80: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
7e90: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
7ea0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f  */.  void (*xPro
7eb0: 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  file)(void*,cons
7ec0: 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f  t char*,u64);  /
7ed0: 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63  * Profiling func
7ee0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
7ef0: 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20  pProfileArg;    
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f10: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
7f20: 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74  to profile funct
7f30: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
7f40: 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20  CommitArg;      
7f50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
7f60: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69  gument to xCommi
7f70: 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  tCallback() */  
7f80: 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69   .  int (*xCommi
7f90: 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  tCallback)(void*
7fa0: 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64  );    /* Invoked
7fb0: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
7fc0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f  . */.  void *pRo
7fd0: 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20  llbackArg;      
7fe0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
7ff0: 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63  ment to xRollbac
8000: 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  kCallback() */  
8010: 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c   .  void (*xRoll
8020: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
8030: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
8040: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
8050: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
8060: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
8070: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
8080: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
8090: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
80a0: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
80b0: 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  64);.#ifndef SQL
80c0: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
80d0: 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63  nt (*xWalCallbac
80e0: 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74  k)(void *, sqlit
80f0: 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
8100: 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64   *, int);.  void
8110: 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69   *pWalArg;.#endi
8120: 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  f.  void(*xCollN
8130: 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c  eeded)(void*,sql
8140: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
8150: 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  ep,const char*);
8160: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
8170: 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71  eded16)(void*,sq
8180: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
8190: 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  Rep,const void*)
81a0: 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e  ;.  void *pCollN
81b0: 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69  eededArg;.  sqli
81c0: 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b  te3_value *pErr;
81d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
81e0: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
81f0: 65 73 73 61 67 65 20 2a 2f 0a 20 20 63 68 61 72  essage */.  char
8200: 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
8210: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
8220: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
8230: 65 73 73 61 67 65 20 28 55 54 46 2d 38 20 65 6e  essage (UTF-8 en
8240: 63 6f 64 65 64 29 20 2a 2f 0a 20 20 63 68 61 72  coded) */.  char
8250: 20 2a 7a 45 72 72 4d 73 67 31 36 3b 20 20 20 20   *zErrMsg16;    
8260: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
8270: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
8280: 65 73 73 61 67 65 20 28 55 54 46 2d 31 36 20 65  essage (UTF-16 e
8290: 6e 63 6f 64 65 64 29 20 2a 2f 0a 20 20 75 6e 69  ncoded) */.  uni
82a0: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
82b0: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
82c0: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
82d0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
82e0: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
82f0: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
8300: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
8310: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
8320: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
8330: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
8340: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
8350: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
8360: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
8370: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
8380: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
8390: 0a 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28  .  int (*xAuth)(
83a0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
83b0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
83c0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
83d0: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20  nst char*);.    
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
8400: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
8410: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
8420: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
8430: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8440: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
8450: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
8460: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
8470: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
8480: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
8490: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
84a0: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
84b0: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
84c0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
84d0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
84e0: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
84f0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
8500: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
8510: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
8520: 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f    int nProgressO
8530: 70 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ps;             
8540: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
8550: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
8560: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
8570: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
8580: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
8590: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72  TABLE.  int nVTr
85a0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
85b0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
85c0: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
85d0: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f  ns */.  Hash aMo
85e0: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
85f0: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
8600: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
8610: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
8620: 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61  .  VtabCtx *pVta
8630: 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20  bCtx;           
8640: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
8650: 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e  active vtab conn
8660: 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20  ect/create */.  
8670: 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73  VTable **aVTrans
8680: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
8690: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
86a0: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
86b0: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62  ctions */.  VTab
86c0: 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b  le *pDisconnect;
86d0: 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63      /* Disconnec
86e0: 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20  t these in next 
86f0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
8700: 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75  ) */.#endif.  Fu
8710: 6e 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b  ncDefHash aFunc;
8720: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
8730: 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e  ash table of con
8740: 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  nection function
8750: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c  s */.  Hash aCol
8760: 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  lSeq;           
8770: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c       /* All coll
8780: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
8790: 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72  */.  BusyHandler
87a0: 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20   busyHandler;   
87b0: 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62     /* Busy callb
87c0: 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53  ack */.  Db aDbS
87d0: 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20  tatic[2];       
87e0: 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63         /* Static
87f0: 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32   space for the 2
8800: 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64   default backend
8810: 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  s */.  Savepoint
8820: 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20   *pSavepoint;   
8830: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
8840: 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74  active savepoint
8850: 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54  s */.  int busyT
8860: 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20  imeout;         
8870: 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e       /* Busy han
8880: 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e  dler timeout, in
8890: 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e   msec */.  int n
88a0: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
88b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
88c0: 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61  er of non-transa
88d0: 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73  ction savepoints
88e0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65   */.  int nState
88f0: 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ment;           
8900: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
8910: 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e   nested statemen
8920: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20  t-transactions  
8930: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
8940: 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
8950: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
8960: 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  ed constraints t
8970: 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  his transaction.
8980: 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74   */.  int *pnByt
8990: 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20  esFreed;        
89a0: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55      /* If not NU
89b0: 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  LL, increment th
89c0: 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a  is in DbFree() *
89d0: 2f 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  /..#ifdef SQLITE
89e0: 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e  _ENABLE_UNLOCK_N
89f0: 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66  OTIFY.  /* The f
8a00: 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c  ollowing variabl
8a10: 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65  es are all prote
8a20: 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54  cted by the STAT
8a30: 49 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20  IC_MASTER .  ** 
8a40: 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71  mutex, not by sq
8a50: 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65  lite3.mutex. The
8a60: 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f  y are used by co
8a70: 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20  de in notify.c. 
8a80: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
8a90: 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74  X.pUnlockConnect
8aa0: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
8ab0: 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69  ns that X is wai
8ac0: 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20  ting for Y to.  
8ad0: 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61  ** unlock so tha
8ae0: 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64  t it can proceed
8af0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e  ..  **.  ** When
8b00: 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e   X.pBlockingConn
8b10: 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20  ection==Y, that 
8b20: 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74  means that somet
8b30: 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65  hing that X trie
8b40: 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20  d.  ** tried to 
8b50: 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c  do recently fail
8b60: 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ed with an SQLIT
8b70: 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64  E_LOCKED error d
8b80: 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a  ue to locks.  **
8b90: 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f   held by Y..  */
8ba0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f  .  sqlite3 *pBlo
8bb0: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b  ckingConnection;
8bc0: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
8bd0: 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54  hat caused SQLIT
8be0: 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71  E_LOCKED */.  sq
8bf0: 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f  lite3 *pUnlockCo
8c00: 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20  nnection;       
8c10: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
8c20: 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75  n to watch for u
8c30: 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  nlock */.  void 
8c40: 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20  *pUnlockArg;    
8c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c60: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
8c70: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f  xUnlockNotify */
8c80: 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63  .  void (*xUnloc
8c90: 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a  kNotify)(void **
8ca0: 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f  , int);  /* Unlo
8cb0: 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61  ck notify callba
8cc0: 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ck */.  sqlite3 
8cd0: 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20  *pNextBlocked;  
8ce0: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
8cf0: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f   list of all blo
8d00: 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  cked connections
8d10: 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
8d20: 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20  *.** A macro to 
8d30: 64 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63  discover the enc
8d40: 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62  oding of a datab
8d50: 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ase..*/.#define 
8d60: 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61  ENC(db) ((db)->a
8d70: 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65  Db[0].pSchema->e
8d80: 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  nc)../*.** Possi
8d90: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
8da0: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
8db0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
8dc0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20  ITE_VdbeTrace   
8dd0: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
8de0: 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20  * True to trace 
8df0: 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a  VDBE execution *
8e00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8e10: 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20  _InternChanges  
8e20: 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55  0x00000002  /* U
8e30: 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20  ncommitted Hash 
8e40: 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f  table changes */
8e50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8e60: 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30  FullColNames   0
8e70: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68  x00000004  /* Sh
8e80: 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e  ow full column n
8e90: 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a  ames on SELECT *
8ea0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8eb0: 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20  _ShortColNames  
8ec0: 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 53  0x00000008  /* S
8ed0: 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e  how short column
8ee0: 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  s names */.#defi
8ef0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  ne SQLITE_CountR
8f00: 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30  ows      0x00000
8f10: 30 31 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f  010  /* Count ro
8f20: 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e  ws changed by IN
8f30: 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20  SERT, */.       
8f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f60: 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20     /*   DELETE, 
8f70: 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65  or UPDATE and re
8f80: 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20  turn */.        
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fb0: 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74    /*   the count
8fc0: 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63   using a callbac
8fd0: 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  k. */.#define SQ
8fe0: 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63  LITE_NullCallbac
8ff0: 6b 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20  k   0x00000020  
9000: 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61  /* Invoke the ca
9010: 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74  llback once if t
9020: 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  he */.          
9030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9050: 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20  /*   result set 
9060: 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  is empty */.#def
9070: 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  ine SQLITE_SqlTr
9080: 61 63 65 20 20 20 20 20 20 20 30 78 30 30 30 30  ace       0x0000
9090: 30 30 34 30 20 20 2f 2a 20 44 65 62 75 67 20 70  0040  /* Debug p
90a0: 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65  rint SQL as it e
90b0: 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69  xecutes */.#defi
90c0: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69  ne SQLITE_VdbeLi
90d0: 73 74 69 6e 67 20 20 20 20 30 78 30 30 30 30 30  sting    0x00000
90e0: 30 38 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69  080  /* Debug li
90f0: 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70  stings of VDBE p
9100: 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69  rograms */.#defi
9110: 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53  ne SQLITE_WriteS
9120: 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30  chema    0x00000
9130: 31 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70  100  /* OK to up
9140: 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54  date SQLITE_MAST
9150: 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ER */.#define SQ
9160: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
9170: 61 63 65 20 30 78 30 30 30 30 30 32 30 30 20 20  ace 0x00000200  
9180: 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33  /* Trace sqlite3
9190: 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c  VdbeAddOp() call
91a0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
91b0: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
91c0: 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f     0x00000400  /
91d0: 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65  * Do not enforce
91e0: 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
91f0: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
9200: 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
9210: 74 74 65 64 20 30 78 30 30 30 30 38 30 30 20 20  tted 0x0000800  
9220: 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61  /* For shared-ca
9230: 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66  che mode */.#def
9240: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63  ine SQLITE_Legac
9250: 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30  yFileFmt  0x0000
9260: 31 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20  1000  /* Create 
9270: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e  new databases in
9280: 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65   format 1 */.#de
9290: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
92a0: 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30  FSync      0x000
92b0: 30 32 30 30 30 20 20 2f 2a 20 55 73 65 20 66 75  02000  /* Use fu
92c0: 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20  ll fsync on the 
92d0: 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69  backend */.#defi
92e0: 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  ne SQLITE_CkptFu
92f0: 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 34  llFSync  0x00004
9300: 30 30 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  000  /* Use full
9310: 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b   fsync for check
9320: 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  point */.#define
9330: 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79   SQLITE_Recovery
9340: 4d 6f 64 65 20 20 20 30 78 30 30 30 30 38 30 30  Mode   0x0000800
9350: 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68  0  /* Ignore sch
9360: 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64  ema errors */.#d
9370: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76  efine SQLITE_Rev
9380: 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30  erseOrder   0x00
9390: 30 31 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72  010000  /* Rever
93a0: 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c  se unordered SEL
93b0: 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ECTs */.#define 
93c0: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
93d0: 72 73 20 20 20 20 30 78 30 30 30 32 30 30 30 30  rs    0x00020000
93e0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75    /* Enable recu
93f0: 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a  rsive triggers *
9400: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9410: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20  _ForeignKeys    
9420: 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45  0x00040000  /* E
9430: 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b  nforce foreign k
9440: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20  ey constraints  
9450: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9460: 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20  E_AutoIndex     
9470: 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20   0x00080000  /* 
9480: 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63  Enable automatic
9490: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
94a0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65  ine SQLITE_Prefe
94b0: 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 31 30  rBuiltin  0x0010
94c0: 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65  0000  /* Prefere
94d0: 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20  nce to built-in 
94e0: 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65  funcs */.#define
94f0: 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65   SQLITE_LoadExte
9500: 6e 73 69 6f 6e 20 20 30 78 30 30 32 30 30 30 30  nsion  0x0020000
9510: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61  0  /* Enable loa
9520: 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23  d_extension */.#
9530: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
9540: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
9550: 30 34 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0400000  /* True
9560: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
9570: 65 72 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69  ers */../*.** Bi
9580: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
9590: 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65  3.dbOptFlags fie
95a0: 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ld that are used
95b0: 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
95c0: 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
95d0: 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
95e0: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e  OPTIMIZATIONS,..
95f0: 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a  .) interface to.
9600: 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64  ** selectively d
9610: 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f  isable various o
9620: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f  ptimizations..*/
9630: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9640: 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30  QueryFlattener 0
9650: 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79  x0001   /* Query
9660: 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23   flattening */.#
9670: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
9680: 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30  lumnCache    0x0
9690: 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  002   /* Column 
96a0: 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65  cache */.#define
96b0: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
96c0: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
96d0: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
96e0: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
96f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
9700: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
9710: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
9720: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23  t factoring */.#
9730: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 64  define SQLITE_Id
9740: 78 52 65 61 6c 41 73 49 6e 74 20 20 20 30 78 30  xRealAsInt   0x0
9750: 30 31 30 20 20 20 2f 2a 20 53 74 6f 72 65 20 52  010   /* Store R
9760: 45 41 4c 20 61 73 20 49 4e 54 20 69 6e 20 69 6e  EAL as INT in in
9770: 64 69 63 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dices */.#define
9780: 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74   SQLITE_Distinct
9790: 4f 70 74 20 20 20 20 30 78 30 30 32 30 20 20 20  Opt    0x0020   
97a0: 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e  /* DISTINCT usin
97b0: 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  g indexes */.#de
97c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65  fine SQLITE_Cove
97d0: 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 34  rIdxScan   0x004
97e0: 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20  0   /* Covering 
97f0: 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23  index scans */.#
9800: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72  define SQLITE_Or
9810: 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30  derByIdxJoin 0x0
9820: 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42  080   /* ORDER B
9830: 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69  Y of joins via i
9840: 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
9850: 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75  SQLITE_SubqCorou
9860: 74 69 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f  tine  0x0100   /
9870: 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62 71 75  * Evaluate subqu
9880: 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69  eries as corouti
9890: 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nes */.#define S
98a0: 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65  QLITE_Transitive
98b0: 20 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a       0x0200   /*
98c0: 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73   Transitive cons
98d0: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
98e0: 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74  ne SQLITE_AllOpt
98f0: 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20  s        0xffff 
9900: 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a    /* All optimiz
9910: 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
9920: 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74   Macros for test
9930: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
9940: 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ot optimizations
9950: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20   are enabled or 
9960: 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66  disabled..*/.#if
9970: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
9980: 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64  _BUILTIN_TEST.#d
9990: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
99a0: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
99b0: 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62  ask)  (((db)->db
99c0: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
99d0: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74  !=0).#define Opt
99e0: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
99f0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28  (db, mask)   (((
9a00: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
9a10: 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73  (mask))==0).#els
9a20: 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  e.#define Optimi
9a30: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
9a40: 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66  b, mask)  0.#def
9a50: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
9a60: 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  Enabled(db, mask
9a70: 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )   1.#endif../*
9a80: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
9a90: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
9aa0: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
9ab0: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
9ac0: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
9ad0: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
9ae0: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
9af0: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
9b00: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
9b10: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
9b20: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
9b30: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
9b40: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
9b50: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
9b60: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
9b70: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
9b80: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
9b90: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
9ba0: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
9bb0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
9bc0: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
9bd0: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
9be0: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
9bf0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9c00: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
9c10: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
9c20: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
9c30: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
9c40: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
9c50: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
9c60: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
9c70: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
9c80: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
9c90: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
9ca0: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
9cb0: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
9cc0: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
9cd0: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
9ce0: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
9cf0: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
9d00: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
9d10: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
9d20: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41  ** structure.  A
9d30: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
9d40: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74   structure is st
9d50: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
9d60: 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68  te.aFunc.** hash
9d70: 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75   table.  When mu
9d80: 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73  ltiple functions
9d90: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e   have the same n
9da0: 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61  ame, the hash ta
9db0: 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f  ble.** points to
9dc0: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
9dd0: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
9de0: 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  es..*/.struct Fu
9df0: 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41  ncDef {.  i16 nA
9e00: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rg;            /
9e10: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
9e20: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
9e30: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
9e40: 75 38 20 69 50 72 65 66 45 6e 63 3b 20 20 20 20  u8 iPrefEnc;    
9e50: 20 20 20 20 20 2f 2a 20 50 72 65 66 65 72 72 65       /* Preferre
9e60: 64 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  d text encoding 
9e70: 28 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 31 36  (SQLITE_UTF8, 16
9e80: 4c 45 2c 20 31 36 42 45 29 20 2a 2f 0a 20 20 75  LE, 16BE) */.  u
9e90: 38 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  8 flags;        
9ea0: 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62      /* Some comb
9eb0: 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54  ination of SQLIT
9ec0: 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f  E_FUNC_* */.  vo
9ed0: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20  id *pUserData;  
9ee0: 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20     /* User data 
9ef0: 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46  parameter */.  F
9f00: 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20  uncDef *pNext;  
9f10: 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63      /* Next func
9f20: 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e  tion with same n
9f30: 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ame */.  void (*
9f40: 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  xFunc)(sqlite3_c
9f50: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
9f60: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
9f70: 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f   Regular functio
9f80: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  n */.  void (*xS
9f90: 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tep)(sqlite3_con
9fa0: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
9fb0: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41  3_value**); /* A
9fc0: 67 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f  ggregate step */
9fd0: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
9fe0: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
9ff0: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
a000: 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67         /* Aggreg
a010: 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f  ate finalizer */
a020: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
a030: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e          /* SQL n
a040: 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
a050: 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65  ion. */.  FuncDe
a060: 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f  f *pHash;      /
a070: 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69  * Next with a di
a080: 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74  fferent name but
a090: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a   the same hash *
a0a0: 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  /.  FuncDestruct
a0b0: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
a0c0: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
a0d0: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
a0e0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d  or function */.}
a0f0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74  ;../*.** This st
a100: 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c  ructure encapsul
a110: 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63  ates a user-func
a120: 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20  tion destructor 
a130: 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20  callback (as.** 
a140: 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67  configured using
a150: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
a160: 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66  _v2()) and a ref
a170: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20  erence counter. 
a180: 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66  When.** create_f
a190: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20  unction_v2() is 
a1a0: 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65  called to create
a1b0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68   a function with
a1c0: 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a   a destructor,.*
a1d0: 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63  * a single objec
a1e0: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
a1f0: 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e  s allocated. Fun
a200: 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66  cDestructor.nRef
a210: 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74   is set to .** t
a220: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e  he number of Fun
a230: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65  cDef objects cre
a240: 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f  ated (either 1 o
a250: 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  r 3, depending o
a260: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20  n whether.** or 
a270: 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65  not the specifie
a280: 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51  d encoding is SQ
a290: 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46  LITE_ANY). The F
a2a0: 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74  uncDef.pDestruct
a2b0: 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20  or.** member of 
a2c0: 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20  each of the new 
a2d0: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
a2e0: 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20  is set to point 
a2f0: 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64  to the allocated
a300: 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74  .** FuncDestruct
a310: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61  or..**.** Therea
a320: 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f  fter, when one o
a330: 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62  f the FuncDef ob
a340: 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64  jects is deleted
a350: 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a  , the reference.
a360: 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73  ** count on this
a370: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65   object is decre
a380: 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20  mented. When it 
a390: 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64  reaches 0, the d
a3a0: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20  estructor.** is 
a3b0: 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20  invoked and the 
a3c0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73  FuncDestructor s
a3d0: 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a  tructure freed..
a3e0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
a3f0: 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74  structor {.  int
a400: 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a   nRef;.  void (*
a410: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
a420: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  );.  void *pUser
a430: 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  Data;.};../*.** 
a440: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
a450: 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67  for FuncDef.flag
a460: 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  s.  Note that th
a470: 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54  e _LENGTH and _T
a480: 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20  YPEOF.** values 
a490: 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  must correspond 
a4a0: 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  to OPFLAG_LENGTH
a4b0: 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
a4c0: 59 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65  YPEOFARG.  There
a4d0: 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29  .** are assert()
a4e0: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
a4f0: 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66  he code to verif
a500: 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69  y this..*/.#defi
a510: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
a520: 49 4b 45 20 20 20 20 20 30 78 30 31 20 2f 2a 20  IKE     0x01 /* 
a530: 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68  Candidate for th
a540: 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74  e LIKE optimizat
a550: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
a560: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20  QLITE_FUNC_CASE 
a570: 20 20 20 20 30 78 30 32 20 2f 2a 20 43 61 73 65      0x02 /* Case
a580: 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d  -sensitive LIKE-
a590: 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  type function */
a5a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a5b0: 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78  FUNC_EPHEM    0x
a5c0: 30 34 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e  04 /* Ephemeral.
a5d0: 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44    Delete with VD
a5e0: 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  BE */.#define SQ
a5f0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
a600: 4c 4c 20 30 78 30 38 20 2f 2a 20 73 71 6c 69 74  LL 0x08 /* sqlit
a610: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
a620: 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c  () might be call
a630: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
a640: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
a650: 20 20 20 30 78 31 30 20 2f 2a 20 42 75 69 6c 74     0x10 /* Built
a660: 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67  -in count(*) agg
a670: 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  regate */.#defin
a680: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
a690: 41 4c 45 53 43 45 20 30 78 32 30 20 2f 2a 20 42  ALESCE 0x20 /* B
a6a0: 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65  uilt-in coalesce
a6b0: 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 66  () or ifnull() f
a6c0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
a6d0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
a6e0: 45 4e 47 54 48 20 20 20 30 78 34 30 20 2f 2a 20  ENGTH   0x40 /* 
a6f0: 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28  Built-in length(
a700: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
a710: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
a720: 43 5f 54 59 50 45 4f 46 20 20 20 30 78 38 30 20  C_TYPEOF   0x80 
a730: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65  /* Built-in type
a740: 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  of() function */
a750: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
a760: 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72  owing three macr
a770: 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20  os, FUNCTION(), 
a780: 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41  LIKEFUNC() and A
a790: 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a  GGREGATE() are.*
a7a0: 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65  * used to create
a7b0: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72   the initializer
a7c0: 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65  s for the FuncDe
a7d0: 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a  f structures..**
a7e0: 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a  .**   FUNCTION(z
a7f0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
a800: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
a810: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
a820: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
a830: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
a840: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
a850: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70  Name .**     imp
a860: 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75  lemented by C fu
a870: 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61  nction xFunc tha
a880: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
a890: 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a  rguments. The.**
a8a0: 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73 65       value passe
a8b0: 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61 73  d as iArg is cas
a8c0: 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61  t to a (void*) a
a8d0: 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c  nd made availabl
a8e0: 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20  e.**     as the 
a8f0: 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
a900: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20  e3_user_data()) 
a910: 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  for the function
a920: 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72 67  . If .**     arg
a930: 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75  ument bNC is tru
a940: 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49  e, then the SQLI
a950: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
a960: 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a   flag is set..**
a970: 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
a980: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
a990: 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
a9a0: 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
a9b0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
a9c0: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
a9d0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
a9e0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
a9f0: 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
aa00: 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
aa10: 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
aa20: 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
aa30: 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
aa40: 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
aa50: 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
aa60: 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
aa70: 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
aa80: 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c  ION()..**.**   L
aa90: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
aaa0: 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73  Arg, pArg, flags
aab0: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
aac0: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
aad0: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
aae0: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
aaf0: 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20  on zName .**    
ab00: 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
ab10: 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64  rg arguments and
ab20: 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
ab30: 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a  by a call to C .
ab40: 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20  **     function 
ab50: 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65  likeFunc. Argume
ab60: 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20  nt pArg is cast 
ab70: 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e  to a (void *) an
ab80: 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76  d made.**     av
ab90: 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66  ailable as the f
aba0: 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74  unction user-dat
abb0: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
abc0: 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20  data()). The.** 
abd0: 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67      FuncDef.flag
abe0: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  s variable is se
abf0: 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70  t to the value p
ac00: 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61  assed as the fla
ac10: 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65  gs.**     parame
ac20: 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
ac30: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
ac40: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
ac50: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
ac60: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  g, SQLITE_UTF8, 
ac70: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
ac80: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
ac90: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
aca0: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
acb0: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
acc0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
acd0: 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c  FUNCTION2(zName,
ace0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
acf0: 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c  , xFunc, extraFl
ad00: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
ad10: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 28 62 4e  SQLITE_UTF8, (bN
ad20: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
ad30: 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
ad40: 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  gs, \.   SQLITE_
ad50: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
ad60: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
ad70: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
ad80: 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43  #define STR_FUNC
ad90: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
ada0: 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , pArg, bNC, xFu
adb0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
adc0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 62 4e 43 2a  QLITE_UTF8, bNC*
add0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
ade0: 43 4f 4c 4c 2c 20 5c 0a 20 20 20 70 41 72 67 2c  COLL, \.   pArg,
adf0: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
ae00: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
ae10: 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
ae20: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
ae30: 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
ae40: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
ae50: 20 66 6c 61 67 73 2c 20 28 76 6f 69 64 20 2a 29   flags, (void *)
ae60: 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63  arg, 0, likeFunc
ae70: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
ae80: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41 47  0, 0}.#define AG
ae90: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
aea0: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
aeb0: 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20  tep, xFinal) \. 
aec0: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
aed0: 54 46 38 2c 20 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8, nc*SQLITE_F
aee0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a  UNC_NEEDCOLL, \.
aef0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
af00: 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c  _PTR(arg), 0, 0,
af10: 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a   xStep,xFinal,#z
af20: 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a  Name,0,0}../*.**
af30: 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
af40: 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
af50: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
af60: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
af70: 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
af80: 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
af90: 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
afa0: 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
afb0: 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
afc0: 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
afd0: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
afe0: 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
aff0: 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
b000: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
b010: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
b020: 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
b030: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
b040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b050: 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
b060: 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
b070: 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
b080: 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
b090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0a0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
b0b0: 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
b0c0: 69 6f 6e 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ions */.  Savepo
b0d0: 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
b0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b0f0: 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
b100: 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
b110: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
b120: 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
b130: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
b140: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
b150: 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
b160: 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
b170: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
b180: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
b190: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
b1a0: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
b1b0: 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
b1c0: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
b1d0: 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
b1e0: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
b1f0: 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
b200: 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
b210: 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
b220: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
b230: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
b240: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
b250: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
b260: 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
b270: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
b280: 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
b290: 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
b2a0: 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
b2b0: 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
b2c0: 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
b2d0: 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
b2e0: 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
b2f0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
b300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b310: 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
b320: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
b330: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
b340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b350: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
b360: 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
b370: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
b380: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
b390: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
b3a0: 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
b3b0: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
b3c0: 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
b3d0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
b3e0: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
b3f0: 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
b400: 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
b410: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
b420: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
b430: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
b440: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
b450: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
b460: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  s column */.  Ex
b470: 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f  pr *pDflt;     /
b480: 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * Default value 
b490: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
b4a0: 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b  /.  char *zDflt;
b4b0: 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
b4c0: 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66   text of the def
b4d0: 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  ault value */.  
b4e0: 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20  char *zType;    
b4f0: 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f   /* Data type fo
b500: 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  r this column */
b510: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20  .  char *zColl; 
b520: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
b530: 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e   sequence.  If N
b540: 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66  ULL, use the def
b550: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74  ault */.  u8 not
b560: 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e  Null;      /* An
b570: 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61   OE_ code for ha
b580: 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c  ndling a NOT NUL
b590: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
b5a0: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
b5b0: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
b5c0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20   SQLITE_AFF_... 
b5d0: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  values */.  u16 
b5e0: 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20  colFlags;    /* 
b5f0: 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69  Boolean properti
b600: 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47  es.  See COLFLAG
b610: 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20  _ defines below 
b620: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
b630: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c  d values for Col
b640: 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f  umn.colFlags:.*/
b650: 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
b660: 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31  _PRIMKEY  0x0001
b670: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73      /* Column is
b680: 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69   part of the pri
b690: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
b6a0: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  ine COLFLAG_HIDD
b6b0: 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f  EN   0x0002    /
b6c0: 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  * A hidden colum
b6d0: 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74  n in a virtual t
b6e0: 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  able */../*.** A
b6f0: 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75   "Collating Sequ
b700: 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64  ence" is defined
b710: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
b720: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
b730: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43  .** structure. C
b740: 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63  onceptually, a c
b750: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
b760: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  e consists of a 
b770: 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f  name and.** a co
b780: 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65  mparison routine
b790: 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
b7a0: 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20  e order of that 
b7b0: 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20  sequence..**.** 
b7c0: 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20  If CollSeq.xCmp 
b7d0: 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e  is NULL, it mean
b7e0: 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f  s that the.** co
b7f0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
b800: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
b810: 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e  Indices built on
b820: 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a   an undefined.**
b830: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
b840: 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72  nce may not be r
b850: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a  ead or written..
b860: 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  */.struct CollSe
b870: 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  q {.  char *zNam
b880: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
b890: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ame of the colla
b8a0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55  ting sequence, U
b8b0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a  TF-8 encoded */.
b8c0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
b8d0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
b8e0: 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64  encoding handled
b8f0: 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   by xCmp() */.  
b900: 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20  void *pUser;    
b910: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
b920: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28  rgument to xCmp(
b930: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d  ) */.  int (*xCm
b940: 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  p)(void*,int, co
b950: 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
b960: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
b970: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
b980: 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63  d*);  /* Destruc
b990: 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f  tor for pUser */
b9a0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72  .};../*.** A sor
b9b0: 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65  t order can be e
b9c0: 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53  ither ASC or DES
b9d0: 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  C..*/.#define SQ
b9e0: 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20  LITE_SO_ASC     
b9f0: 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    0  /* Sort in 
ba00: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
ba10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ba20: 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31  E_SO_DESC      1
ba30: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
ba40: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
ba50: 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66  ./*.** Column af
ba60: 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a  finity types..**
ba70: 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74  .** These used t
ba80: 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20  o have mnemonic 
ba90: 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f  name like 'i' fo
baa0: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  r SQLITE_AFF_INT
bab0: 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20  EGER and.** 't' 
bac0: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  for SQLITE_AFF_T
bad0: 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e  EXT.  But we can
bae0: 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73   save a little s
baf0: 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  pace and improve
bb00: 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20  .** the speed a 
bb10: 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72  little by number
bb20: 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63  ing the values c
bb30: 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a  onsecutively.  .
bb40: 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
bb50: 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
bb60: 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
bb70: 6e 20 77 69 74 68 20 27 61 27 2e 20 20 54 68 61  n with 'a'.  Tha
bb80: 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
bb90: 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
bba0: 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
bbb0: 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
bbc0: 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
bbd0: 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
bbe0: 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
bbf0: 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
bc00: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
bc10: 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
bc20: 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
bc30: 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
bc40: 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
bc50: 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
bc60: 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
bc70: 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64  omparison..*/.#d
bc80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
bc90: 5f 54 45 58 54 20 20 20 20 20 27 61 27 0a 23 64  _TEXT     'a'.#d
bca0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
bcb0: 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23 64  _NONE     'b'.#d
bcc0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
bcd0: 5f 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23 64  _NUMERIC  'c'.#d
bce0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
bcf0: 5f 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23 64  _INTEGER  'd'.#d
bd00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
bd10: 5f 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a 23  _REAL     'e'..#
bd20: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
bd30: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
bd40: 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45  X)  ((X)>=SQLITE
bd50: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f  _AFF_NUMERIC)../
bd60: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
bd70: 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20  AFF_MASK values 
bd80: 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69  masks off the si
bd90: 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f  gnificant bits o
bda0: 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79  f an.** affinity
bdb0: 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66   value. .*/.#def
bdc0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  ine SQLITE_AFF_M
bdd0: 41 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f 2a  ASK     0x67../*
bde0: 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62  .** Additional b
bdf0: 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  it values that c
be00: 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20  an be ORed with 
be10: 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68  an affinity with
be20: 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20  out.** changing 
be30: 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2f  the affinity..*/
be40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
be50: 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 30  JUMPIFNULL   0x0
be60: 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65  8  /* jumps if e
be70: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
be80: 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
be90: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
bea0: 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 53 74       0x10  /* St
beb0: 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  ore result in re
bec0: 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61  g[P2] rather tha
bed0: 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e  n jump */.#defin
bee0: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
bef0: 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e        0x80  /* N
bf00: 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a  ULL=NULL */../*.
bf10: 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20  ** An object of 
bf20: 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65  this type is cre
bf30: 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69  ated for each vi
bf40: 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73  rtual table pres
bf50: 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61  ent in.** the da
bf60: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a  tabase schema. .
bf70: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74  **.** If the dat
bf80: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
bf90: 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65  shared, then the
bfa0: 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e  re is one instan
bfb0: 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74  ce of this.** st
bfc0: 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68  ructure for each
bfd0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
bfe0: 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20  tion (sqlite3*) 
bff0: 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68  that uses the sh
c000: 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20  ared.** schema. 
c010: 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20  This is because 
c020: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
c030: 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65  nnection require
c040: 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65  s its own unique
c050: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
c060: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
c070: 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f  * handle used to
c080: 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
c090: 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d  ual table .** im
c0a0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
c0b0: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
c0c0: 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
c0d0: 68 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a  hared between .*
c0e0: 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
c0f0: 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65  ctions, even whe
c100: 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  n the rest of th
c110: 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  e in-memory data
c120: 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20  base .** schema 
c130: 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68  is shared, as th
c140: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
c150: 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68   often stores th
c160: 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
c170: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
c180: 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61  passed to it via
c190: 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20   the xConnect() 
c1a0: 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74  or xCreate() met
c1b0: 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e  hod.** during in
c1c0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74  itialization int
c1d0: 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61  ernally. This da
c1e0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
c1f0: 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20  n handle may.** 
c200: 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20  then be used by 
c210: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
c220: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
c230: 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20   to access real 
c240: 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69  tables .** withi
c250: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
c260: 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70  So that they app
c270: 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74  ear as part of t
c280: 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74  he callers .** t
c290: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73  ransaction, thes
c2a0: 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20  e accesses need 
c2b0: 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74  to be made via t
c2c0: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
c2d0: 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   .** connection 
c2e0: 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20  as that used to 
c2f0: 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72  execute SQL oper
c300: 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69  ations on the vi
c310: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  rtual table..**.
c320: 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62  ** All VTable ob
c330: 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65  jects that corre
c340: 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c  spond to a singl
c350: 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61  e table in a sha
c360: 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  red.** database 
c370: 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69  schema are initi
c380: 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ally stored in a
c390: 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69   linked-list poi
c3a0: 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68  nted to by.** th
c3b0: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
c3c0: 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20  member variable 
c3d0: 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
c3e0: 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63  ding Table objec
c3f0: 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71  t..** When an sq
c400: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
c410: 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71  operation is req
c420: 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20  uired to access 
c430: 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
c440: 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65  able, it searche
c450: 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74  s the list for t
c460: 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63  he VTable that c
c470: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
c480: 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  e.** database co
c490: 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74  nnection doing t
c4a0: 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20  he preparing so 
c4b0: 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f  as to use the co
c4c0: 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33  rrect.** sqlite3
c4d0: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e  _vtab* handle in
c4e0: 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
c4f0: 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ery..**.** When 
c500: 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62  an in-memory Tab
c510: 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c  le object is del
c520: 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c  eted (for exampl
c530: 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63  e when the.** sc
c540: 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65  hema is being re
c550: 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20  loaded for some 
c560: 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61  reason), the VTa
c570: 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ble objects are 
c580: 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20  not .** deleted 
c590: 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f  and the sqlite3_
c5a0: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72  vtab* handles ar
c5b0: 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63  e not xDisconnec
c5c0: 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69  t()ed .** immedi
c5d0: 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
c5e0: 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
c5f0: 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
c600: 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
c610: 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
c620: 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
c630: 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
c640: 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
c650: 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
c660: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
c670: 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
c680: 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
c690: 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a  Disconnected .**
c6a0: 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61   next time a sta
c6b0: 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
c6c0: 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71  ed using said sq
c6d0: 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20  lite3*. This is 
c6e0: 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  done.** to avoid
c6f0: 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73   deadlock issues
c700: 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
c710: 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ple sqlite3.mute
c720: 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65  x mutexes..** Re
c730: 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20  fer to comments 
c740: 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73  above function s
c750: 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
c760: 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a  List() for an.**
c770: 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20   explanation as 
c780: 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66  to why it is saf
c790: 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72  e to add an entr
c7a0: 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e  y to an sqlite3.
c7b0: 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c  pDisconnect.** l
c7c0: 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64  ist without hold
c7d0: 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
c7e0: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75  nding sqlite3.mu
c7f0: 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  tex mutex..**.**
c800: 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
c810: 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20  objects of this 
c820: 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61  type is always a
c830: 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20  llocated by .** 
c840: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28  sqlite3DbMalloc(
c850: 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  ), using the con
c860: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73  nection handle s
c870: 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e  tored in VTable.
c880: 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69  db as .** the fi
c890: 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  rst argument..*/
c8a0: 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b  .struct VTable {
c8b0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c8d0: 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  Database connect
c8e0: 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
c8f0: 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ith this table *
c900: 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64  /.  Module *pMod
c910: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
c920: 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75   Pointer to modu
c930: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
c940: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  n */.  sqlite3_v
c950: 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20  tab *pVtab;     
c960: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
c970: 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a  tab instance */.
c980: 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
c990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c9a0: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
c9b0: 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  s to this struct
c9c0: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e  ure */.  u8 bCon
c9d0: 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20  straint;        
c9e0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
c9f0: 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75  nstraints are su
ca00: 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74  pported */.  int
ca10: 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20   iSavepoint;    
ca20: 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20         /* Depth 
ca30: 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54  of the SAVEPOINT
ca40: 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62   stack */.  VTab
ca50: 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  le *pNext;      
ca60: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
ca70: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65   linked list (se
ca80: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a  e above) */.};..
ca90: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 74  /*.** Each SQL t
caa0: 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
cab0: 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
cac0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
cad0: 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67  the.** following
cae0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
caf0: 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73  * Table.zName is
cb00: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
cb10: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61 73   table.  The cas
cb20: 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e of the origina
cb30: 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42 4c  l.** CREATE TABL
cb40: 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73  E statement is s
cb50: 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65 20  tored, but case 
cb60: 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61  is not significa
cb70: 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72  nt for.** compar
cb80: 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62  isons..**.** Tab
cb90: 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e  le.nCol is the n
cba0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
cbb0: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   in this table. 
cbc0: 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61   Table.aCol is a
cbd0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  .** pointer to a
cbe0: 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d  n array of Colum
cbf0: 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f 6e  n structures, on
cc00: 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
cc10: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  n..**.** If the 
cc20: 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e 54  table has an INT
cc30: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
cc40: 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b  , then Table.iPK
cc50: 65 79 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ey is the index 
cc60: 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e  of.** the column
cc70: 20 74 68 61 74 20 69 73 20 74 68 61 74 20 6b 65   that is that ke
cc80: 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20 54  y.   Otherwise T
cc90: 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e 65  able.iPKey is ne
cca0: 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a  gative.  Note.**
ccb0: 20 74 68 61 74 20 74 68 65 20 64 61 74 61 74 79   that the dataty
ccc0: 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52  pe of the PRIMAR
ccd0: 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49 4e  Y KEY must be IN
cce0: 54 45 47 45 52 20 66 6f 72 20 74 68 69 73 20 66  TEGER for this f
ccf0: 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65  ield to.** be se
cd00: 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50  t.  An INTEGER P
cd10: 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75 73  RIMARY KEY is us
cd20: 65 64 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  ed as the rowid 
cd30: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a  for each row of.
cd40: 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  ** the table.  I
cd50: 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e 6f  f a table has no
cd60: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
cd70: 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61 6e   KEY, then a ran
cd80: 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20  dom rowid.** is 
cd90: 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65 61  generated for ea
cda0: 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61  ch row of the ta
cdb0: 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69 6d  ble.  TF_HasPrim
cdc0: 61 72 79 4b 65 79 20 69 73 20 73 65 74 20 69 66  aryKey is set if
cdd0: 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68 61  .** the table ha
cde0: 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b 45  s any PRIMARY KE
cdf0: 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f 74  Y, INTEGER or ot
ce00: 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  herwise..**.** T
ce10: 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68 65  able.tnum is the
ce20: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
ce30: 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65 20   the root BTree 
ce40: 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
ce50: 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61  e in the.** data
ce60: 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20 54  base file.  If T
ce70: 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65 20  able.iDb is the 
ce80: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
ce90: 61 62 61 73 65 20 74 61 62 6c 65 20 62 61 63 6b  abase table back
cea0: 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65  end.** in sqlite
ceb0: 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f  .aDb[].  0 is fo
cec0: 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
ced0: 61 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f 72  ase and 1 is for
cee0: 20 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a 2a   the file that.*
cef0: 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72  * holds temporar
cf00: 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  y tables and ind
cf10: 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70 68  ices.  If TF_Eph
cf20: 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a  emeral is set.**
cf30: 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
cf40: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66  is stored in a f
cf50: 69 6c 65 20 74 68 61 74 20 69 73 20 61 75 74 6f  ile that is auto
cf60: 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65  matically delete
cf70: 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44  d.** when the VD
cf80: 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65  BE cursor to the
cf90: 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64   table is closed
cfa0: 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  .  In this case 
cfb0: 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72  Table.tnum .** r
cfc0: 65 66 65 72 73 20 56 44 42 45 20 63 75 72 73 6f  efers VDBE curso
cfd0: 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f  r number that ho
cfe0: 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70  lds the table op
cff0: 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72  en, not to the r
d000: 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62  oot.** page numb
d010: 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74  er.  Transient t
d020: 61 62 6c 65 73 20 61 72 65 20 75 73 65 64 20 74  ables are used t
d030: 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c  o hold the resul
d040: 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71  ts of a.** sub-q
d050: 75 65 72 79 20 74 68 61 74 20 61 70 70 65 61 72  uery that appear
d060: 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72  s instead of a r
d070: 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  eal table name i
d080: 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
d090: 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43  e .** of a SELEC
d0a0: 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
d0b0: 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20  struct Table {. 
d0c0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
d0d0: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
d0e0: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
d0f0: 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a  ew */.  Column *
d100: 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  aCol;        /* 
d110: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
d120: 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  t each column */
d130: 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78  .  Index *pIndex
d140: 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  ;       /* List 
d150: 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f  of SQL indexes o
d160: 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f  n this table. */
d170: 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
d180: 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20  ct;     /* NULL 
d190: 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69  for tables.  Poi
d1a0: 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f  nts to definitio
d1b0: 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a  n if a view. */.
d1c0: 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20    FKey *pFKey;  
d1d0: 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64         /* Linked
d1e0: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72   list of all for
d1f0: 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69  eign keys in thi
d200: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61  s table */.  cha
d210: 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
d220: 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
d230: 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
d240: 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
d250: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
d260: 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20  TE_OMIT_CHECK.  
d270: 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b  ExprList *pCheck
d280: 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43  ;    /* All CHEC
d290: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
d2a0: 0a 23 65 6e 64 69 66 0a 20 20 74 52 6f 77 63 6e  .#endif.  tRowcn
d2b0: 74 20 6e 52 6f 77 45 73 74 3b 20 20 20 20 20 2f  t nRowEst;     /
d2c0: 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73  * Estimated rows
d2d0: 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d   in table - from
d2e0: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
d2f0: 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  ble */.  int tnu
d300: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
d310: 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65   Root BTree node
d320: 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20   for this table 
d330: 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29  (see note above)
d340: 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b   */.  i16 iPKey;
d350: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
d360: 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75   not negative, u
d370: 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61  se aCol[iPKey] a
d380: 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  s the primary ke
d390: 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b  y */.  i16 nCol;
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d3b0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
d3c0: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
d3d0: 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20  /.  u16 nRef;   
d3e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
d3f0: 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
d400: 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
d410: 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20    u8 tabFlags;  
d420: 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
d430: 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
d440: 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20  .  u8 keyConf;  
d450: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20          /* What 
d460: 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66  to do in case of
d470: 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66   uniqueness conf
d480: 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f  lict on iPKey */
d490: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d4a0: 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a  OMIT_ALTERTABLE.
d4b0: 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73    int addColOffs
d4c0: 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74  et;    /* Offset
d4d0: 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   in CREATE TABLE
d4e0: 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e   stmt to add a n
d4f0: 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e  ew column */.#en
d500: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
d510: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
d520: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75  ABLE.  int nModu
d530: 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e  leArg;      /* N
d540: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
d550: 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ts to the module
d560: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d   */.  char **azM
d570: 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65  oduleArg;  /* Te
d580: 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65  xt of all module
d590: 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f   args. [0] is mo
d5a0: 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56  dule name */.  V
d5b0: 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20  Table *pVTable; 
d5c0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56      /* List of V
d5d0: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a  Table objects. *
d5e0: 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67  /.#endif.  Trigg
d5f0: 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
d600: 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67  /* List of trigg
d610: 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53  ers stored in pS
d620: 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d  chema */.  Schem
d630: 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
d640: 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63  /* Schema that c
d650: 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62  ontains this tab
d660: 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  le */.  Table *p
d670: 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20  NextZombie;  /* 
d680: 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73  Next on the Pars
d690: 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73  e.pZombieTab lis
d6a0: 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
d6b0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
d6c0: 72 20 54 61 62 65 2e 74 61 62 46 6c 61 67 73 2e  r Tabe.tabFlags.
d6d0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
d6e0: 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
d6f0: 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
d700: 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
d710: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
d720: 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
d730: 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
d740: 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
d750: 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
d760: 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
d770: 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
d780: 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
d790: 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
d7a0: 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
d7b0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
d7c0: 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
d7d0: 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
d7e0: 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
d7f0: 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
d800: 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
d810: 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 0a 2f 2a 0a  l table */.../*.
d820: 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77  ** Test to see w
d830: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
d840: 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75  table is a virtu
d850: 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  al table.  This 
d860: 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20  is.** done as a 
d870: 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74  macro so that it
d880: 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a   will be optimiz
d890: 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74  ed out when virt
d8a0: 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70  ual.** table sup
d8b0: 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20  port is omitted 
d8c0: 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a  from the build..
d8d0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
d8e0: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
d8f0: 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73  BLE.#  define Is
d900: 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
d910: 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
d920: 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30  & TF_Virtual)!=0
d930: 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
d940: 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28  ddenColumn(X) ((
d950: 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
d960: 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
d970: 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  =0).#else.#  def
d980: 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
d990: 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
d9a0: 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
d9b0: 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (X) 0.#endif../*
d9c0: 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
d9d0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
d9e0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
d9f0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
da00: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
da10: 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
da20: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
da30: 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
da40: 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
da50: 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
da60: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
da70: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
da80: 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
da90: 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
daa0: 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
dab0: 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
dac0: 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
dad0: 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
dae0: 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
daf0: 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
db00: 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
db10: 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
db20: 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
db30: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
db40: 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
db50: 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
db60: 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
db70: 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
db80: 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
db90: 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
dba0: 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
dbb0: 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
dbc0: 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
dbd0: 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e  .** Each REFEREN
dbe0: 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72  CES clause gener
dbf0: 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ates an instance
dc00: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
dc10: 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77  g structure.** w
dc20: 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64  hich is attached
dc30: 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62   to the from-tab
dc40: 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c  le.  The to-tabl
dc50: 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74  e need not exist
dc60: 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f   when.** the fro
dc70: 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  m-table is creat
dc80: 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e  ed.  The existen
dc90: 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62  ce of the to-tab
dca0: 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65  le is not checke
dcb0: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65  d..*/.struct FKe
dcc0: 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72  y {.  Table *pFr
dcd0: 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  om;     /* Table
dce0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
dcf0: 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
dd00: 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a  e (aka: Child) *
dd10: 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46  /.  FKey *pNextF
dd20: 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 66 6f  rom;  /* Next fo
dd30: 72 65 69 67 6e 20 6b 65 79 20 69 6e 20 70 46 72  reign key in pFr
dd40: 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  om */.  char *zT
dd50: 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  o;        /* Nam
dd60: 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20  e of table that 
dd70: 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74  the key points t
dd80: 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20  o (aka: Parent) 
dd90: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
dda0: 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 66  To;    /* Next f
ddb0: 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61  oreign key on ta
ddc0: 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f  ble named zTo */
ddd0: 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f  .  FKey *pPrevTo
dde0: 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73  ;    /* Previous
ddf0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20   foreign key on 
de00: 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20  table named zTo 
de10: 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
de20: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
de30: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
de40: 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
de50: 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
de60: 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
de70: 72 72 65 64 3b 20 20 20 20 2f 2a 20 54 72 75 65  rred;    /* True
de80: 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63   if constraint c
de90: 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72  hecking is defer
dea0: 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20  red till COMMIT 
deb0: 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b  */.  u8 aAction[
dec0: 32 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  2];          /* 
ded0: 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e  ON DELETE and ON
dee0: 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c   UPDATE actions,
def0: 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f   respectively */
df00: 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72  .  Trigger *apTr
df10: 69 67 67 65 72 5b 32 5d 3b 20 20 2f 2a 20 54 72  igger[2];  /* Tr
df20: 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69  iggers for aActi
df30: 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a  on[] actions */.
df40: 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70    struct sColMap
df50: 20 7b 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f   {  /* Mapping o
df60: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72  f columns in pFr
df70: 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e  om to columns in
df80: 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20   zTo */.    int 
df90: 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 2f  iFrom;         /
dfa0: 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d  * Index of colum
dfb0: 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  n in pFrom */.  
dfc0: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20    char *zCol;   
dfd0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
dfe0: 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20  column in zTo.  
dff0: 49 66 20 30 20 75 73 65 20 50 52 49 4d 41 52 59  If 0 use PRIMARY
e000: 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
e010: 5b 31 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  [1];        /* O
e020: 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
e030: 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
e040: 20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20   s */.};../*.** 
e050: 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
e060: 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77  many different w
e070: 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61  ays to resolve a
e080: 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
e090: 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20  rror.  ROLLBACK 
e0a0: 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
e0b0: 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69   that a constrai
e0c0: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20  nt violation.** 
e0d0: 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61  causes the opera
e0e0: 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20  tion in process 
e0f0: 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20  to fail and for 
e100: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
e110: 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65  saction.** to be
e120: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41   rolled back.  A
e130: 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20  BORT processing 
e140: 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74  means the operat
e150: 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a  ion in process.*
e160: 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20  * fails and any 
e170: 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72  prior changes fr
e180: 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72  om that one oper
e190: 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64  ation are backed
e1a0: 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65   out,.** but the
e1b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
e1c0: 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  not rolled back.
e1d0: 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e    FAIL processin
e1e0: 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20  g means that.** 
e1f0: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
e200: 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20   progress stops 
e210: 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65  and returns an e
e220: 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20  rror code.  But 
e230: 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73  prior.** changes
e240: 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65   due to the same
e250: 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e   operation are n
e260: 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e  ot backed out an
e270: 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  d no rollback.**
e280: 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45   occurs.  IGNORE
e290: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
e2a0: 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74  particular row t
e2b0: 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63  hat caused the c
e2c0: 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
e2d0: 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74  or is not insert
e2e0: 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20  ed or updated.  
e2f0: 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
e300: 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
e310: 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  r.** is returned
e320: 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73  .  REPLACE means
e330: 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e   that preexistin
e340: 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  g database rows 
e350: 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61  that caused.** a
e360: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
e370: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
e380: 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74   removed so that
e390: 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20   the new insert 
e3a0: 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e  or.** update can
e3b0: 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65   proceed.  Proce
e3c0: 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
e3d0: 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20  and no error is 
e3e0: 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  reported..**.** 
e3f0: 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c  RESTRICT, SETNUL
e400: 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61  L, and CASCADE a
e410: 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c  ctions apply onl
e420: 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79  y to foreign key
e430: 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69  s..** RESTRICT i
e440: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42  s the same as AB
e450: 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ORT for IMMEDIAT
e460: 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  E foreign keys a
e470: 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  nd the.** same a
e480: 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44  s ROLLBACK for D
e490: 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53  EFERRED keys.  S
e4a0: 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61  ETNULL means tha
e4b0: 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  t the foreign.**
e4c0: 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e   key is set to N
e4d0: 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65  ULL.  CASCADE me
e4e0: 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54  ans that a DELET
e4f0: 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74  E or UPDATE of t
e500: 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64  he.** referenced
e510: 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72   table row is pr
e520: 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68  opagated into th
e530: 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73  e row that holds
e540: 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20   the.** foreign 
e550: 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20  key..** .** The 
e560: 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c  following symbol
e570: 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ic values are us
e580: 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69  ed to record whi
e590: 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63  ch type.** of ac
e5a0: 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f  tion to take..*/
e5b0: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65  .#define OE_None
e5c0: 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72       0   /* Ther
e5d0: 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69  e is no constrai
e5e0: 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23  nt to check */.#
e5f0: 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61  define OE_Rollba
e600: 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74  ck 1   /* Fail t
e610: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64  he operation and
e620: 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72   rollback the tr
e630: 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
e640: 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20  fine OE_Abort   
e650: 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74   2   /* Back out
e660: 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20   changes but do 
e670: 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  no rollback tran
e680: 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
e690: 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33  ne OE_Fail     3
e6a0: 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f     /* Stop the o
e6b0: 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61  peration but lea
e6c0: 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61  ve all prior cha
e6d0: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
e6e0: 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20  OE_Ignore   4   
e6f0: 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72  /* Ignore the er
e700: 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74  ror. Do not do t
e710: 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  he INSERT or UPD
e720: 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
e730: 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f  E_Replace  5   /
e740: 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e  * Delete existin
e750: 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64  g record, then d
e760: 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  o INSERT or UPDA
e770: 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  TE */..#define O
e780: 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f  E_Restrict 6   /
e790: 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49  * OE_Abort for I
e7a0: 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c  MMEDIATE, OE_Rol
e7b0: 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52  lback for DEFERR
e7c0: 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ED */.#define OE
e7d0: 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a  _SetNull  7   /*
e7e0: 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
e7f0: 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55   key value to NU
e800: 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  LL */.#define OE
e810: 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a  _SetDflt  8   /*
e820: 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
e830: 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74   key value to it
e840: 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65  s default */.#de
e850: 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20  fine OE_Cascade 
e860: 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20   9   /* Cascade 
e870: 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a  the changes */..
e880: 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75  #define OE_Defau
e890: 6c 74 20 20 39 39 20 20 2f 2a 20 44 6f 20 77 68  lt  99  /* Do wh
e8a0: 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75  atever the defau
e8b0: 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a  lt action is */.
e8c0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
e8d0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
e8e0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
e8f0: 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
e900: 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
e910: 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65  t to sqlite3Vdbe
e920: 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69  KeyCompare and i
e930: 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f  s used to contro
e940: 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72  l the .** compar
e950: 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20  ison of the two 
e960: 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2f 0a 73  index keys..*/.s
e970: 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a  truct KeyInfo {.
e980: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
e990: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
e9a0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e9b0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
e9c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
e9d0: 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65  t encoding - one
e9e0: 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55   of the SQLITE_U
e9f0: 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  TF* values */.  
ea00: 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
ea10: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
ea20: 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
ea30: 6c 5b 5d 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  l[] */.  u8 *aSo
ea40: 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20  rtOrder;     /* 
ea50: 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65  Sort order for e
ea60: 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 4d 61 79  ach column.  May
ea70: 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 43 6f   be NULL */.  Co
ea80: 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
ea90: 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
eaa0: 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
eab0: 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
eac0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
ead0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
eae0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
eaf0: 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
eb00: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a  mation about a.*
eb10: 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72  * single index r
eb20: 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61  ecord that has a
eb30: 6c 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73  lready been pars
eb40: 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69  ed out into indi
eb50: 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73  vidual.** values
eb60: 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64  ..**.** A record
eb70: 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   is an object th
eb80: 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  at contains one 
eb90: 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f  or more fields o
eba0: 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72  f data..** Recor
ebb0: 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  ds are used to s
ebc0: 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  tore the content
ebd0: 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20   of a table row 
ebe0: 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  and to store.** 
ebf0: 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e  the key of an in
ec00: 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63  dex.  A blob enc
ec10: 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72  oding of a recor
ec20: 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  d is created by.
ec30: 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  ** the OP_MakeRe
ec40: 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74  cord opcode of t
ec50: 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64  he VDBE and is d
ec60: 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74  isassembled by t
ec70: 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he.** OP_Column 
ec80: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
ec90: 69 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  is structure hol
eca0: 64 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74  ds a record that
ecb0: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
ecc0: 6e 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a  n disassembled.*
ecd0: 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74  * into its const
ece0: 69 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a  ituent fields..*
ecf0: 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  /.struct Unpacke
ed00: 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49  dRecord {.  KeyI
ed10: 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
ed20: 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64  /* Collation and
ed30: 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f   sort-order info
ed40: 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36  rmation */.  u16
ed50: 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
ed60: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
ed70: 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d  tries in apMem[]
ed80: 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 3b 20   */.  u8 flags; 
ed90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 6f 6f            /* Boo
eda0: 6c 65 61 6e 20 73 65 74 74 69 6e 67 73 2e 20 20  lean settings.  
edb0: 55 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c  UNPACKED_... bel
edc0: 6f 77 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69  ow */.  i64 rowi
edd0: 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55  d;          /* U
ede0: 73 65 64 20 62 79 20 55 4e 50 41 43 4b 45 44 5f  sed by UNPACKED_
edf0: 50 52 45 46 49 58 5f 53 45 41 52 43 48 20 2a 2f  PREFIX_SEARCH */
ee00: 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20  .  Mem *aMem;   
ee10: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73         /* Values
ee20: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
ee30: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 6f 66 20  lowed values of 
ee40: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2e 66  UnpackedRecord.f
ee50: 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
ee60: 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
ee70: 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20         0x01  /* 
ee80: 4d 61 6b 65 20 74 68 69 73 20 6b 65 79 20 61 6e  Make this key an
ee90: 20 65 70 73 69 6c 6f 6e 20 6c 61 72 67 65 72 20   epsilon larger 
eea0: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43  */.#define UNPAC
eeb0: 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
eec0: 20 20 30 78 30 32 20 20 2f 2a 20 41 20 70 72 65    0x02  /* A pre
eed0: 66 69 78 20 6d 61 74 63 68 20 69 73 20 63 6f 6e  fix match is con
eee0: 73 69 64 65 72 65 64 20 4f 4b 20 2a 2f 0a 23 64  sidered OK */.#d
eef0: 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50  efine UNPACKED_P
ef00: 52 45 46 49 58 5f 53 45 41 52 43 48 20 30 78 30  REFIX_SEARCH 0x0
ef10: 34 20 20 2f 2a 20 49 67 6e 6f 72 65 20 66 69 6e  4  /* Ignore fin
ef20: 61 6c 20 28 72 6f 77 69 64 29 20 66 69 65 6c 64  al (rowid) field
ef30: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
ef40: 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70  SQL index is rep
ef50: 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
ef60: 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ry by an.** inst
ef70: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
ef80: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
ef90: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d  .**.** The colum
efa0: 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
efb0: 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69  that are to be i
efc0: 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72  ndexed are descr
efd0: 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61  ibed.** by the a
efe0: 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20  iColumn[] field 
eff0: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
f000: 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
f010: 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68   suppose.** we h
f020: 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ave the followin
f030: 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65  g table and inde
f040: 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  x:.**.**     CRE
f050: 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31  ATE TABLE Ex1(c1
f060: 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33   int, c2 int, c3
f070: 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43   text);.**     C
f080: 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20  REATE INDEX Ex2 
f090: 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a  ON Ex1(c3,c1);.*
f0a0: 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c  *.** In the Tabl
f0b0: 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  e structure desc
f0c0: 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c  ribing Ex1, nCol
f0d0: 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72  ==3 because ther
f0e0: 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63  e are.** three c
f0f0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
f100: 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64  ble.  In the Ind
f110: 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ex structure des
f120: 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20  cribing.** Ex2, 
f130: 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65  nColumn==2 since
f140: 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75   2 of the 3 colu
f150: 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69  mns of Ex1 are i
f160: 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76  ndexed..** The v
f170: 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e  alue of aiColumn
f180: 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43   is {2, 0}.  aiC
f190: 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61  olumn[0]==2 beca
f1a0: 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73  use the .** firs
f1b0: 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  t column to be i
f1c0: 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20  ndexed (c3) has 
f1d0: 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e  an index of 2 in
f1e0: 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20   Ex1.aCol[]..** 
f1f0: 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
f200: 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
f210: 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c1) has an inde
f220: 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31  x of 0 in.** Ex1
f230: 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45  .aCol[], hence E
f240: 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d  x2.aiColumn[1]==
f250: 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64  0..**.** The Ind
f260: 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64  ex.onError field
f270: 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
f280: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69  her or not the i
f290: 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a  ndexed columns.*
f2a0: 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  * must be unique
f2b0: 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20   and what to do 
f2c0: 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e  if they are not.
f2d0: 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45    When Index.onE
f2e0: 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a  rror=OE_None,.**
f2f0: 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69   it means this i
f300: 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69  s not a unique i
f310: 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65  ndex.  Otherwise
f320: 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20   it is a unique 
f330: 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65  index.** and the
f340: 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e   value of Index.
f350: 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65  onError indicate
f360: 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c   the which confl
f370: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a  ict resolution .
f380: 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  ** algorithm to 
f390: 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20  employ whenever 
f3a0: 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
f3b0: 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e  de to insert a n
f3c0: 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65  on-unique.** ele
f3d0: 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
f3e0: 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a  Index {.  char *
f3f0: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
f400: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
f410: 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  is index */.  in
f420: 74 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  t *aiColumn;    
f430: 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
f440: 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
f450: 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20   by this index. 
f460: 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 74   1st is 0 */.  t
f470: 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74  Rowcnt *aiRowEst
f480: 3b 20 20 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20  ;       /* From 
f490: 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f  ANALYZE: Est. ro
f4a0: 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65  ws selected by e
f4b0: 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
f4c0: 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20  Table *pTable;  
f4d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
f4e0: 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20  SQL table being 
f4f0: 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61  indexed */.  cha
f500: 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
f510: 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
f520: 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
f530: 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
f540: 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
f550: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
f560: 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69     /* The next i
f570: 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20  ndex associated 
f580: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61  with the same ta
f590: 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ble */.  Schema 
f5a0: 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
f5b0: 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
f5c0: 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65  aining this inde
f5d0: 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  x */.  u8 *aSort
f5e0: 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
f5f0: 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* for each colu
f600: 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20  mn: True==DESC, 
f610: 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20  False==ASC */.  
f620: 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20  char **azColl;  
f630: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61           /* Arra
f640: 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  y of collation s
f650: 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f  equence names fo
f660: 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  r index */.  int
f670: 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
f680: 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65        /* DB Page
f690: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74   containing root
f6a0: 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
f6b0: 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b  /.  u16 nColumn;
f6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f6d0: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
f6e0: 73 20 69 6e 20 74 61 62 6c 65 20 75 73 65 64 20  s in table used 
f6f0: 62 79 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  by this index */
f700: 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20  .  u8 onError;  
f710: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
f720: 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f  E_Abort, OE_Igno
f730: 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20  re, OE_Replace, 
f740: 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20  or OE_None */.  
f750: 75 6e 73 69 67 6e 65 64 20 61 75 74 6f 49 6e 64  unsigned autoInd
f760: 65 78 3a 32 3b 20 20 20 20 2f 2a 20 31 3d 3d 55  ex:2;    /* 1==U
f770: 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52  NIQUE, 2==PRIMAR
f780: 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45  Y KEY, 0==CREATE
f790: 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69   INDEX */.  unsi
f7a0: 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a  gned bUnordered:
f7b0: 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  1;   /* Use this
f7c0: 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72   index for == or
f7d0: 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79   IN queries only
f7e0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
f7f0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 20  E_ENABLE_STAT3. 
f800: 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20   int nSample;   
f810: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
f820: 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
f830: 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a  in aSample[] */.
f840: 20 20 74 52 6f 77 63 6e 74 20 61 76 67 45 71 3b    tRowcnt avgEq;
f850: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76             /* Av
f860: 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 20  erage nEq value 
f870: 66 6f 72 20 6b 65 79 20 76 61 6c 75 65 73 20 6e  for key values n
f880: 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f  ot in aSample */
f890: 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a  .  IndexSample *
f8a0: 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53  aSample;    /* S
f8b0: 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65  amples of the le
f8c0: 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 23  ft-most key */.#
f8d0: 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
f8e0: 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72  Each sample stor
f8f0: 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
f900: 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20  _stat3 table is 
f910: 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
f920: 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20  emory .** using 
f930: 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74  a structure of t
f940: 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64  his type.  See d
f950: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20  ocumentation at 
f960: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a  the top of the.*
f970: 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72  * analyze.c sour
f980: 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69  ce file for addi
f990: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
f9a0: 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  on..*/.struct In
f9b0: 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 75 6e  dexSample {.  un
f9c0: 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  ion {.    char *
f9d0: 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  z;        /* Val
f9e0: 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53  ue if eType is S
f9f0: 51 4c 49 54 45 5f 54 45 58 54 20 6f 72 20 53 51  QLITE_TEXT or SQ
fa00: 4c 49 54 45 5f 42 4c 4f 42 20 2a 2f 0a 20 20 20  LITE_BLOB */.   
fa10: 20 64 6f 75 62 6c 65 20 72 3b 20 20 20 20 20 20   double r;      
fa20: 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65 54 79   /* Value if eTy
fa30: 70 65 20 69 73 20 53 51 4c 49 54 45 5f 46 4c 4f  pe is SQLITE_FLO
fa40: 41 54 20 2a 2f 0a 20 20 20 20 69 36 34 20 69 3b  AT */.    i64 i;
fa50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
fa60: 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53  ue if eType is S
fa70: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 2a 2f  QLITE_INTEGER */
fa80: 0a 20 20 7d 20 75 3b 0a 20 20 75 38 20 65 54 79  .  } u;.  u8 eTy
fa90: 70 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  pe;         /* S
faa0: 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 53 51 4c 49  QLITE_NULL, SQLI
fab0: 54 45 5f 49 4e 54 45 47 45 52 20 2e 2e 2e 20 65  TE_INTEGER ... e
fac0: 74 63 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79  tc. */.  int nBy
fad0: 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 69  te;        /* Si
fae0: 7a 65 20 69 6e 20 62 79 74 65 20 6f 66 20 74 65  ze in byte of te
faf0: 78 74 20 6f 72 20 62 6c 6f 62 2e 20 2a 2f 0a 20  xt or blob. */. 
fb00: 20 74 52 6f 77 63 6e 74 20 6e 45 71 3b 20 20 20   tRowcnt nEq;   
fb10: 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
fb20: 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
fb30: 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
fb40: 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
fb50: 74 52 6f 77 63 6e 74 20 6e 4c 74 3b 20 20 20 20  tRowcnt nLt;    
fb60: 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
fb70: 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
fb80: 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
fb90: 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
fba0: 20 74 52 6f 77 63 6e 74 20 6e 44 4c 74 3b 20 20   tRowcnt nDLt;  
fbb0: 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
fbc0: 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
fbd0: 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
fbe0: 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
fbf0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
fc00: 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
fc10: 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
fc20: 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
fc30: 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
fc40: 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
fc50: 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
fc60: 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
fc70: 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65  .** Note if Toke
fc80: 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65  n.z==0 then Toke
fc90: 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e  n.dyn and Token.
fca0: 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20  n are undefined 
fcb0: 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61  and.** may conta
fcc0: 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73  in random values
fcd0: 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61  .  Do not make a
fce0: 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61  ny assumptions a
fcf0: 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a  bout Token.dyn.*
fd00: 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68  * and Token.n wh
fd10: 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a  en Token.z==0..*
fd20: 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
fd30: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
fd40: 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
fd50: 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
fd60: 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
fd70: 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
fd80: 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
fd90: 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
fda0: 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
fdb0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
fdc0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
fdd0: 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
fde0: 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
fdf0: 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
fe00: 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
fe10: 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
fe20: 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
fe30: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
fe40: 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
fe50: 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
fe60: 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
fe70: 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
fe80: 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
fe90: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
fea0: 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
feb0: 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
fec0: 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
fed0: 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
fee0: 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
fef0: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
ff00: 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
ff10: 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
ff20: 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
ff30: 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
ff40: 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
ff50: 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
ff60: 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
ff70: 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
ff80: 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
ff90: 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
ffa0: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
ffb0: 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
ffc0: 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
ffd0: 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
ffe0: 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
fff0: 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
10000 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
10010 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
10020 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
10030 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
10040 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
10050 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
10060 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
10070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10080 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
10090 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
100a0 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
100b0 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
100c0 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
100d0 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
100e0 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
100f0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
10100 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
10110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10120 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
10130 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
10140 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
10150 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
10160 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
10170 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
10180 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
10190 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
101a0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
101b0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
101c0 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
101d0 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
101e0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
101f0 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
10200 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  dex */.  ExprLis
10210 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
10220 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
10230 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
10240 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
10250 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
10260 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
10270 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
10280 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
10290 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
102a0 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
102b0 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
102c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
102d0 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
102e0 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
102f0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
10300 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
10310 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
10320 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
10330 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
10340 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
10350 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
10360 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
10370 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
10380 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
10390 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
103a0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
103b0 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
103c0 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
103d0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
103e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
103f0 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
10400 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
10410 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
10420 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
10430 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
10440 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
10450 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
10460 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
10470 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
10480 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
10490 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
104a0 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
104b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104c0 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
104d0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
104e0 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
104f0 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10510 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
10520 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
10530 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
10540 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
10550 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10560 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
10570 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
10580 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
10590 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
105a0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
105b0 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
105c0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
105d0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
105e0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
105f0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
10600 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
10610 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
10620 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
10630 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
10640 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
10650 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
10660 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
10670 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
10680 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
10690 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
106a0 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
106b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
106c0 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
106d0 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
106e0 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
106f0 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
10700 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
10710 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
10720 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
10730 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
10740 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
10750 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
10760 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
10770 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
10780 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
10790 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
107a0 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
107b0 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
107c0 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
107d0 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
107e0 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
107f0 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
10800 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
10810 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
10820 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
10830 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
10840 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
10850 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
10860 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
10870 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
10880 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
10890 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
108a0 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
108b0 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
108c0 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
108d0 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
108e0 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
108f0 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
10900 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
10910 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
10920 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
10930 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
10940 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
10950 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
10960 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
10970 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
10980 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
10990 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
109a0 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
109b0 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
109c0 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
109d0 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
109e0 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
109f0 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
10a00 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
10a10 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
10a20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
10a30 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
10a40 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
10a50 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
10a60 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
10a70 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
10a80 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
10a90 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
10aa0 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
10ab0 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
10ac0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
10ad0 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
10ae0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
10af0 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
10b00 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
10b10 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
10b20 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  B, .** or TK_STR
10b30 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
10b40 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
10b50 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
10b60 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
10b70 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
10b80 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
10b90 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
10ba0 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
10bb0 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76  ntains the .** v
10bc0 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69  ariable name. Fi
10bd0 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78  nally, if the ex
10be0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
10bf0 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f  QL function (TK_
10c00 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68  FUNCTION),.** th
10c10 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
10c20 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20  ntains the name 
10c30 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
10c40 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67  .**.** Expr.pRig
10c50 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66  ht and Expr.pLef
10c60 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61  t are the left a
10c70 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72  nd right subexpr
10c80 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20  essions of a.** 
10c90 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
10ca0 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20   Either or both 
10cb0 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a  may be NULL..**.
10cc0 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  ** Expr.x.pList 
10cd0 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67  is a list of arg
10ce0 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78  uments if the ex
10cf0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
10d00 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  QL function,.** 
10d10 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  a CASE expressio
10d20 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65  n or an IN expre
10d30 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
10d40 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e  m "<lhs> IN (<y>
10d50 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45  , <z>...)"..** E
10d60 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
10d70 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70   used if the exp
10d80 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
10d90 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78  -select or an ex
10da0 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74  pression of.** t
10db0 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
10dc0 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
10dd0 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65   If the EP_xIsSe
10de0 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20  lect bit is set 
10df0 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
10e00 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
10e10 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
10e20 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69  s valid. Otherwi
10e30 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  se, Expr.x.pList
10e40 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a   is .** valid..*
10e50 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69  *.** An expressi
10e60 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49  on of the form I
10e70 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72  D or ID.ID refer
10e80 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  s to a column in
10e90 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72   a table..** For
10ea0 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e   such expression
10eb0 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65  s, Expr.op is se
10ec0 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61  t to TK_COLUMN a
10ed0 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69  nd Expr.iTable i
10ee0 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72  s.** the integer
10ef0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
10f00 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20  f a VDBE cursor 
10f10 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74  pointing to that
10f20 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78   table and.** Ex
10f30 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68  pr.iColumn is th
10f40 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
10f50 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63  for the specific
10f60 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65   column.  If the
10f70 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .** expression i
10f80 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75  s used as a resu
10f90 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61  lt in an aggrega
10fa0 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  te SELECT, then 
10fb0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
10fc0 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74  also stored in t
10fd0 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c  he Expr.iAgg col
10fe0 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65  umn in the aggre
10ff0 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20  gate so that.** 
11000 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73  it can be access
11010 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67  ed after all agg
11020 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70  regates are comp
11030 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uted..**.** If t
11040 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
11050 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69   an unbound vari
11060 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71  able marker (a q
11070 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a  uestion mark .**
11080 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
11090 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
110a0 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
110b0 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
110c0 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d  he index .** num
110d0 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
110e0 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
110f0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
11100 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
11110 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
11120 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
11130 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
11140 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
11150 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
11160 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
11170 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
11180 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
11190 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
111a0 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
111b0 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
111c0 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
111d0 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
111e0 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
111f0 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
11200 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
11210 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
11220 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
11230 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
11240 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
11250 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
11260 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
11270 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
11280 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
11290 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
112a0 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
112b0 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
112c0 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
112d0 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
112e0 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
112f0 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
11300 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
11310 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
11320 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
11330 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
11340 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
11350 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
11360 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
11370 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
11380 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
11390 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
113a0 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
113b0 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
113c0 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
113d0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
113e0 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
113f0 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
11400 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
11410 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
11420 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
11430 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
11440 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
11450 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
11460 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
11470 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
11480 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
11490 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
114a0 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
114b0 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
114c0 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
114d0 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
114e0 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
114f0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
11500 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
11510 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
11520 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
11530 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
11540 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
11550 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
11560 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
11570 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
11580 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
11590 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
115a0 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
115b0 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
115c0 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
115d0 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
115e0 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
115f0 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
11600 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
11610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11620 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
11630 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
11640 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
11650 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
11660 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
11670 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   of the column o
11680 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c  r 0 if not a col
11690 75 6d 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  umn */.  u16 fla
116a0 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
116b0 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
116c0 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
116d0 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
116e0 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
116f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
11700 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
11710 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
11720 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
11730 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
11740 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
11750 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
11760 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
11770 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
11780 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
11790 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
117a0 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
117b0 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
117c0 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
117d0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
117e0 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
117f0 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
11800 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
11810 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
11820 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
11830 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
11840 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  on. .  *********
11850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
11890 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
118a0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
118b0 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
118c0 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
118d0 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
118e0 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
118f0 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
11900 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 46 75  pList;     /* Fu
11910 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73  nction arguments
11920 20 6f 72 20 69 6e 20 22 3c 65 78 70 72 3e 20 49   or in "<expr> I
11930 4e 20 28 3c 65 78 70 72 2d 6c 69 73 74 29 22 20  N (<expr-list)" 
11940 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
11950 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 55  Select;     /* U
11960 73 65 64 20 66 6f 72 20 73 75 62 2d 73 65 6c 65  sed for sub-sele
11970 63 74 73 20 61 6e 64 20 22 3c 65 78 70 72 3e 20  cts and "<expr> 
11980 49 4e 20 28 3c 73 65 6c 65 63 74 3e 29 22 20 2a  IN (<select>)" *
11990 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49  /.  } x;..  /* I
119a0 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
119b0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
119c0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
119d0 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
119e0 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
119f0 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
11a00 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
11a10 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
11a20 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
11a30 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
11a40 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
11a50 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
11a60 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
11a70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11aa0 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c  ******/..#if SQL
11ab0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
11ac0 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67  TH>0.  int nHeig
11ad0 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ht;           /*
11ae0 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74   Height of the t
11af0 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68  ree headed by th
11b00 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  is node */.#endi
11b10 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20  f.  int iTable; 
11b20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
11b30 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20  _COLUMN: cursor 
11b40 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20  number of table 
11b50 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20  holding column. 
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b70 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45          ** TK_RE
11b80 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72  GISTER: register
11b90 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bb0 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20   ** TK_TRIGGER: 
11bc0 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f  1 -> new, 0 -> o
11bd0 6c 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43  ld */.  ynVar iC
11be0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f  olumn;         /
11bf0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  * TK_COLUMN: col
11c00 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66  umn index.  -1 f
11c10 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20  or rowid..      
11c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c30 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c     ** TK_VARIABL
11c40 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  E: variable numb
11c50 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29  er (always >= 1)
11c60 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b  . */.  i16 iAgg;
11c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11c80 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20   Which entry in 
11c90 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d  pAggInfo->aCol[]
11ca0 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f   or ->aFunc[] */
11cb0 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69  .  i16 iRightJoi
11cc0 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20  nTable;   /* If 
11cd0 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65  EP_FromJoin, the
11ce0 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20   right table of 
11cf0 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38  the join */.  u8
11d00 20 66 6c 61 67 73 32 3b 20 20 20 20 20 20 20 20   flags2;        
11d10 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 73       /* Second s
11d20 65 74 20 6f 66 20 66 6c 61 67 73 2e 20 20 45 50  et of flags.  EP
11d30 32 5f 2e 2e 2e 20 2a 2f 0a 20 20 75 38 20 6f 70  2_... */.  u8 op
11d40 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
11d50 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    /* TK_REGISTER
11d60 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  : original value
11d70 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20   of Expr.op.    
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d90 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d       ** TK_COLUM
11da0 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  N: the value of 
11db0 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  p5 for OP_Column
11dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11dd0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
11de0 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65  AGG_FUNCTION: ne
11df0 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20  sting depth */. 
11e00 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
11e10 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
11e20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
11e30 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
11e40 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  TION */.  Table 
11e50 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
11e60 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b   /* Table for TK
11e70 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69  _COLUMN expressi
11e80 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ons. */.};../*.*
11e90 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
11ea0 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73  are the meanings
11eb0 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
11ec0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
11ed0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ..*/.#define EP_
11ee0 46 72 6f 6d 4a 6f 69 6e 20 20 20 30 78 30 30 30  FromJoin   0x000
11ef0 31 20 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64  1  /* Originated
11f00 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20   in ON or USING 
11f10 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
11f20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41   */.#define EP_A
11f30 67 67 20 20 20 20 20 20 20 20 30 78 30 30 30 32  gg        0x0002
11f40 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e    /* Contains on
11f50 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
11f60 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
11f70 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f  .#define EP_Reso
11f80 6c 76 65 64 20 20 20 30 78 30 30 30 34 20 20 2f  lved   0x0004  /
11f90 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20  * IDs have been 
11fa0 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55  resolved to COLU
11fb0 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  MNs */.#define E
11fc0 50 5f 45 72 72 6f 72 20 20 20 20 20 20 30 78 30  P_Error      0x0
11fd0 30 30 38 20 20 2f 2a 20 45 78 70 72 65 73 73 69  008  /* Expressi
11fe0 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  on contains one 
11ff0 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a  or more errors *
12000 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73  /.#define EP_Dis
12010 74 69 6e 63 74 20 20 20 30 78 30 30 31 30 20 20  tinct   0x0010  
12020 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
12030 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49  ction with DISTI
12040 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  NCT keyword */.#
12050 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c  define EP_VarSel
12060 65 63 74 20 20 30 78 30 30 32 30 20 20 2f 2a 20  ect  0x0020  /* 
12070 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65  pSelect is corre
12080 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74  lated, not const
12090 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ant */.#define E
120a0 50 5f 44 62 6c 51 75 6f 74 65 64 20 20 30 78 30  P_DblQuoted  0x0
120b0 30 34 30 20 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20  040  /* token.z 
120c0 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69  was originally i
120d0 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69  n "..." */.#defi
120e0 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20  ne EP_InfixFunc 
120f0 20 30 78 30 30 38 30 20 20 2f 2a 20 54 72 75 65   0x0080  /* True
12100 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75   for an infix fu
12110 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c  nction: LIKE, GL
12120 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69  OB, etc */.#defi
12130 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20  ne EP_Collate   
12140 20 30 78 30 31 30 30 20 20 2f 2a 20 54 72 65 65   0x0100  /* Tree
12150 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43   contains a TK_C
12160 4f 4c 4c 41 54 45 20 6f 70 65 61 72 74 6f 72 20  OLLATE opeartor 
12170 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 69  */.#define EP_Fi
12180 78 65 64 44 65 73 74 20 20 30 78 30 32 30 30 20  xedDest  0x0200 
12190 20 2f 2a 20 52 65 73 75 6c 74 20 6e 65 65 64 65   /* Result neede
121a0 64 20 69 6e 20 61 20 73 70 65 63 69 66 69 63 20  d in a specific 
121b0 72 65 67 69 73 74 65 72 20 2a 2f 0a 23 64 65 66  register */.#def
121c0 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20  ine EP_IntValue 
121d0 20 20 30 78 30 34 30 30 20 20 2f 2a 20 49 6e 74    0x0400  /* Int
121e0 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61  eger value conta
121f0 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65  ined in u.iValue
12200 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78   */.#define EP_x
12210 49 73 53 65 6c 65 63 74 20 20 30 78 30 38 30 30  IsSelect  0x0800
12220 20 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69    /* x.pSelect i
12230 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69  s valid (otherwi
12240 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a  se x.pList is) *
12250 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48 69 6e  /.#define EP_Hin
12260 74 20 20 20 20 20 20 20 30 78 31 30 30 30 20 20  t       0x1000  
12270 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f 0a 23  /* Not used */.#
12280 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65  define EP_Reduce
12290 64 20 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20  d    0x2000  /* 
122a0 45 78 70 72 20 73 74 72 75 63 74 20 69 73 20 45  Expr struct is E
122b0 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
122c0 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
122d0 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  efine EP_TokenOn
122e0 6c 79 20 20 30 78 34 30 30 30 20 20 2f 2a 20 45  ly  0x4000  /* E
122f0 78 70 72 20 73 74 72 75 63 74 20 69 73 20 45 58  xpr struct is EX
12300 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
12310 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
12320 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63  define EP_Static
12330 20 20 20 20 20 30 78 38 30 30 30 20 20 2f 2a 20       0x8000  /* 
12340 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e  Held in memory n
12350 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ot obtained from
12360 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 0a 2f 2a   malloc() */../*
12370 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
12380 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e  g are the meanin
12390 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68  gs of bits in th
123a0 65 20 45 78 70 72 2e 66 6c 61 67 73 32 20 66 69  e Expr.flags2 fi
123b0 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
123c0 45 50 32 5f 4d 61 6c 6c 6f 63 65 64 54 6f 6b 65  EP2_MallocedToke
123d0 6e 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4e 65  n  0x0001  /* Ne
123e0 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46  ed to sqlite3DbF
123f0 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65  ree() Expr.zToke
12400 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 32  n */.#define EP2
12410 5f 49 72 72 65 64 75 63 69 62 6c 65 20 20 20 20  _Irreducible    
12420 30 78 30 30 30 32 20 20 2f 2a 20 43 61 6e 6e 6f  0x0002  /* Canno
12430 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  t EXPRDUP_REDUCE
12440 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 0a 2f   this Expr */../
12450 2a 0a 2a 2a 20 54 68 65 20 70 73 65 75 64 6f 2d  *.** The pseudo-
12460 72 6f 75 74 69 6e 65 20 73 71 6c 69 74 65 33 45  routine sqlite3E
12470 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62 6c  xprSetIrreducibl
12480 65 20 73 65 74 73 20 74 68 65 20 45 50 32 5f 49  e sets the EP2_I
12490 72 72 65 64 75 63 69 62 6c 65 0a 2a 2a 20 66 6c  rreducible.** fl
124a0 61 67 20 6f 6e 20 61 6e 20 65 78 70 72 65 73 73  ag on an express
124b0 69 6f 6e 20 73 74 72 75 63 74 75 72 65 2e 20 20  ion structure.  
124c0 54 68 69 73 20 66 6c 61 67 20 69 73 20 75 73 65  This flag is use
124d0 64 20 66 6f 72 20 56 56 26 41 20 6f 6e 6c 79 2e  d for VV&A only.
124e0 20 20 54 68 65 0a 2a 2a 20 72 6f 75 74 69 6e 65    The.** routine
124f0 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
12500 61 73 20 61 20 6d 61 63 72 6f 20 74 68 61 74 20  as a macro that 
12510 6f 6e 6c 79 20 77 6f 72 6b 73 20 77 68 65 6e 20  only works when 
12520 69 6e 20 64 65 62 75 67 67 69 6e 67 20 6d 6f 64  in debugging mod
12530 65 2c 0a 2a 2a 20 73 6f 20 61 73 20 6e 6f 74 20  e,.** so as not 
12540 74 6f 20 62 75 72 64 65 6e 20 70 72 6f 64 75 63  to burden produc
12550 74 69 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69  tion code..*/.#i
12560 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
12570 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
12580 65 74 49 72 72 65 64 75 63 69 62 6c 65 28 58 29  etIrreducible(X)
12590 20 20 28 58 29 2d 3e 66 6c 61 67 73 32 20 7c 3d    (X)->flags2 |=
125a0 20 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65   EP2_Irreducible
125b0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
125c0 45 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62  ExprSetIrreducib
125d0 6c 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  le(X).#endif../*
125e0 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
125f0 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
12600 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
12610 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
12620 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66  .** Expr.flags f
12630 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
12640 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79   ExprHasProperty
12650 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d  (E,P)     (((E)-
12660 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
12670 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  ).#define ExprHa
12680 73 41 6e 79 50 72 6f 70 65 72 74 79 28 45 2c 50  sAnyProperty(E,P
12690 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
126a0 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
126b0 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
126c0 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66  (E,P)     (E)->f
126d0 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
126e0 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65  e ExprClearPrope
126f0 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e  rty(E,P)   (E)->
12700 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a  flags&=~(P)../*.
12710 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
12720 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
12730 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
12740 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
12750 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c  Expr .** struct,
12760 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
12770 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75  with the EP_Redu
12780 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20  ced flag set in 
12790 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61  Expr.flags .** a
127a0 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
127b0 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
127c0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
127d0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
127e0 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
127f0 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
12800 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
12810 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
12820 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
12830 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
12840 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
12850 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
12860 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
12870 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
12880 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
12890 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
128a0 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
128b0 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
128c0 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
128d0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
128e0 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
128f0 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
12900 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  t .** above sqli
12910 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
12920 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
12930 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
12940 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
12950 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
12960 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
12970 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
12980 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
12990 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
129a0 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
129b0 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
129c0 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
129d0 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
129e0 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
129f0 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
12a00 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
12a10 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
12a20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
12a30 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
12a40 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
12a50 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
12a60 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
12a70 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
12a80 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
12a90 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
12aa0 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
12ab0 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
12ac0 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
12ad0 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
12ae0 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
12af0 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
12b00 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
12b10 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
12b20 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
12b30 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
12b40 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
12b50 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
12b60 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
12b70 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
12b80 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
12b90 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
12ba0 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
12bb0 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
12bc0 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
12bd0 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
12be0 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
12bf0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
12c00 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
12c10 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
12c20 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
12c30 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
12c40 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
12c50 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
12c60 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
12c70 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
12c80 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
12c90 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
12ca0 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
12cb0 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
12cc0 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
12cd0 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
12ce0 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
12cf0 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
12d00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12d10 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
12d20 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
12d30 20 20 69 6e 74 20 69 45 43 75 72 73 6f 72 3b 20    int iECursor; 
12d40 20 20 20 20 20 20 20 20 20 2f 2a 20 56 44 42 45           /* VDBE
12d50 20 43 75 72 73 6f 72 20 61 73 73 6f 63 69 61 74   Cursor associat
12d60 65 64 20 77 69 74 68 20 74 68 69 73 20 45 78 70  ed with this Exp
12d70 72 4c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63  rList */.  struc
12d80 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20  t ExprList_item 
12d90 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78  { /* For each ex
12da0 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
12db0 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72  list */.    Expr
12dc0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
12dd0 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20      /* The list 
12de0 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  of expressions *
12df0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
12e00 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
12e10 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65   Token associate
12e20 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72  d with this expr
12e30 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
12e40 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20  ar *zSpan;      
12e50 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
12e60 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78  l text of the ex
12e70 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
12e80 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20  u8 sortOrder;   
12e90 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72          /* 1 for
12ea0 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41   DESC or 0 for A
12eb0 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  SC */.    unsign
12ec0 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20  ed done :1;     
12ed0 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69    /* A flag to i
12ee0 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f  ndicate when pro
12ef0 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73  cessing is finis
12f00 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  hed */.    unsig
12f10 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a  ned bSpanIsTab :
12f20 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64  1; /* zSpan hold
12f30 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  s DB.TABLE.COLUM
12f40 4e 20 2a 2f 0a 20 20 20 20 75 31 36 20 69 4f 72  N */.    u16 iOr
12f50 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 20  derByCol;       
12f60 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59   /* For ORDER BY
12f70 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  , column number 
12f80 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f  in result set */
12f90 0a 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b  .    u16 iAlias;
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12fb0 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
12fc0 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
12fd0 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 20 20  ame */.  } *a;  
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ff0 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72  /* Alloc a power
13000 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20   of two greater 
13010 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70  or equal to nExp
13020 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
13030 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
13040 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
13050 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73  used by the pars
13060 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74  er to record bot
13070 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74  h.** the parse t
13080 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65  ree for an expre
13090 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70  ssion and the sp
130a0 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  an of input text
130b0 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65   for an.** expre
130c0 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ssion..*/.struct
130d0 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78   ExprSpan {.  Ex
130e0 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
130f0 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65      /* The expre
13100 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65  ssion parse tree
13110 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
13120 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46   *zStart;   /* F
13130 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  irst character o
13140 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
13150 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
13160 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63  nd;     /* One c
13170 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68  haracter past th
13180 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74  e end of input t
13190 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ext */.};../*.**
131a0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
131b0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
131c0 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
131d0 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
131e0 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
131f0 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
13200 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
13210 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
13220 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
13230 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
13240 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
13250 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
13260 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
13270 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
13280 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
13290 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
132a0 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
132b0 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
132c0 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
132d0 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
132e0 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
132f0 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
13300 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
13310 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
13320 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
13330 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
13340 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
13350 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
13360 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
13370 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
13380 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
13390 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
133a0 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
133b0 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
133c0 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
133d0 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
133e0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
133f0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
13400 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
13410 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
13420 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
13430 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
13440 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
13450 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
13460 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
13470 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13480 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
13490 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
134a0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d  ../*.** The bitm
134b0 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66  ask datatype def
134c0 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73  ined below is us
134d0 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f  ed for various o
134e0 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a  ptimizations..**
134f0 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69  .** Changing thi
13500 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20  s from a 64-bit 
13510 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65  to a 32-bit type
13520 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62   limits the numb
13530 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20  er of.** tables 
13540 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20  in a join to 32 
13550 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20  instead of 64.  
13560 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75  But it also redu
13570 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20  ces the size.** 
13580 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62  of the library b
13590 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69  y 738 bytes on i
135a0 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  x86..*/.typedef 
135b0 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a  u64 Bitmask;../*
135c0 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
135d0 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d  f bits in a Bitm
135e0 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e  ask.  "BMS" mean
135f0 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22  s "BitMask Size"
13600 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53  ..*/.#define BMS
13610 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
13620 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a  Bitmask)*8))../*
13630 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
13640 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  g structure desc
13650 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63  ribes the FROM c
13660 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
13670 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  T statement..** 
13680 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75  Each table or su
13690 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52  bquery in the FR
136a0 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73  OM clause is a s
136b0 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20  eparate element 
136c0 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73  of.** the SrcLis
136d0 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a  t.a[] array..**.
136e0 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69  ** With the addi
136f0 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65  tion of multiple
13700 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72   database suppor
13710 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  t, the following
13720 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61   structure.** ca
13730 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74  n also be used t
13740 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72  o describe a par
13750 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75  ticular table su
13760 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  ch as the table 
13770 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66  that.** is modif
13780 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54  ied by an INSERT
13790 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44  , DELETE, or UPD
137a0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ATE statement.  
137b0 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c  In standard SQL,
137c0 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65  .** such a table
137d0 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c   must be a simpl
137e0 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74  e name: ID.  But
137f0 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20   in SQLite, the 
13800 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77  table can.** now
13810 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62   be identified b
13820 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d  y a database nam
13830 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74  e, a dot, then t
13840 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49  he table name: I
13850 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  D.ID..**.** The 
13860 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20  jointype starts 
13870 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20  out showing the 
13880 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65  join type betwee
13890 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61  n the current ta
138a0 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e  ble.** and the n
138b0 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65  ext table on the
138c0 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73   list.  The pars
138d0 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69  er builds the li
138e0 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20  st this way..** 
138f0 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69  But sqlite3SrcLi
13900 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
13910 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74  ) later shifts t
13920 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20  he jointypes so 
13930 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69  that each.** joi
13940 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20  ntype expresses 
13950 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e  the join between
13960 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74   the table and t
13970 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c  he previous tabl
13980 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  e..**.** In the 
13990 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74  colUsed field, t
139a0 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
139b0 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65  t (bit 63) is se
139c0 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a  t if the table.*
139d0 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20  * contains more 
139e0 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20  than 63 columns 
139f0 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72  and the 64-th or
13a00 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73   later column is
13a10 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74   used..*/.struct
13a20 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 75 38 20   SrcList {.  u8 
13a30 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
13a40 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
13a50 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
13a60 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
13a70 65 20 2a 2f 0a 20 20 75 38 20 6e 41 6c 6c 6f 63  e */.  u8 nAlloc
13a80 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
13a90 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f   of entries allo
13aa0 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c  cated in a[] bel
13ab0 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53  ow */.  struct S
13ac0 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  rcList_item {.  
13ad0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
13ae0 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f  a;  /* Schema to
13af0 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d   which this item
13b00 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20   is fixed */.   
13b10 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65   char *zDatabase
13b20 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61  ;  /* Name of da
13b30 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74  tabase holding t
13b40 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
13b50 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
13b60 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
13b70 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  e table */.    c
13b80 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20  har *zAlias;    
13b90 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74   /* The "B" part
13ba0 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70   of a "A AS B" p
13bb0 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73  hrase.  zName is
13bc0 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20   the "A" */.    
13bd0 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
13be0 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c    /* An SQL tabl
13bf0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
13c00 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  to zName */.    
13c10 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
13c20 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74    /* A SELECT st
13c30 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20  atement used in 
13c40 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65  place of a table
13c50 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74   name */.    int
13c60 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f   addrFillSub;  /
13c70 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62  * Address of sub
13c80 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66  routine to manif
13c90 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a  est a subquery *
13ca0 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74  /.    int regRet
13cb0 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  urn;    /* Regis
13cc0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75  ter holding retu
13cd0 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64  rn address of ad
13ce0 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20  drFillSub */.   
13cf0 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20   u8 jointype;   
13d00 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f     /* Type of jo
13d10 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  in between this 
13d20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
13d30 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73  vious */.    uns
13d40 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64  igned notIndexed
13d50 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20   :1;    /* True 
13d60 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f  if there is a NO
13d70 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65  T INDEXED clause
13d80 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
13d90 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31   isCorrelated :1
13da0 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75  ;  /* True if su
13db0 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65  b-query is corre
13dc0 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73  lated */.    uns
13dd0 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69  igned viaCorouti
13de0 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65  ne :1;  /* Imple
13df0 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72  mented as a co-r
13e00 6f 75 74 69 6e 65 20 2a 2f 0a 23 69 66 6e 64 65  outine */.#ifnde
13e10 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
13e20 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65  PLAIN.    u8 iSe
13e30 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49  lectId;     /* I
13e40 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68  f pSelect!=0, th
13e50 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d  e id of the sub-
13e60 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f  select in EQP */
13e70 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20  .#endif.    int 
13e80 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a  iCursor;      /*
13e90 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
13ea0 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   number used to 
13eb0 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c  access this tabl
13ec0 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  e */.    Expr *p
13ed0 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  On;        /* Th
13ee0 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61  e ON clause of a
13ef0 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c   join */.    IdL
13f00 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f  ist *pUsing;   /
13f10 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75  * The USING clau
13f20 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
13f30 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55      Bitmask colU
13f40 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28  sed;  /* Bit N (
13f50 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c  1<<N) set if col
13f60 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73  umn N of pTab is
13f70 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61   used */.    cha
13f80 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f  r *zIndex;     /
13f90 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f  * Identifier fro
13fa0 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a  m "INDEXED BY <z
13fb0 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a  Index>" clause *
13fc0 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e  /.    Index *pIn
13fd0 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78  dex;    /* Index
13fe0 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65   structure corre
13ff0 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64  sponding to zInd
14000 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20  ex, if any */.  
14010 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
14020 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
14030 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69   for each identi
14040 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74  fier on the list
14050 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65   */.};../*.** Pe
14060 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f  rmitted values o
14070 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e  f the SrcList.a.
14080 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a  jointype field.*
14090 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e  /.#define JT_INN
140a0 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20  ER     0x0001   
140b0 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20   /* Any kind of 
140c0 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a  inner or cross j
140d0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
140e0 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30  T_CROSS     0x00
140f0 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69  02    /* Explici
14100 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f  t use of the CRO
14110 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  SS keyword */.#d
14120 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c  efine JT_NATURAL
14130 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
14140 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75  True for a "natu
14150 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ral" join */.#de
14160 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20  fine JT_LEFT    
14170 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c    0x0008    /* L
14180 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  eft outer join *
14190 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47  /.#define JT_RIG
141a0 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20  HT     0x0010   
141b0 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20   /* Right outer 
141c0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
141d0 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30  JT_OUTER     0x0
141e0 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f  020    /* The "O
141f0 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73  UTER" keyword is
14200 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66   present */.#def
14210 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20  ine JT_ERROR    
14220 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e   0x0040    /* un
14230 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f  known or unsuppo
14240 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a  rted join type *
14250 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 57 68 65 72  /.../*.** A Wher
14260 65 50 6c 61 6e 20 6f 62 6a 65 63 74 20 68 6f 6c  ePlan object hol
14270 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  ds information t
14280 68 61 74 20 64 65 73 63 72 69 62 65 73 20 61 20  hat describes a 
14290 6c 6f 6f 6b 75 70 0a 2a 2a 20 73 74 72 61 74 65  lookup.** strate
142a0 67 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  gy..**.** This o
142b0 62 6a 65 63 74 20 69 73 20 69 6e 74 65 6e 64 65  bject is intende
142c0 64 20 74 6f 20 62 65 20 6f 70 61 71 75 65 20 6f  d to be opaque o
142d0 75 74 73 69 64 65 20 6f 66 20 74 68 65 20 77 68  utside of the wh
142e0 65 72 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a 2a 2a  ere.c module..**
142f0 20 49 74 20 69 73 20 69 6e 63 6c 75 64 65 64 20   It is included 
14300 68 65 72 65 20 6f 6e 6c 79 20 73 6f 20 74 68 61  here only so tha
14310 74 20 74 68 61 74 20 63 6f 6d 70 69 6c 65 72 20  t that compiler 
14320 77 69 6c 6c 20 6b 6e 6f 77 20 68 6f 77 20 62 69  will know how bi
14330 67 20 69 74 0a 2a 2a 20 69 73 2e 20 20 4e 6f 6e  g it.** is.  Non
14340 65 20 6f 66 20 74 68 65 20 66 69 65 6c 64 73 20  e of the fields 
14350 69 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73  in this object s
14360 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 6f 75  hould be used ou
14370 74 73 69 64 65 20 6f 66 0a 2a 2a 20 74 68 65 20  tside of.** the 
14380 77 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a  where.c module..
14390 2a 2a 0a 2a 2a 20 57 69 74 68 69 6e 20 74 68 65  **.** Within the
143a0 20 75 6e 69 6f 6e 2c 20 70 49 64 78 20 69 73 20   union, pIdx is 
143b0 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 20 77  only used when w
143c0 73 46 6c 61 67 73 26 57 48 45 52 45 5f 49 4e 44  sFlags&WHERE_IND
143d0 45 58 45 44 20 69 73 20 74 72 75 65 2e 0a 2a 2a  EXED is true..**
143e0 20 70 54 65 72 6d 20 69 73 20 6f 6e 6c 79 20 75   pTerm is only u
143f0 73 65 64 20 77 68 65 6e 20 77 73 46 6c 61 67 73  sed when wsFlags
14400 26 57 48 45 52 45 5f 4d 55 4c 54 49 5f 4f 52 20  &WHERE_MULTI_OR 
14410 69 73 20 74 72 75 65 2e 20 20 41 6e 64 20 70 56  is true.  And pV
14420 74 61 62 49 64 78 0a 2a 2a 20 69 73 20 6f 6e 6c  tabIdx.** is onl
14430 79 20 75 73 65 64 20 77 68 65 6e 20 77 73 46 6c  y used when wsFl
14440 61 67 73 26 57 48 45 52 45 5f 56 49 52 54 55 41  ags&WHERE_VIRTUA
14450 4c 54 41 42 4c 45 20 69 73 20 74 72 75 65 2e 20  LTABLE is true. 
14460 20 49 74 20 69 73 20 6e 65 76 65 72 20 74 68 65   It is never the
14470 0a 2a 2a 20 63 61 73 65 20 74 68 61 74 20 6d 6f  .** case that mo
14480 72 65 20 74 68 61 6e 20 6f 6e 65 20 6f 66 20 74  re than one of t
14490 68 65 73 65 20 63 6f 6e 64 69 74 69 6f 6e 73 20  hese conditions 
144a0 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 73 74 72 75  is true..*/.stru
144b0 63 74 20 57 68 65 72 65 50 6c 61 6e 20 7b 0a 20  ct WherePlan {. 
144c0 20 75 33 32 20 77 73 46 6c 61 67 73 3b 20 20 20   u32 wsFlags;   
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 2f 2a 20 57 48 45 52 45 5f 2a 20 66 6c 61 67 73  /* WHERE_* flags
144f0 20 74 68 61 74 20 64 65 73 63 72 69 62 65 20 74   that describe t
14500 68 65 20 73 74 72 61 74 65 67 79 20 2a 2f 0a 20  he strategy */. 
14510 20 75 31 36 20 6e 45 71 3b 20 20 20 20 20 20 20   u16 nEq;       
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14530 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 3d 3d 20  /* Number of == 
14540 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
14550 20 75 31 36 20 6e 4f 42 53 61 74 3b 20 20 20 20   u16 nOBSat;    
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14570 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 52 44  /* Number of ORD
14580 45 52 20 42 59 20 74 65 72 6d 73 20 73 61 74 69  ER BY terms sati
14590 73 66 69 65 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  sfied */.  doubl
145a0 65 20 6e 52 6f 77 3b 20 20 20 20 20 20 20 20 20  e nRow;         
145b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74            /* Est
145c0 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
145d0 20 72 6f 77 73 20 28 66 6f 72 20 45 51 50 29 20   rows (for EQP) 
145e0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
145f0 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20   Index *pIdx;   
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14610 2f 2a 20 49 6e 64 65 78 20 77 68 65 6e 20 57 48  /* Index when WH
14620 45 52 45 5f 49 4e 44 45 58 45 44 20 69 73 20 74  ERE_INDEXED is t
14630 72 75 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  rue */.    struc
14640 74 20 57 68 65 72 65 54 65 72 6d 20 2a 70 54 65  t WhereTerm *pTe
14650 72 6d 3b 20 20 20 20 20 20 20 2f 2a 20 57 48 45  rm;       /* WHE
14660 52 45 20 63 6c 61 75 73 65 20 74 65 72 6d 20 66  RE clause term f
14670 6f 72 20 4f 52 2d 73 65 61 72 63 68 20 2a 2f 0a  or OR-search */.
14680 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 64 65      sqlite3_inde
14690 78 5f 69 6e 66 6f 20 2a 70 56 74 61 62 49 64 78  x_info *pVtabIdx
146a0 3b 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61  ;  /* Virtual ta
146b0 62 6c 65 20 69 6e 64 65 78 20 74 6f 20 75 73 65  ble index to use
146c0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
146d0 2a 0a 2a 2a 20 46 6f 72 20 65 61 63 68 20 6e 65  *.** For each ne
146e0 73 74 65 64 20 6c 6f 6f 70 20 69 6e 20 61 20 57  sted loop in a W
146f0 48 45 52 45 20 63 6c 61 75 73 65 20 69 6d 70 6c  HERE clause impl
14700 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20  ementation, the 
14710 57 68 65 72 65 49 6e 66 6f 0a 2a 2a 20 73 74 72  WhereInfo.** str
14720 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
14730 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63  a single instanc
14740 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
14750 75 72 65 2e 20 20 54 68 69 73 20 73 74 72 75 63  ure.  This struc
14760 74 75 72 65 0a 2a 2a 20 69 73 20 69 6e 74 65 6e  ture.** is inten
14770 64 65 64 20 74 6f 20 62 65 20 70 72 69 76 61 74  ded to be privat
14780 65 20 74 6f 20 74 68 65 20 77 68 65 72 65 2e 63  e to the where.c
14790 20 6d 6f 64 75 6c 65 20 61 6e 64 20 73 68 6f 75   module and shou
147a0 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61 63 63  ld not be.** acc
147b0 65 73 73 20 6f 72 20 6d 6f 64 69 66 69 65 64 20  ess or modified 
147c0 62 79 20 6f 74 68 65 72 20 6d 6f 64 75 6c 65 73  by other modules
147d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 49 64 78  ..**.** The pIdx
147e0 49 6e 66 6f 20 66 69 65 6c 64 20 69 73 20 75 73  Info field is us
147f0 65 64 20 74 6f 20 68 65 6c 70 20 70 69 63 6b 20  ed to help pick 
14800 74 68 65 20 62 65 73 74 20 69 6e 64 65 78 20 6f  the best index o
14810 6e 20 61 0a 2a 2a 20 76 69 72 74 75 61 6c 20 74  n a.** virtual t
14820 61 62 6c 65 2e 20 20 54 68 65 20 70 49 64 78 49  able.  The pIdxI
14830 6e 66 6f 20 70 6f 69 6e 74 65 72 20 63 6f 6e 74  nfo pointer cont
14840 61 69 6e 73 20 69 6e 64 65 78 69 6e 67 0a 2a 2a  ains indexing.**
14850 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72   information for
14860 20 74 68 65 20 69 2d 74 68 20 74 61 62 6c 65 20   the i-th table 
14870 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
14880 73 65 20 62 65 66 6f 72 65 20 72 65 6f 72 64 65  se before reorde
14890 72 69 6e 67 2e 0a 2a 2a 20 41 6c 6c 20 74 68 65  ring..** All the
148a0 20 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65   pIdxInfo pointe
148b0 72 73 20 61 72 65 20 66 72 65 65 64 20 62 79 20  rs are freed by 
148c0 77 68 65 72 65 49 6e 66 6f 46 72 65 65 28 29 20  whereInfoFree() 
148d0 69 6e 20 77 68 65 72 65 2e 63 2e 0a 2a 2a 20 41  in where.c..** A
148e0 6c 6c 20 6f 74 68 65 72 20 69 6e 66 6f 72 6d 61  ll other informa
148f0 74 69 6f 6e 20 69 6e 20 74 68 65 20 69 2d 74 68  tion in the i-th
14900 20 57 68 65 72 65 4c 65 76 65 6c 20 6f 62 6a 65   WhereLevel obje
14910 63 74 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20  ct for the i-th 
14920 74 61 62 6c 65 0a 2a 2a 20 61 66 74 65 72 20 46  table.** after F
14930 52 4f 4d 20 63 6c 61 75 73 65 20 6f 72 64 65 72  ROM clause order
14940 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  ing..*/.struct W
14950 68 65 72 65 4c 65 76 65 6c 20 7b 0a 20 20 57 68  hereLevel {.  Wh
14960 65 72 65 50 6c 61 6e 20 70 6c 61 6e 3b 20 20 20  erePlan plan;   
14970 20 20 20 20 2f 2a 20 71 75 65 72 79 20 70 6c 61      /* query pla
14980 6e 20 66 6f 72 20 74 68 69 73 20 65 6c 65 6d 65  n for this eleme
14990 6e 74 20 6f 66 20 74 68 65 20 46 52 4f 4d 20 63  nt of the FROM c
149a0 6c 61 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69  lause */.  int i
149b0 4c 65 66 74 4a 6f 69 6e 3b 20 20 20 20 20 20 20  LeftJoin;       
149c0 20 2f 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20   /* Memory cell 
149d0 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
149e0 74 20 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49  t LEFT OUTER JOI
149f0 4e 20 2a 2f 0a 20 20 69 6e 74 20 69 54 61 62 43  N */.  int iTabC
14a00 75 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ur;          /* 
14a10 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
14a20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
14a30 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  he table */.  in
14a40 74 20 69 49 64 78 43 75 72 3b 20 20 20 20 20 20  t iIdxCur;      
14a50 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
14a60 63 75 72 73 6f 72 20 75 73 65 64 20 74 6f 20 61  cursor used to a
14a70 63 63 65 73 73 20 70 49 64 78 20 2a 2f 0a 20 20  ccess pIdx */.  
14a80 69 6e 74 20 61 64 64 72 42 72 6b 3b 20 20 20 20  int addrBrk;    
14a90 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65        /* Jump he
14aa0 72 65 20 74 6f 20 62 72 65 61 6b 20 6f 75 74 20  re to break out 
14ab0 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20  of the loop */. 
14ac0 20 69 6e 74 20 61 64 64 72 4e 78 74 3b 20 20 20   int addrNxt;   
14ad0 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68         /* Jump h
14ae0 65 72 65 20 74 6f 20 73 74 61 72 74 20 74 68 65  ere to start the
14af0 20 6e 65 78 74 20 49 4e 20 63 6f 6d 62 69 6e 61   next IN combina
14b00 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 61 64  tion */.  int ad
14b10 64 72 43 6f 6e 74 3b 20 20 20 20 20 20 20 20 20  drCont;         
14b20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20  /* Jump here to 
14b30 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 74 68  continue with th
14b40 65 20 6e 65 78 74 20 6c 6f 6f 70 20 63 79 63 6c  e next loop cycl
14b50 65 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 46  e */.  int addrF
14b60 69 72 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  irst;        /* 
14b70 46 69 72 73 74 20 69 6e 73 74 72 75 63 74 69 6f  First instructio
14b80 6e 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 6f 66  n of interior of
14b90 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 75   the loop */.  u
14ba0 38 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20  8 iFrom;        
14bb0 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e       /* Which en
14bc0 74 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  try in the FROM 
14bd0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38 20 6f  clause */.  u8 o
14be0 70 2c 20 70 35 3b 20 20 20 20 20 20 20 20 20 20  p, p5;          
14bf0 20 20 2f 2a 20 4f 70 63 6f 64 65 20 61 6e 64 20    /* Opcode and 
14c00 50 35 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  P5 of the opcode
14c10 20 74 68 61 74 20 65 6e 64 73 20 74 68 65 20 6c   that ends the l
14c20 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 70 31 2c  oop */.  int p1,
14c30 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f   p2;           /
14c40 2a 20 4f 70 65 72 61 6e 64 73 20 6f 66 20 74 68  * Operands of th
14c50 65 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f  e opcode used to
14c60 20 65 6e 64 73 20 74 68 65 20 6c 6f 6f 70 20 2a   ends the loop *
14c70 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
14c80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66            /* Inf
14c90 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 64 65  ormation that de
14ca0 70 65 6e 64 73 20 6f 6e 20 70 6c 61 6e 2e 77 73  pends on plan.ws
14cb0 46 6c 61 67 73 20 2a 2f 0a 20 20 20 20 73 74 72  Flags */.    str
14cc0 75 63 74 20 7b 0a 20 20 20 20 20 20 69 6e 74 20  uct {.      int 
14cd0 6e 49 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  nIn;            
14ce0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
14cf0 6e 74 72 69 65 73 20 69 6e 20 61 49 6e 4c 6f 6f  ntries in aInLoo
14d00 70 5b 5d 20 2a 2f 0a 20 20 20 20 20 20 73 74 72  p[] */.      str
14d10 75 63 74 20 49 6e 4c 6f 6f 70 20 7b 0a 20 20 20  uct InLoop {.   
14d20 20 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20       int iCur;  
14d30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
14d40 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 75  he VDBE cursor u
14d50 73 65 64 20 62 79 20 74 68 69 73 20 49 4e 20 6f  sed by this IN o
14d60 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 20  perator */.     
14d70 20 20 20 69 6e 74 20 61 64 64 72 49 6e 54 6f 70     int addrInTop
14d80 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 70  ;         /* Top
14d90 20 6f 66 20 74 68 65 20 49 4e 20 6c 6f 6f 70 20   of the IN loop 
14da0 2a 2f 0a 20 20 20 20 20 20 20 20 75 38 20 65 45  */.        u8 eE
14db0 6e 64 4c 6f 6f 70 4f 70 3b 20 20 20 20 20 20 20  ndLoopOp;       
14dc0 20 20 2f 2a 20 49 4e 20 4c 6f 6f 70 20 74 65 72    /* IN Loop ter
14dd0 6d 69 6e 61 74 6f 72 2e 20 4f 50 5f 4e 65 78 74  minator. OP_Next
14de0 20 6f 72 20 4f 50 5f 50 72 65 76 20 2a 2f 0a 20   or OP_Prev */. 
14df0 20 20 20 20 20 7d 20 2a 61 49 6e 4c 6f 6f 70 3b       } *aInLoop;
14e00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
14e10 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
14e20 65 61 63 68 20 6e 65 73 74 65 64 20 49 4e 20 6f  each nested IN o
14e30 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 7d  perator */.    }
14e40 20 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20   in;            
14e50 20 20 20 20 20 2f 2a 20 55 73 65 64 20 77 68 65       /* Used whe
14e60 6e 20 70 6c 61 6e 2e 77 73 46 6c 61 67 73 26 57  n plan.wsFlags&W
14e70 48 45 52 45 5f 49 4e 5f 41 42 4c 45 20 2a 2f 0a  HERE_IN_ABLE */.
14e80 20 20 20 20 49 6e 64 65 78 20 2a 70 43 6f 76 69      Index *pCovi
14e90 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 73  dx;       /* Pos
14ea0 73 69 62 6c 65 20 63 6f 76 65 72 69 6e 67 20 69  sible covering i
14eb0 6e 64 65 78 20 66 6f 72 20 57 48 45 52 45 5f 4d  ndex for WHERE_M
14ec0 55 4c 54 49 5f 4f 52 20 2a 2f 0a 20 20 7d 20 75  ULTI_OR */.  } u
14ed0 3b 0a 20 20 64 6f 75 62 6c 65 20 72 4f 70 74 43  ;.  double rOptC
14ee0 6f 73 74 3b 20 20 20 20 20 20 2f 2a 20 22 4f 70  ost;      /* "Op
14ef0 74 69 6d 61 6c 22 20 63 6f 73 74 20 66 6f 72 20  timal" cost for 
14f00 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  this level */.  
14f10 73 74 72 75 63 74 20 57 68 65 72 65 4c 6f 6f 70  struct WhereLoop
14f20 20 2a 70 57 4c 6f 6f 70 3b 20 20 2f 2a 20 54 68   *pWLoop;  /* Th
14f30 65 20 73 65 6c 65 63 74 65 64 20 57 68 65 72 65  e selected Where
14f40 4c 6f 6f 70 20 6f 62 6a 65 63 74 20 2a 2f 0a 0a  Loop object */..
14f50 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
14f60 6e 67 20 66 69 65 6c 64 20 69 73 20 72 65 61 6c  ng field is real
14f70 6c 79 20 6e 6f 74 20 70 61 72 74 20 6f 66 20 74  ly not part of t
14f80 68 65 20 63 75 72 72 65 6e 74 20 6c 65 76 65 6c  he current level
14f90 2e 20 20 42 75 74 0a 20 20 2a 2a 20 77 65 20 6e  .  But.  ** we n
14fa0 65 65 64 20 61 20 70 6c 61 63 65 20 74 6f 20 63  eed a place to c
14fb0 61 63 68 65 20 76 69 72 74 75 61 6c 20 74 61 62  ache virtual tab
14fc0 6c 65 20 69 6e 64 65 78 20 69 6e 66 6f 72 6d 61  le index informa
14fd0 74 69 6f 6e 20 66 6f 72 20 65 61 63 68 0a 20 20  tion for each.  
14fe0 2a 2a 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ** virtual table
14ff0 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
15000 75 73 65 20 61 6e 64 20 74 68 65 20 57 68 65 72  use and the Wher
15010 65 4c 65 76 65 6c 20 73 74 72 75 63 74 75 72 65  eLevel structure
15020 20 69 73 0a 20 20 2a 2a 20 61 20 63 6f 6e 76 65   is.  ** a conve
15030 6e 69 65 6e 74 20 70 6c 61 63 65 20 73 69 6e 63  nient place sinc
15040 65 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 57  e there is one W
15050 68 65 72 65 4c 65 76 65 6c 20 66 6f 72 20 65 61  hereLevel for ea
15060 63 68 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 20  ch FROM clause. 
15070 20 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a   ** element..  *
15080 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  /.  sqlite3_inde
15090 78 5f 69 6e 66 6f 20 2a 70 49 64 78 49 6e 66 6f  x_info *pIdxInfo
150a0 3b 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 66 6f  ;  /* Index info
150b0 20 66 6f 72 20 6e 2d 74 68 20 73 6f 75 72 63 65   for n-th source
150c0 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   table */.};../*
150d0 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70  .** Flags approp
150e0 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63  riate for the wc
150f0 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74  trlFlags paramet
15100 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65  er of sqlite3Whe
15110 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64  reBegin().** and
15120 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77   the WhereInfo.w
15130 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72  ctrlFlags member
15140 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ..*/.#define WHE
15150 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41  RE_ORDERBY_NORMA
15160 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f  L   0x0000 /* No
15170 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  -op */.#define W
15180 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e  HERE_ORDERBY_MIN
15190 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20        0x0001 /* 
151a0 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
151b0 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75  ing for min() fu
151c0 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
151d0 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20  ERE_ORDERBY_MAX 
151e0 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f       0x0002 /* O
151f0 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
15200 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e  ng for max() fun
15210 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
15220 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52  RE_ONEPASS_DESIR
15230 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61  ED  0x0004 /* Wa
15240 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73  nt to do one-pas
15250 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20  s UPDATE/DELETE 
15260 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
15270 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20  _DUPLICATES_OK  
15280 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74    0x0008 /* Ok t
15290 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d  o return a row m
152a0 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f  ore than once */
152b0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
152c0 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20  MIT_OPEN_CLOSE  
152d0 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20  0x0010 /* Table 
152e0 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65  cursors are alre
152f0 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66  ady open */.#def
15300 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f  ine WHERE_FORCE_
15310 54 41 42 4c 45 20 20 20 20 20 20 30 78 30 30 32  TABLE      0x002
15320 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20  0 /* Do not use 
15330 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65  an index-only se
15340 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20  arch */.#define 
15350 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f  WHERE_ONETABLE_O
15360 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a  NLY    0x0040 /*
15370 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31   Only code the 1
15380 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62  st table in pTab
15390 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  List */.#define 
153a0 57 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20  WHERE_AND_ONLY  
153b0 20 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a         0x0080 /*
153c0 20 44 6f 6e 27 74 20 75 73 65 20 69 6e 64 69 63   Don't use indic
153d0 65 73 20 66 6f 72 20 4f 52 20 74 65 72 6d 73 20  es for OR terms 
153e0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
153f0 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20  _GROUPBY        
15400 20 20 30 78 30 31 30 30 20 2f 2a 20 70 4f 72 64    0x0100 /* pOrd
15410 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erBy is really a
15420 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 0a 2f 2a   GROUP BY */../*
15430 0a 2a 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c  .** The WHERE cl
15440 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 20  ause processing 
15450 72 6f 75 74 69 6e 65 20 68 61 73 20 74 77 6f 20  routine has two 
15460 68 61 6c 76 65 73 2e 20 20 54 68 65 0a 2a 2a 20  halves.  The.** 
15470 66 69 72 73 74 20 70 61 72 74 20 64 6f 65 73 20  first part does 
15480 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65  the start of the
15490 20 57 48 45 52 45 20 6c 6f 6f 70 20 61 6e 64 20   WHERE loop and 
154a0 74 68 65 20 73 65 63 6f 6e 64 0a 2a 2a 20 68 61  the second.** ha
154b0 6c 66 20 64 6f 65 73 20 74 68 65 20 74 61 69 6c  lf does the tail
154c0 20 6f 66 20 74 68 65 20 57 48 45 52 45 20 6c 6f   of the WHERE lo
154d0 6f 70 2e 20 20 41 6e 20 69 6e 73 74 61 6e 63 65  op.  An instance
154e0 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75   of.** this stru
154f0 63 74 75 72 65 20 69 73 20 72 65 74 75 72 6e 65  cture is returne
15500 64 20 62 79 20 74 68 65 20 66 69 72 73 74 20 68  d by the first h
15510 61 6c 66 20 61 6e 64 20 70 61 73 73 65 64 0a 2a  alf and passed.*
15520 2a 20 69 6e 74 6f 20 74 68 65 20 73 65 63 6f 6e  * into the secon
15530 64 20 68 61 6c 66 20 74 6f 20 67 69 76 65 20 73  d half to give s
15540 6f 6d 65 20 63 6f 6e 74 69 6e 75 69 74 79 2e 0a  ome continuity..
15550 2a 2f 0a 73 74 72 75 63 74 20 57 68 65 72 65 49  */.struct WhereI
15560 6e 66 6f 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  nfo {.  Parse *p
15570 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
15580 20 20 2f 2a 20 50 61 72 73 69 6e 67 20 61 6e 64    /* Parsing and
15590 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6e 67   code generating
155a0 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 53 72   context */.  Sr
155b0 63 4c 69 73 74 20 2a 70 54 61 62 4c 69 73 74 3b  cList *pTabList;
155c0 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
155d0 6f 66 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65  of tables in the
155e0 20 6a 6f 69 6e 20 2a 2f 0a 20 20 45 78 70 72 4c   join */.  ExprL
155f0 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
15600 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45       /* The ORDE
15610 52 20 42 59 20 63 6c 61 75 73 65 20 6f 72 20 4e  R BY clause or N
15620 55 4c 4c 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  ULL */.  ExprLis
15630 74 20 2a 70 44 69 73 74 69 6e 63 74 3b 20 20 20  t *pDistinct;   
15640 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 4f     /* DISTINCT O
15650 4e 20 76 61 6c 75 65 73 2c 20 6f 72 20 4e 55 4c  N values, or NUL
15660 4c 20 2a 2f 0a 20 20 42 69 74 6d 61 73 6b 20 72  L */.  Bitmask r
15670 65 76 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  evMask;         
15680 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 4f 52 44 45   /* Mask of ORDE
15690 52 20 42 59 20 74 65 72 6d 73 20 74 68 61 74 20  R BY terms that 
156a0 6e 65 65 64 20 72 65 76 65 72 73 69 6e 67 20 2a  need reversing *
156b0 2f 0a 20 20 75 31 36 20 6e 4f 42 53 61 74 3b 20  /.  u16 nOBSat; 
156c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
156d0 20 4e 75 6d 62 65 72 20 6f 66 20 4f 52 44 45 52   Number of ORDER
156e0 20 42 59 20 74 65 72 6d 73 20 73 61 74 69 73 66   BY terms satisf
156f0 69 65 64 20 62 79 20 69 6e 64 69 63 65 73 20 2a  ied by indices *
15700 2f 0a 20 20 75 31 36 20 77 63 74 72 6c 46 6c 61  /.  u16 wctrlFla
15710 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gs;           /*
15720 20 46 6c 61 67 73 20 6f 72 69 67 69 6e 61 6c 6c   Flags originall
15730 79 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69  y passed to sqli
15740 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 20  te3WhereBegin() 
15750 2a 2f 0a 20 20 75 38 20 6f 6b 4f 6e 65 50 61 73  */.  u8 okOnePas
15760 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
15770 2a 20 4f 6b 20 74 6f 20 75 73 65 20 6f 6e 65 2d  * Ok to use one-
15780 70 61 73 73 20 61 6c 67 6f 72 69 74 68 6d 20 66  pass algorithm f
15790 6f 72 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  or UPDATE/DELETE
157a0 20 2a 2f 0a 20 20 75 38 20 75 6e 74 65 73 74 65   */.  u8 unteste
157b0 64 54 65 72 6d 73 3b 20 20 20 20 20 20 20 20 20  dTerms;         
157c0 2f 2a 20 4e 6f 74 20 61 6c 6c 20 57 48 45 52 45  /* Not all WHERE
157d0 20 74 65 72 6d 73 20 72 65 73 6f 6c 76 65 64 20   terms resolved 
157e0 62 79 20 6f 75 74 65 72 20 6c 6f 6f 70 20 2a 2f  by outer loop */
157f0 0a 20 20 75 38 20 65 44 69 73 74 69 6e 63 74 3b  .  u8 eDistinct;
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15810 4f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 52 45  One of the WHERE
15820 5f 44 49 53 54 49 4e 43 54 5f 2a 20 76 61 6c 75  _DISTINCT_* valu
15830 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 6e  es below */.  in
15840 74 20 69 54 6f 70 3b 20 20 20 20 20 20 20 20 20  t iTop;         
15850 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
15860 65 72 79 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  ery beginning of
15870 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 20   the WHERE loop 
15880 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6e 74 69 6e  */.  int iContin
15890 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ue;            /
158a0 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 63  * Jump here to c
158b0 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 6e 65 78  ontinue with nex
158c0 74 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  t record */.  in
158d0 74 20 69 42 72 65 61 6b 3b 20 20 20 20 20 20 20  t iBreak;       
158e0 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20          /* Jump 
158f0 68 65 72 65 20 74 6f 20 62 72 65 61 6b 20 6f 75  here to break ou
15900 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f  t of the loop */
15910 0a 20 20 69 6e 74 20 6e 4c 65 76 65 6c 3b 20 20  .  int nLevel;  
15920 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15930 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
15940 20 6c 6f 6f 70 20 2a 2f 0a 20 20 73 74 72 75 63   loop */.  struc
15950 74 20 57 68 65 72 65 43 6c 61 75 73 65 20 2a 70  t WhereClause *p
15960 57 43 3b 20 20 2f 2a 20 44 65 63 6f 6d 70 6f 73  WC;  /* Decompos
15970 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 57 48 45  ition of the WHE
15980 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73  RE clause */.  s
15990 74 72 75 63 74 20 57 68 65 72 65 4c 6f 6f 70 20  truct WhereLoop 
159a0 2a 70 4c 6f 6f 70 73 3b 20 2f 2a 20 4c 69 73 74  *pLoops; /* List
159b0 20 6f 66 20 61 6c 6c 20 57 68 65 72 65 4c 6f 6f   of all WhereLoo
159c0 70 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 64  p objects */.  d
159d0 6f 75 62 6c 65 20 73 61 76 65 64 4e 51 75 65 72  ouble savedNQuer
159e0 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20 70 50 61 72  yLoop;   /* pPar
159f0 73 65 2d 3e 6e 51 75 65 72 79 4c 6f 6f 70 20 6f  se->nQueryLoop o
15a00 75 74 73 69 64 65 20 74 68 65 20 57 48 45 52 45  utside the WHERE
15a10 20 6c 6f 6f 70 20 2a 2f 0a 20 20 64 6f 75 62 6c   loop */.  doubl
15a20 65 20 6e 52 6f 77 4f 75 74 3b 20 20 20 20 20 20  e nRowOut;      
15a30 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
15a40 64 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74 70  d number of outp
15a50 75 74 20 72 6f 77 73 20 2a 2f 0a 20 20 57 68 65  ut rows */.  Whe
15a60 72 65 4c 65 76 65 6c 20 61 5b 31 5d 3b 20 20 20  reLevel a[1];   
15a70 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
15a80 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
15a90 20 6e 65 73 74 20 6c 6f 6f 70 20 69 6e 20 57 48   nest loop in WH
15aa0 45 52 45 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c  ERE */.};../* Al
15ab0 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
15ac0 20 57 68 65 72 65 49 6e 66 6f 2e 65 44 69 73 74   WhereInfo.eDist
15ad0 69 6e 63 74 20 61 6e 64 20 44 69 73 74 69 6e 63  inct and Distinc
15ae0 74 43 74 78 2e 65 54 6e 63 74 54 79 70 65 20 2a  tCtx.eTnctType *
15af0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
15b00 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20  DISTINCT_NOOP   
15b10 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43     0  /* DISTINC
15b20 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73  T keyword not us
15b30 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ed */.#define WH
15b40 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49  ERE_DISTINCT_UNI
15b50 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20  QUE    1  /* No 
15b60 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64  duplicates */.#d
15b70 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
15b80 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32  INCT_ORDERED   2
15b90 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61    /* All duplica
15ba0 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74  tes are adjacent
15bb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
15bc0 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44  E_DISTINCT_UNORD
15bd0 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69  ERED 3  /* Dupli
15be0 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74 65  cates are scatte
15bf0 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  red */../*.** A 
15c00 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69  NameContext defi
15c10 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e  nes a context in
15c20 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76   which to resolv
15c30 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75  e table and colu
15c40 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68  mn.** names.  Th
15c50 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73  e context consis
15c60 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20  ts of a list of 
15c70 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72 63  tables (the pSrc
15c80 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a  List) field and.
15c90 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d  ** a list of nam
15ca0 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70  ed expression (p
15cb0 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d  EList).  The nam
15cc0 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  ed expression li
15cd0 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c  st may.** be NUL
15ce0 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f 72  L.  The pSrc cor
15cf0 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
15d00 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
15d10 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f   SELECT or.** to
15d20 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
15d30 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20   operated on by 
15d40 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20  INSERT, UPDATE, 
15d50 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a  or DELETE.  The.
15d60 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73  ** pEList corres
15d70 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73  ponds to the res
15d80 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c  ult set of a SEL
15d90 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20  ECT and is NULL 
15da0 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61  for.** other sta
15db0 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e  tements..**.** N
15dc0 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20  ameContexts can 
15dd0 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e  be nested.  When
15de0 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
15df0 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74  , the inner-most
15e00 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20   .** context is 
15e10 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20  searched first. 
15e20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20   If no match is 
15e30 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20  found, the next 
15e40 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74  outer.** context
15e50 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66   is checked.  If
15e60 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20   there is still 
15e70 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65  no match, the ne
15e80 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73  xt context.** is
15e90 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20   checked.  This 
15ea0 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65  process continue
15eb0 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61  s until either a
15ec0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a   match is found.
15ed0 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78  ** or all contex
15ee0 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57  ts are check.  W
15ef0 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66  hen a match is f
15f00 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d  ound, the nRef m
15f10 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20  ember of.** the 
15f20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69  context containi
15f30 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20  ng the match is 
15f40 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a  incremented. .**
15f50 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72  .** Each subquer
15f60 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d  y gets a new Nam
15f70 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70  eContext.  The p
15f80 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74  Next field point
15f90 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  s to the.** Name
15fa0 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70  Context in the p
15fb0 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68  arent query.  Th
15fc0 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f  us the process o
15fd0 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a  f scanning the.*
15fe0 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69  * NameContext li
15ff0 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
16000 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f  o searching thro
16010 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79  ugh successively
16020 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65   outer.** subque
16030 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  ries looking for
16040 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72   a match..*/.str
16050 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
16060 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
16070 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  e;       /* The 
16080 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c  parser */.  SrcL
16090 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
160a0 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
160b0 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72  tables used to r
160c0 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a  esolve names */.
160d0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
160e0 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e  st;    /* Option
160f0 61 6c 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64  al list of named
16100 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
16110 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
16120 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  nfo;   /* Inform
16130 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72  ation about aggr
16140 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c  egates at this l
16150 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f  evel */.  NameCo
16160 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f  ntext *pNext;  /
16170 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d  * Next outer nam
16180 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c  e context.  NULL
16190 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a   for outermost *
161a0 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
161b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
161c0 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f  er of names reso
161d0 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e  lved by this con
161e0 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  text */.  int nE
161f0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
16200 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
16210 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77  rs encountered w
16220 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e  hile resolving n
16230 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20 6e 63 46  ames */.  u8 ncF
16240 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
16250 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e  * Zero or more N
16260 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  C_* flags define
16270 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f  d below */.};../
16280 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
16290 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65  ues for the Name
162a0 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73  Context, ncFlags
162b0 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
162c0 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20  ne NC_AllowAgg  
162d0 30 78 30 31 20 20 20 20 2f 2a 20 41 67 67 72 65  0x01    /* Aggre
162e0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  gate functions a
162f0 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20  re allowed here 
16300 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61  */.#define NC_Ha
16310 73 41 67 67 20 20 20 20 30 78 30 32 20 20 20 20  sAgg    0x02    
16320 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  /* One or more a
16330 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
16340 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ns seen */.#defi
16350 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20  ne NC_IsCheck   
16360 30 78 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20  0x04    /* True 
16370 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  if resolving nam
16380 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f  es in a CHECK co
16390 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
163a0 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63  ine NC_InAggFunc
163b0 20 30 78 30 38 20 20 20 20 2f 2a 20 54 72 75 65   0x08    /* True
163c0 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72   if analyzing ar
163d0 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67  guments to an ag
163e0 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  g func */.#defin
163f0 65 20 4e 43 5f 41 73 4d 61 79 62 65 20 20 20 30  e NC_AsMaybe   0
16400 78 31 30 20 20 20 20 2f 2a 20 52 65 73 6f 6c 76  x10    /* Resolv
16410 65 20 74 6f 20 41 53 20 74 65 72 6d 73 20 6f 66  e to AS terms of
16420 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
16430 6f 6e 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20  only.           
16440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16450 20 20 2a 2a 20 69 66 20 6e 6f 20 6f 74 68 65 72    ** if no other
16460 20 72 65 73 6f 6c 75 74 69 6f 6e 20 69 73 20 61   resolution is a
16470 76 61 69 6c 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a  vailable */../*.
16480 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
16490 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
164a0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
164b0 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69  ns all informati
164c0 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20  on.** needed to 
164d0 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f  generate code fo
164e0 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  r a single SELEC
164f0 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a  T statement..**.
16500 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74  ** nLimit is set
16510 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20   to -1 if there 
16520 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75  is no LIMIT clau
16530 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20  se.  nOffset is 
16540 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20  set to 0..** If 
16550 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54  there is a LIMIT
16560 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72   clause, the par
16570 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20  ser sets nLimit 
16580 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
16590 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64  the.** limit and
165a0 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20   nOffset to the 
165b0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66  value of the off
165c0 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65  set (or 0 if the
165d0 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66  re is not.** off
165e0 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72  set).  But later
165f0 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20   on, nLimit and 
16600 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74  nOffset become t
16610 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
16620 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44  ons.** in the VD
16630 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74  BE that record t
16640 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66  he limit and off
16650 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a  set counters..**
16660 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
16670 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
16680 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
16690 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
166a0 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
166b0 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
166c0 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
166d0 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
166e0 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
166f0 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
16700 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
16710 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
16720 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
16730 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
16740 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
16750 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
16760 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
16770 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
16780 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
16790 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
167a0 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
167b0 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
167c0 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
167d0 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
167e0 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
167f0 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
16800 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
16810 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
16820 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
16830 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
16840 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
16850 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
16860 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  or addrOpenEphm[
16870 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
16880 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
16890 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
168a0 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
168b0 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
168c0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
168d0 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
168e0 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
168f0 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16910 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
16920 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
16930 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
16940 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c  T */.  u16 selFl
16950 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
16960 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61   Various SF_* va
16970 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c  lues */.  int iL
16980 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20  imit, iOffset;  
16990 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
169a0 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d  ters holding LIM
169b0 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e  IT & OFFSET coun
169c0 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64  ters */.  int ad
169d0 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b 20 20  drOpenEphm[3];  
169e0 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
169f0 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
16a00 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
16a10 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 53 65 6c  */.  double nSel
16a20 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45  ectRow;     /* E
16a30 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
16a40 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a  of result rows *
16a50 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
16a60 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
16a70 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
16a80 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
16a90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
16aa0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
16ab0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
16ac0 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
16ad0 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
16ae0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
16af0 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
16b00 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
16b10 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
16b20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
16b30 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
16b40 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
16b50 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
16b60 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
16b70 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
16b80 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
16b90 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
16ba0 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
16bb0 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
16bc0 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
16bd0 6f 75 6e 64 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ound */.  Select
16be0 20 2a 70 52 69 67 68 74 6d 6f 73 74 3b 20 20 20   *pRightmost;   
16bf0 20 2f 2a 20 52 69 67 68 74 2d 6d 6f 73 74 20 73   /* Right-most s
16c00 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f  elect in a compo
16c10 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65  und select state
16c20 6d 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ment */.  Expr *
16c30 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
16c40 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
16c50 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
16c60 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
16c70 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20  Expr *pOffset;  
16c80 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54         /* OFFSET
16c90 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
16ca0 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
16cb0 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  . */.};../*.** A
16cc0 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
16cd0 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67  r Select.selFlag
16ce0 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65  s.  The "SF" pre
16cf0 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  fix stands for.*
16d00 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e  * "Select Flag".
16d10 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44  .*/.#define SF_D
16d20 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 20 30  istinct        0
16d30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74  x0001  /* Output
16d40 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49   should be DISTI
16d50 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NCT */.#define S
16d60 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20  F_Resolved      
16d70 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65    0x0002  /* Ide
16d80 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65  ntifiers have be
16d90 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23  en resolved */.#
16da0 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67  define SF_Aggreg
16db0 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30 34  ate       0x0004
16dc0 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67    /* Contains ag
16dd0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
16de0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
16df0 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20  UsesEphemeral   
16e00 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20  0x0008  /* Uses 
16e10 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  the OpenEphemera
16e20 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66  l opcode */.#def
16e30 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20  ine SF_Expanded 
16e40 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20 2f         0x0010  /
16e50 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  * sqlite3SelectE
16e60 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f  xpand() called o
16e70 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e  n this */.#defin
16e80 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f  e SF_HasTypeInfo
16e90 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20       0x0020  /* 
16ea0 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20  FROM subqueries 
16eb0 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64  have Table metad
16ec0 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ata */.#define S
16ed0 46 5f 55 73 65 53 6f 72 74 65 72 20 20 20 20 20  F_UseSorter     
16ee0 20 20 30 78 30 30 34 30 20 20 2f 2a 20 53 6f 72    0x0040  /* Sor
16ef0 74 20 75 73 69 6e 67 20 61 20 73 6f 72 74 65 72  t using a sorter
16f00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56   */.#define SF_V
16f10 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 30  alues          0
16f20 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68 65  x0080  /* Synthe
16f30 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45  sized from VALUE
16f40 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  S clause */.#def
16f50 69 6e 65 20 53 46 5f 4d 61 74 65 72 69 61 6c 69  ine SF_Materiali
16f60 7a 65 20 20 20 20 20 30 78 30 31 30 30 20 20 2f  ze     0x0100  /
16f70 2a 20 46 6f 72 63 65 20 6d 61 74 65 72 69 61 6c  * Force material
16f80 69 7a 61 74 69 6f 6e 20 6f 66 20 76 69 65 77 73  ization of views
16f90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e   */.#define SF_N
16fa0 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30  estedFrom      0
16fb0 78 30 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  x0200  /* Part o
16fc0 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  f a parenthesize
16fd0 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  d FROM clause */
16fe0 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73  .../*.** The res
16ff0 75 6c 74 73 20 6f 66 20 61 20 73 65 6c 65 63 74  ults of a select
17000 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75   can be distribu
17010 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  ted in several w
17020 61 79 73 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52  ays.  The.** "SR
17030 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20  T" prefix means 
17040 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 20 54  "SELECT Result T
17050 79 70 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ype"..*/.#define
17060 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
17070 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
17080 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
17090 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
170a0 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
170b0 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
170c0 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
170d0 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
170e0 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
170f0 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
17100 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
17110 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
17120 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
17130 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
17140 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
17150 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
17160 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f  ere */../* The O
17170 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
17180 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c  s ignored for al
17190 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a  l of the above *
171a0 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61  /.#define Ignora
171b0 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28  bleOrderby(X) ((
171c0 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44  X->eDest)<=SRT_D
171d0 69 73 63 61 72 64 29 0a 0a 23 64 65 66 69 6e 65  iscard)..#define
171e0 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
171f0 20 20 35 20 20 2f 2a 20 4f 75 74 70 75 74 20 65    5  /* Output e
17200 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
17210 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
17220 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 20 36 20  _Mem          6 
17230 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
17240 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
17250 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
17260 5f 53 65 74 20 20 20 20 20 20 20 20 20 20 37 20  _Set          7 
17270 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
17280 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  s as keys in an 
17290 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
172a0 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
172b0 20 20 38 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    8  /* Store re
172c0 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
172d0 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
172e0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
172f0 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
17300 20 39 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72   9  /* Create tr
17310 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
17320 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
17330 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
17340 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
17350 31 30 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  10  /* Generate 
17360 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
17370 72 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  result */../*.**
17380 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
17390 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63  this object desc
173a0 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70  ribes where to p
173b0 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ut of the result
173c0 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54  s of.** a SELECT
173d0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
173e0 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
173f0 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20   {.  u8 eDest;  
17400 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f         /* How to
17410 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20   dispose of the 
17420 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20  results.  On of 
17430 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a  SRT_* above. */.
17440 20 20 63 68 61 72 20 61 66 66 53 64 73 74 3b 20    char affSdst; 
17450 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
17460 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d  used when eDest=
17470 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e  =SRT_Set */.  in
17480 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20  t iSDParm;      
17490 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
174a0 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
174b0 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
174c0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
174d0 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
174e0 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72  register where r
174f0 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74  esults are writt
17500 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73  en */.  int nSds
17510 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  t;        /* Num
17520 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
17530 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b   allocated */.};
17540 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63  ../*.** During c
17550 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  ode generation o
17560 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  f statements tha
17570 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74  t do inserts int
17580 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  o AUTOINCREMENT 
17590 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20  .** tables, the 
175a0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d  following inform
175b0 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65  ation is attache
175c0 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75  d to the Table.u
175d0 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f  .autoInc.p.** po
175e0 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75  inter of each au
175f0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c  toincrement tabl
17600 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65  e to record some
17610 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f   side informatio
17620 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f  n that.** the co
17630 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65  de generator nee
17640 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20  ds.  We have to 
17650 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61  keep per-table a
17660 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20  utoincrement.** 
17670 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63  information in c
17680 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20  ase inserts are 
17690 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67  down within trig
176a0 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20  gers.  Triggers 
176b0 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c  do not.** normal
176c0 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  ly coordinate th
176d0 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20  eir activities, 
176e0 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74  but we do need t
176f0 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  o coordinate the
17700 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20  .** loading and 
17710 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e  saving of autoin
17720 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74  crement informat
17730 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ion..*/.struct A
17740 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41  utoincInfo {.  A
17750 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78  utoincInfo *pNex
17760 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66  t;   /* Next inf
17770 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73  o block in a lis
17780 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f  t of them all */
17790 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
177a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
177b0 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63  e this info bloc
177c0 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20  k refers to */. 
177d0 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
177e0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
177f0 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
17800 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
17810 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69  ding pTab */.  i
17820 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20  nt regCtr;      
17830 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72       /* Memory r
17840 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
17850 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65  the rowid counte
17860 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  r */.};../*.** S
17870 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ize of the colum
17880 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64  n cache.*/.#ifnd
17890 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  ef SQLITE_N_COLC
178a0 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51  ACHE.# define SQ
178b0 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20  LITE_N_COLCACHE 
178c0 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  10.#endif../*.**
178d0 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e   At least one in
178e0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
178f0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
17900 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
17910 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65   each .** trigge
17920 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69  r that may be fi
17930 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e  red while parsin
17940 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44  g an INSERT, UPD
17950 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a  ATE or DELETE.**
17960 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20   statement. All 
17970 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65  such objects are
17980 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c   stored in the l
17990 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
179a0 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54  d at.** Parse.pT
179b0 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65  riggerPrg and de
179c0 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65  leted once state
179d0 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  ment compilation
179e0 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d   has been.** com
179f0 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  pleted..**.** A 
17a00 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d  Vdbe sub-program
17a10 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
17a20 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48   the body and WH
17a30 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69  EN clause of tri
17a40 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50  gger.** TriggerP
17a50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73  rg.pTrigger, ass
17a60 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20  uming a default 
17a70 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
17a80 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72  se of.** Trigger
17a90 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73  Prg.orconf, is s
17aa0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69  tored in the Tri
17ab0 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d  ggerPrg.pProgram
17ac0 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68   variable..** Th
17ad0 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  e Parse.pTrigger
17ae0 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63  Prg list never c
17af0 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72  ontains two entr
17b00 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ies with the sam
17b10 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20  e.** values for 
17b20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e  both pTrigger an
17b30 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20  d orconf..**.** 
17b40 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  The TriggerPrg.a
17b50 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61  Colmask[0] varia
17b60 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20  ble is set to a 
17b70 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  mask of old.* co
17b80 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65  lumns.** accesse
17b90 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66  d (or set to 0 f
17ba0 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65  or triggers fire
17bb0 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66  d as a result of
17bc0 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74   INSERT .** stat
17bd0 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72  ements). Similar
17be0 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50  ly, the TriggerP
17bf0 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76  rg.aColmask[1] v
17c00 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
17c10 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e  o.** a mask of n
17c20 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65  ew.* columns use
17c30 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
17c40 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  ..*/.struct Trig
17c50 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67  gerPrg {.  Trigg
17c60 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
17c70 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68     /* Trigger th
17c80 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63  is program was c
17c90 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54  oded from */.  T
17ca0 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74  riggerPrg *pNext
17cb0 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65  ;      /* Next e
17cc0 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54  ntry in Parse.pT
17cd0 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a  riggerPrg list *
17ce0 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
17cf0 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50  pProgram;   /* P
17d00 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74  rogram implement
17d10 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63  ing pTrigger/orc
17d20 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63  onf */.  int orc
17d30 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  onf;            
17d40 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
17d50 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a  ONFLICT policy *
17d60 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b  /.  u32 aColmask
17d70 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  [2];        /* M
17d80 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e  asks of old.*, n
17d90 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63  ew.* columns acc
17da0 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  essed */.};../*.
17db0 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64  ** The yDbMask d
17dc0 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20  atatype for the 
17dd0 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61  bitmask of all a
17de0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
17df0 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  s..*/.#if SQLITE
17e00 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
17e10 0a 20 20 74 79 70 65 64 65 66 20 73 71 6c 69 74  .  typedef sqlit
17e20 65 33 5f 75 69 6e 74 36 34 20 79 44 62 4d 61 73  e3_uint64 yDbMas
17e30 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  k;.#else.  typed
17e40 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  ef unsigned int 
17e50 79 44 62 4d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a  yDbMask;.#endif.
17e60 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61  ./*.** An SQL pa
17e70 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41  rser context.  A
17e80 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74   copy of this st
17e90 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
17ea0 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65  d through.** the
17eb0 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e   parser and down
17ec0 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61   into all the pa
17ed0 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74  rser action rout
17ee0 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ine in order to.
17ef0 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20  ** carry around 
17f00 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
17f10 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
17f20 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a  e entire parse..
17f30 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74  **.** The struct
17f40 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69  ure is divided i
17f50 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20  nto two parts.  
17f60 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20  When the parser 
17f70 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65  and code.** gene
17f80 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65  rate call themse
17f90 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79  lves recursively
17fa0 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74  , the first part
17fb0 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
17fc0 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74  e.** is constant
17fd0 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20   but the second 
17fe0 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74  part is reset at
17ff0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61   the beginning a
18000 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63  nd end of.** eac
18010 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a  h recursion..**.
18020 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63  ** The nTableLoc
18030 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b  k and aTableLock
18040 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
18050 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20  nly used if the 
18060 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a  shared-cache .**
18070 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
18080 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54  led (if sqlite3T
18090 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44  sd()->useSharedD
180a0 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68  ata is true). Th
180b0 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  ey are.** used t
180c0 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20  o store the set 
180d0 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72  of table-locks r
180e0 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
180f0 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a  tatement being.*
18100 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63  * compiled. Func
18110 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c  tion sqlite3Tabl
18120 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20  eLock() is used 
18130 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74  to add entries t
18140 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a  o the.** list..*
18150 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b  /.struct Parse {
18160 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
18170 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
18180 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72  ain database str
18190 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72  ucture */.  char
181a0 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
181b0 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73   /* An error mes
181c0 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a  sage */.  Vdbe *
181d0 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f  pVdbe;         /
181e0 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20  * An engine for 
181f0 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61  executing databa
18200 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20  se bytecode */. 
18210 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
18220 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
18230 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74  code from execut
18240 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e  ion */.  u8 colN
18250 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a  amesSet;      /*
18260 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43   TRUE after OP_C
18270 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65  olumnName has be
18280 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64  en issued to pVd
18290 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b  be */.  u8 check
182a0 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20  Schema;      /* 
182b0 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f  Causes schema co
182c0 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72  okie check after
182d0 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75   an error */.  u
182e0 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20  8 nested;       
182f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18300 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
18310 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65   the parser/code
18320 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
18330 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20  u8 nTempReg;    
18340 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
18350 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  f temporary regi
18360 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65  sters in aTempRe
18370 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  g[] */.  u8 nTem
18380 70 49 6e 55 73 65 3b 20 20 20 20 20 20 20 2f 2a  pInUse;       /*
18390 20 4e 75 6d 62 65 72 20 6f 66 20 61 54 65 6d 70   Number of aTemp
183a0 52 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c 79 20  Reg[] currently 
183b0 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
183c0 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20   u8 nColCache;  
183d0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
183e0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  of entries in aC
183f0 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 75  olCache[] */.  u
18400 38 20 69 43 6f 6c 43 61 63 68 65 3b 20 20 20 20  8 iColCache;    
18410 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
18420 79 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d  y in aColCache[]
18430 20 74 6f 20 72 65 70 6c 61 63 65 20 2a 2f 0a 20   to replace */. 
18440 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
18450 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
18460 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
18470 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
18480 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
18490 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
184a0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
184b0 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
184c0 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
184d0 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  eption */.  int 
184e0 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20  aTempReg[8];    
184f0 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61   /* Holding area
18500 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72   for temporary r
18510 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e  egisters */.  in
18520 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t nRangeReg;    
18530 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
18540 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  e temporary regi
18550 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
18560 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20  int iRangeReg;  
18570 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
18580 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72  gister in tempor
18590 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
185a0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ck */.  int nErr
185b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
185c0 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
185d0 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
185e0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
185f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65  /* Number of pre
18600 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65  viously allocate
18610 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a  d VDBE cursors *
18620 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
18630 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
18640 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
18650 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ls used so far *
18660 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20  /.  int nSet;   
18670 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
18680 65 72 20 6f 66 20 73 65 74 73 20 75 73 65 64 20  er of sets used 
18690 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
186a0 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20  nOnce;          
186b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50   /* Number of OP
186c0 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f  _Once instructio
186d0 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ns so far */.  i
186e0 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20  nt ckBase;      
186f0 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
18700 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72  ster of data dur
18710 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  ing check constr
18720 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69  aints */.  int i
18730 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20  CacheLevel;     
18740 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69  /* ColCache vali
18750 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65  d when aColCache
18760 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68  [].iLevel<=iCach
18770 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20  eLevel */.  int 
18780 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20  iCacheCnt;      
18790 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64   /* Counter used
187a0 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f   to generate aCo
187b0 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c  lCache[].lru val
187c0 75 65 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ues */.  struct 
187d0 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20  yColCache {.    
187e0 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
187f0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
18800 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
18810 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
18820 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
18830 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  le column number
18840 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52   */.    u8 tempR
18850 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  eg;           /*
18860 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20   iReg is a temp 
18870 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65  register that ne
18880 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20  eds to be freed 
18890 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65  */.    int iLeve
188a0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
188b0 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f  Nesting level */
188c0 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20  .    int iReg;  
188d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
188e0 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20  g with value of 
188f0 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d  this column. 0 m
18900 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20  eans none. */.  
18910 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20    int lru;      
18920 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74          /* Least
18930 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65   recently used e
18940 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61  ntry has the sma
18950 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20  llest value */. 
18960 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c   } aColCache[SQL
18970 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b  ITE_N_COLCACHE];
18980 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63    /* One for eac
18990 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65  h column cache e
189a0 6e 74 72 79 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ntry */.  yDbMas
189b0 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f  k writeMask;   /
189c0 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20  * Start a write 
189d0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
189e0 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a  hese databases *
189f0 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b  /.  yDbMask cook
18a00 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d  ieMask;  /* Bitm
18a10 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65  ask of schema ve
18a20 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73  rified databases
18a30 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65   */.  int cookie
18a40 47 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20 41 64  Goto;      /* Ad
18a50 64 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f 74 6f  dress of OP_Goto
18a60 20 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72 69 66   to cookie verif
18a70 69 65 72 20 73 75 62 72 6f 75 74 69 6e 65 20 2a  ier subroutine *
18a80 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61  /.  int cookieVa
18a90 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41  lue[SQLITE_MAX_A
18aa0 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20  TTACHED+2];  /* 
18ab0 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65  Values of cookie
18ac0 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20  s to verify */. 
18ad0 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20   int regRowid;  
18ae0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
18af0 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20  r holding rowid 
18b00 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  of CREATE TABLE 
18b10 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72  entry */.  int r
18b20 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20  egRoot;         
18b30 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
18b40 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  ing root page nu
18b50 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a  mber for new obj
18b60 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  ects */.  int nM
18b70 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f  axArg;         /
18b80 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65  * Max args passe
18b90 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69  d to user functi
18ba0 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61  on by sub-progra
18bb0 6d 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e  m */.  Token con
18bc0 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e  straintName;/* N
18bd0 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74  ame of the const
18be0 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20  raint currently 
18bf0 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a  being parsed */.
18c00 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
18c10 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
18c20 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63  .  int nTableLoc
18c30 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  k;        /* Num
18c40 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20  ber of locks in 
18c50 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20  aTableLock */.  
18c60 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c  TableLock *aTabl
18c70 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72  eLock; /* Requir
18c80 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66  ed table locks f
18c90 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
18ca0 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  mode */.#endif. 
18cb0 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41   AutoincInfo *pA
18cc0 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  inc;  /* Informa
18cd0 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49  tion about AUTOI
18ce0 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72  NCREMENT counter
18cf0 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72  s */..  /* Infor
18d00 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c  mation used whil
18d10 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72  e coding trigger
18d20 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20   programs. */.  
18d30 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c  Parse *pToplevel
18d40 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74  ;    /* Parse st
18d50 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e  ructure for main
18d60 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c   program (or NUL
18d70 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  L) */.  Table *p
18d80 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20  TriggerTab;  /* 
18d90 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61  Table triggers a
18da0 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66  re being coded f
18db0 6f 72 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e  or */.  double n
18dc0 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20  QueryLoop;   /* 
18dd0 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
18de0 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f   of iterations o
18df0 66 20 61 20 71 75 65 72 79 20 2a 2f 0a 20 20 75  f a query */.  u
18e00 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20  32 oldmask;     
18e10 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f      /* Mask of o
18e20 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ld.* columns ref
18e30 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32  erenced */.  u32
18e40 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20   newmask;       
18e50 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77    /* Mask of new
18e60 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
18e70 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54  enced */.  u8 eT
18e80 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20  riggerOp;       
18e90 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  /* TK_UPDATE, TK
18ea0 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45  _INSERT or TK_DE
18eb0 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72  LETE */.  u8 eOr
18ec0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  conf;          /
18ed0 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
18ee0 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72  FLICT policy for
18ef0 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a   trigger steps *
18f00 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72  /.  u8 disableTr
18f10 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65  iggers;  /* True
18f20 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67   to disable trig
18f30 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 41 62  gers */..  /* Ab
18f40 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  ove is constant 
18f50 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f  between recursio
18f60 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65  ns.  Below is re
18f70 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61  set before and a
18f80 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72  fter.  ** each r
18f90 65 63 75 72 73 69 6f 6e 20 2a 2f 0a 0a 20 20 69  ecursion */..  i
18fa0 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  nt nVar;        
18fb0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
18fc0 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
18fd0 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
18fe0 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
18ff0 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20  int nzVar;      
19000 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
19010 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ber of available
19020 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b   slots in azVar[
19030 5d 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69  ] */.  u8 explai
19040 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
19050 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
19060 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20  EXPLAIN flag is 
19070 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65  found on the que
19080 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ry */.#ifndef SQ
19090 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
190a0 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c  LTABLE.  u8 decl
190b0 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20  areVtab;        
190c0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e     /* True if in
190d0 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63  side sqlite3_dec
190e0 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20  lare_vtab() */. 
190f0 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20   int nVtabLock; 
19100 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
19110 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
19120 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a  tables to lock *
19130 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e  /.#endif.  int n
19140 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20  Alias;          
19150 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
19160 66 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74  f aliased result
19170 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   set columns */.
19180 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
19190 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
191a0 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68  xpression tree h
191b0 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74  eight of current
191c0 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23   sub-select */.#
191d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
191e0 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74  IT_EXPLAIN.  int
191f0 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20   iSelectId;     
19200 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20         /* ID of 
19210 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66  current select f
19220 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
19230 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74  t */.  int iNext
19240 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20  SelectId;       
19250 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62   /* Next availab
19260 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72  le select ID for
19270 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20   EXPLAIN output 
19280 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72  */.#endif.  char
19290 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20   **azVar;       
192a0 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
192b0 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61  s to names of pa
192c0 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64  rameters */.  Vd
192d0 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20  be *pReprepare; 
192e0 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65          /* VM be
192f0 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28  ing reprepared (
19300 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
19310 28 29 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 41  ()) */.  int *aA
19320 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
19330 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 75     /* Register u
19340 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 6c 69 61  sed to hold alia
19350 73 65 64 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  sed result */.  
19360 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
19370 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  l;        /* All
19380 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74   SQL text past t
19390 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f  he last semicolo
193a0 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61  n parsed */.  Ta
193b0 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20  ble *pNewTable; 
193c0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62          /* A tab
193d0 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75  le being constru
193e0 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54  cted by CREATE T
193f0 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65  ABLE */.  Trigge
19400 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20  r *pNewTrigger; 
19410 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75      /* Trigger u
19420 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62  nder construct b
19430 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47  y a CREATE TRIGG
19440 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ER */.  const ch
19450 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
19460 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72  ; /* The 6th par
19470 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41  ameter to db->xA
19480 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f  uth callbacks */
19490 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
194a0 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ken;         /* 
194b0 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61  Token with unqua
194c0 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62  lified schema ob
194d0 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  ject name */.  T
194e0 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
194f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
19500 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65  last token parse
19510 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  d */.#ifndef SQL
19520 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
19530 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41  TABLE.  Token sA
19540 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
19550 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65    /* Complete te
19560 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61  xt of a module a
19570 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62  rgument */.  Tab
19580 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
19590 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
195a0 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62  r to virtual tab
195b0 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b  les needing lock
195c0 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
195d0 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
195e0 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  b;        /* Lis
195f0 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
19600 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
19610 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
19620 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
19630 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69  iggerPrg;  /* Li
19640 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
19650 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 7d  ed triggers */.}
19660 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ;../*.** Return 
19670 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c  true if currentl
19680 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69  y inside an sqli
19690 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
196a0 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64  () call..*/.#ifd
196b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
196c0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64  IRTUALTABLE.  #d
196d0 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
196e0 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20  _VTAB 0.#else.  
196f0 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
19700 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d  RE_VTAB (pParse-
19710 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65  >declareVtab).#e
19720 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
19730 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
19740 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
19750 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72  re can be declar
19760 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e  ed on a stack an
19770 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76  d used.** to sav
19780 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74  e the Parse.zAut
19790 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73  hContext value s
197a0 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
197b0 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e   restored later.
197c0 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43  .*/.struct AuthC
197d0 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74  ontext {.  const
197e0 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
197f0 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61  ext;   /* Put sa
19800 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43  ved Parse.zAuthC
19810 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20  ontext here */. 
19820 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
19830 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19840 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74  The Parse struct
19850 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ure */.};../*.**
19860 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20   Bitfield flags 
19870 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20  for P5 value in 
19880 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e  various opcodes.
19890 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c  .*/.#define OPFL
198a0 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20  AG_NCHANGE      
198b0 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20   0x01    /* Set 
198c0 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43  to update db->nC
198d0 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65  hange */.#define
198e0 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
198f0 44 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a  D     0x02    /*
19900 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
19910 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a  b->lastRowid */.
19920 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
19930 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30  SUPDATE      0x0
19940 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f  4    /* This OP_
19950 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c  Insert is an sql
19960 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
19970 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  ne OPFLAG_APPEND
19980 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20          0x08    
19990 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c  /* This is likel
199a0 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
199b0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  d */.#define OPF
199c0 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
199d0 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79  T 0x10    /* Try
199e0 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b   to avoid a seek
199f0 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28   in BtreeInsert(
19a00 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
19a10 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 20  LAG_CLEARCACHE  
19a20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 43 6c 65    0x20    /* Cle
19a30 61 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20  ar pseudo-table 
19a40 63 61 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75  cache in OP_Colu
19a50 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  mn */.#define OP
19a60 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
19a70 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
19a80 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
19a90 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a  d for length() *
19aa0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
19ab0 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30  _TYPEOFARG     0
19ac0 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x80    /* OP_Col
19ad0 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
19ae0 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64  r typeof() */.#d
19af0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c  efine OPFLAG_BUL
19b00 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20  KCSR       0x01 
19b10 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
19b20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c  used to open bul
19b30 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66  k cursor */.#def
19b40 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  ine OPFLAG_P2ISR
19b50 45 47 20 20 20 20 20 20 20 30 78 30 32 20 20 20  EG       0x02   
19b60 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65   /* P2 to OP_Ope
19b70 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65  n** is a registe
19b80 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66  r number */.#def
19b90 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  ine OPFLAG_PERMU
19ba0 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  TE       0x01   
19bb0 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20   /* OP_Compare: 
19bc0 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74  use the permutat
19bd0 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61  ion */../*. * Ea
19be0 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65  ch trigger prese
19bf0 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
19c00 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f  se schema is sto
19c10 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e  red as an instan
19c20 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20  ce of. * struct 
19c30 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20  Trigger. . *. * 
19c40 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74  Pointers to inst
19c50 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
19c60 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72  Trigger are stor
19c70 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a  ed in two ways..
19c80 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72   * 1. In the "tr
19c90 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62  igHash" hash tab
19ca0 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20  le (part of the 
19cb0 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65  sqlite3* that re
19cc0 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a  presents the . *
19cd0 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54      database). T
19ce0 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67  his allows Trigg
19cf0 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f  er structures to
19d00 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79   be retrieved by
19d10 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c   name.. * 2. All
19d20 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69   triggers associ
19d30 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67  ated with a sing
19d40 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20  le table form a 
19d50 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69  linked list, usi
19d60 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65  ng the. *    pNe
19d70 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72  xt member of str
19d80 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70  uct Trigger. A p
19d90 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69  ointer to the fi
19da0 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
19db0 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20  he. *    linked 
19dc0 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61  list is stored a
19dd0 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22  s the "pTrigger"
19de0 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61   member of the a
19df0 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20  ssociated. *    
19e00 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a  struct Table.. *
19e10 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69  . * The "step_li
19e20 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74  st" member point
19e30 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  s to the first e
19e40 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b  lement of a link
19e50 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61  ed list. * conta
19e60 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74  ining the SQL st
19e70 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
19e80 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65  ed as the trigge
19e90 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73  r program.. */.s
19ea0 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a  truct Trigger {.
19eb0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
19ec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
19ed0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69   name of the tri
19ee0 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20  gger            
19ef0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
19f00 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20   char *table;   
19f10 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
19f20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f  table or view to
19f30 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
19f40 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20  er applies */.  
19f50 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
19f60 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
19f70 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
19f80 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
19f90 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75  T         */.  u
19fa0 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20  8 tr_tm;        
19fb0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
19fc0 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c   TRIGGER_BEFORE,
19fd0 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a   TRIGGER_AFTER *
19fe0 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b  /.  Expr *pWhen;
19ff0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1a000 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
1a010 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
1a020 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a   (may be NULL) *
1a030 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c  /.  IdList *pCol
1a040 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49  umns;       /* I
1a050 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44  f this is an UPD
1a060 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c  ATE OF <column-l
1a070 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20  ist> trigger,.  
1a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a090 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c             the <
1a0a0 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20  column-list> is 
1a0b0 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
1a0c0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1a0d0 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65  ;        /* Sche
1a0e0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
1a0f0 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53  e trigger */.  S
1a100 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d  chema *pTabSchem
1a110 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
1a120 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1a130 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67  table */.  Trigg
1a140 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73  erStep *step_lis
1a150 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20  t; /* Link list 
1a160 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  of trigger progr
1a170 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20  am steps        
1a180 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65       */.  Trigge
1a190 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  r *pNext;       
1a1a0 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65    /* Next trigge
1a1b0 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
1a1c0 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d  h the table */.}
1a1d0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67  ;../*.** A trigg
1a1e0 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42  er is either a B
1a1f0 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45  EFORE or an AFTE
1a200 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20  R trigger.  The 
1a210 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61  following consta
1a220 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65  nts.** determine
1a230 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49   which. .**.** I
1a240 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74  f there are mult
1a250 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79  iple triggers, y
1a260 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65  ou might of some
1a270 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65   BEFORE and some
1a280 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68   AFTER..** In th
1a290 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f  at cases, the co
1a2a0 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61  nstants below ca
1a2b0 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68  n be ORed togeth
1a2c0 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  er..*/.#define T
1a2d0 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31  RIGGER_BEFORE  1
1a2e0 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
1a2f0 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20  _AFTER   2../*. 
1a300 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1a310 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
1a320 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73  tep is used to s
1a330 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51  tore a single SQ
1a340 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74  L statement. * t
1a350 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66  hat is a part of
1a360 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72   a trigger-progr
1a370 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61  am. . *. * Insta
1a380 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
1a390 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73  riggerStep are s
1a3a0 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
1a3b0 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c  y linked list (l
1a3c0 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74  inked. * using t
1a3d0 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65  he "pNext" membe
1a3e0 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79  r) referenced by
1a3f0 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   the "step_list"
1a400 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a   member of the .
1a410 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74   * associated st
1a420 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73  ruct Trigger ins
1a430 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74  tance. The first
1a440 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
1a450 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20  linked list is. 
1a460 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70  * the first step
1a470 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d   of the trigger-
1a480 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20  program.. * . * 
1a490 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20  The "op" member 
1a4a0 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65  indicates whethe
1a4b0 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c  r this is a "DEL
1a4c0 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20  ETE", "INSERT", 
1a4d0 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22  "UPDATE" or. * "
1a4e0 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e  SELECT" statemen
1a4f0 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20  t. The meanings 
1a500 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d  of the other mem
1a510 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e  bers is determin
1a520 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61  ed by the . * va
1a530 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66  lue of "op" as f
1a540 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f  ollows:. *. * (o
1a550 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a  p == TK_INSERT).
1a560 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20   * orconf    -> 
1a570 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f  stores the ON CO
1a580 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
1a590 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e  . * pSelect   ->
1a5a0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
1a5b0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53  NSERT INTO ... S
1a5c0 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d  ELECT ... statem
1a5d0 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
1a5e0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
1a5f0 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20  tores a pointer 
1a600 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  to the SELECT st
1a610 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69  atement. Otherwi
1a620 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67  se NULL.. * targ
1a630 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e  et    -> A token
1a640 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f   holding the quo
1a650 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1a660 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20  table to insert 
1a670 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69  into.. * pExprLi
1a680 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73  st -> If this is
1a690 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1a6a0 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73  ... VALUES ... s
1a6b0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
1a6c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1a6d0 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65  his stores value
1a6e0 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  s to be inserted
1a6f0 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
1a700 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d  .. * pIdList   -
1a710 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
1a720 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
1a730 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29  (<column-names>)
1a740 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20   VALUES ... . * 
1a750 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1a760 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69  tement, then thi
1a770 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c  s stores the col
1a780 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a  umn-names to be.
1a790 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1a7a0 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20  inserted into.. 
1a7b0 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44  *. * (op == TK_D
1a7c0 45 4c 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74  ELETE). * target
1a7d0 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
1a7e0 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65  olding the quote
1a7f0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1a800 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72  ble to delete fr
1a810 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  om.. * pWhere   
1a820 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
1a830 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45  ause of the DELE
1a840 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
1a850 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
1a860 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
1a870 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
1a880 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20  .. * . * (op == 
1a890 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61  TK_UPDATE). * ta
1a8a0 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b  rget    -> A tok
1a8b0 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71  en holding the q
1a8c0 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
1a8d0 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74  e table to updat
1a8e0 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57  e rows of.. * pW
1a8f0 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
1a900 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
1a910 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
1a920 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
1a930 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
1a940 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
1a950 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70  se NULL.. * pExp
1a960 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20  rList -> A list 
1a970 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74  of the columns t
1a980 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65  o update and the
1a990 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20   expressions to 
1a9a0 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20  update. *       
1a9b0 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20         them to. 
1a9c0 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74  See sqlite3Updat
1a9d0 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  e() documentatio
1a9e0 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a  n of "pChanges".
1a9f0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1aa00 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a  argument.. * . *
1aa10 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
1aa20 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Step {.  u8 op; 
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1aa40 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
1aa50 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
1aa60 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45  _INSERT, TK_SELE
1aa70 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e  CT */.  u8 orcon
1aa80 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
1aa90 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e  OE_Rollback etc.
1aaa0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
1aab0 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68  Trig;      /* Th
1aac0 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74  e trigger that t
1aad0 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61  his step is a pa
1aae0 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63  rt of */.  Selec
1aaf0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
1ab00 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65  /* SELECT statme
1ab10 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53  nt or RHS of INS
1ab20 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45  ERT INTO .. SELE
1ab30 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65  CT ... */.  Toke
1ab40 6e 20 74 61 72 67 65 74 3b 20 20 20 20 20 20 20  n target;       
1ab50 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65   /* Target table
1ab60 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44   for DELETE, UPD
1ab70 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20  ATE, INSERT */. 
1ab80 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
1ab90 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
1aba0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45  RE clause for DE
1abb0 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73  LETE or UPDATE s
1abc0 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  teps */.  ExprLi
1abd0 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f  st *pExprList; /
1abe0 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72  * SET clause for
1abf0 20 55 50 44 41 54 45 2e 20 20 56 41 4c 55 45 53   UPDATE.  VALUES
1ac00 20 63 6c 61 75 73 65 20 66 6f 72 20 49 4e 53 45   clause for INSE
1ac10 52 54 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  RT */.  IdList *
1ac20 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20  pIdList;     /* 
1ac30 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72  Column names for
1ac40 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69   INSERT */.  Tri
1ac50 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b  ggerStep *pNext;
1ac60 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65    /* Next in the
1ac70 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20   link-list */.  
1ac80 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61  TriggerStep *pLa
1ac90 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65  st;  /* Last ele
1aca0 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73  ment in link-lis
1acb0 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74  t. Valid for 1st
1acc0 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b   elem only */.};
1acd0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1ace0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1acf0 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
1ad00 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
1ad10 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a   sqliteFix....**
1ad20 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65   routines as the
1ad30 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65  y walk the parse
1ad40 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61   tree to make da
1ad50 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65  tabase reference
1ad60 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20  s.** explicit.  
1ad70 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
1ad80 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78  ct DbFixer DbFix
1ad90 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78  er;.struct DbFix
1ada0 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
1adb0 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68  arse;      /* Th
1adc0 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78  e parsing contex
1add0 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67  t.  Error messag
1ade0 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  es written here 
1adf0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
1ae00 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20  hema;    /* Fix 
1ae10 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63  items to this sc
1ae20 68 65 6d 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  hema */.  const 
1ae30 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a  char *zDb;    /*
1ae40 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f   Make sure all o
1ae50 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61  bjects are conta
1ae60 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74  ined in this dat
1ae70 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74  abase */.  const
1ae80 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f   char *zType;  /
1ae90 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  * Type of the co
1aea0 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
1aeb0 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
1aec0 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b  s */.  const Tok
1aed0 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61  en *pName; /* Na
1aee0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  me of the contai
1aef0 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
1af00 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
1af10 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  .};../*.** An ob
1af20 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61  jected used to a
1af30 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65  ccumulate the te
1af40 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77  xt of a string w
1af50 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f  here we.** do no
1af60 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
1af70 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73  ow how big the s
1af80 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e  tring will be in
1af90 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
1afa0 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20  uct StrAccum {. 
1afb0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1afc0 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61        /* Optiona
1afd0 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c  l database for l
1afe0 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62  ookaside.  Can b
1aff0 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72  e NULL */.  char
1b000 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20   *zBase;        
1b010 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63   /* A base alloc
1b020 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d  ation.  Not from
1b030 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68   malloc. */.  ch
1b040 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20  ar *zText;      
1b050 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67     /* The string
1b060 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61   collected so fa
1b070 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61  r */.  int  nCha
1b080 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  r;          /* L
1b090 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
1b0a0 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
1b0b0 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20  int  nAlloc;    
1b0c0 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f       /* Amount o
1b0d0 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  f space allocate
1b0e0 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20  d in zText */.  
1b0f0 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20  int  mxAlloc;   
1b100 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1b110 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c  allowed string l
1b120 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20  ength */.  u8   
1b130 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
1b140 2f 2a 20 42 65 63 6f 6d 65 73 20 74 72 75 65 20  /* Becomes true 
1b150 69 66 20 61 6e 79 20 6d 65 6d 6f 72 79 20 61 6c  if any memory al
1b160 6c 6f 63 61 74 69 6f 6e 20 66 61 69 6c 73 20 2a  location fails *
1b170 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c  /.  u8   useMall
1b180 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e  oc;      /* 0: n
1b190 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33  one,  1: sqlite3
1b1a0 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71  DbMalloc,  2: sq
1b1b0 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  lite3_malloc */.
1b1c0 20 20 75 38 20 20 20 74 6f 6f 42 69 67 3b 20 20    u8   tooBig;  
1b1d0 20 20 20 20 20 20 20 2f 2a 20 42 65 63 6f 6d 65         /* Become
1b1e0 73 20 74 72 75 65 20 69 66 20 73 74 72 69 6e 67  s true if string
1b1f0 20 73 69 7a 65 20 65 78 63 65 65 64 73 20 6c 69   size exceeds li
1b200 6d 69 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  mits */.};../*.*
1b210 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  * A pointer to t
1b220 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
1b230 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69   used to communi
1b240 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  cate information
1b250 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  .** from sqlite3
1b260 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73  Init and OP_Pars
1b270 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65  eSchema into the
1b280 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
1b290 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  back..*/.typedef
1b2a0 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69   struct {.  sqli
1b2b0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1b2c0 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
1b2d0 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
1b2e0 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a  d */.  char **pz
1b2f0 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72  ErrMsg;    /* Er
1b300 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72  ror message stor
1b310 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74  ed here */.  int
1b320 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
1b330 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64   /* 0 for main d
1b340 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20  atabase.  1 for 
1b350 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54  TEMP, 2.. for AT
1b360 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20  TACHed */.  int 
1b370 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
1b380 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73  /* Result code s
1b390 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20  tored here */.} 
1b3a0 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a  InitData;../*.**
1b3b0 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   Structure conta
1b3c0 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  ining global con
1b3d0 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20  figuration data 
1b3e0 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
1b3f0 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ibrary..**.** Th
1b400 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73  is structure als
1b410 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20  o contains some 
1b420 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  state informatio
1b430 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c  n..*/.struct Sql
1b440 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69  ite3Config {.  i
1b450 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20  nt bMemstat;    
1b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b470 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1b480 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73  le memory status
1b490 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d   */.  int bCoreM
1b4a0 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1b4b0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1b4c0 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d  to enable core m
1b4d0 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
1b4e0 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20   bFullMutex;    
1b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b500 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1b510 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a   full mutexing *
1b520 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69  /.  int bOpenUri
1b530 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b540 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1b550 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e   interpret filen
1b560 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a  ames as URIs */.
1b570 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20    int bUseCis;  
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b590 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72      /* Use cover
1b5a0 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20  ing indices for 
1b5b0 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20  full-scans */.  
1b5c0 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20  int mxStrlen;   
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5e0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72    /* Maximum str
1b5f0 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ing length */.  
1b600 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b  int szLookaside;
1b610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b620 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
1b630 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69  kaside buffer si
1b640 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f  ze */.  int nLoo
1b650 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
1b660 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1b670 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
1b680 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20  uffer count */. 
1b690 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
1b6a0 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20  hods m;         
1b6b0 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
1b6c0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1b6d0 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  n interface */. 
1b6e0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1b6f0 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20  ethods mutex;   
1b700 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
1b710 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20  mutex interface 
1b720 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61  */.  sqlite3_pca
1b730 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61  che_methods2 pca
1b740 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65  che2;  /* Low-le
1b750 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69  vel page-cache i
1b760 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f  nterface */.  vo
1b770 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20  id *pHeap;      
1b780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b790 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20  /* Heap storage 
1b7a0 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
1b7b0 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b7d0 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20  Size of pHeap[] 
1b7e0 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20  */.  int mnReq, 
1b7f0 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20  mxReq;          
1b800 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e         /* Min an
1b810 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65  d max heap reque
1b820 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73  sts sizes */.  s
1b830 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d  qlite3_int64 szM
1b840 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
1b850 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65   /* mmap() space
1b860 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a   per open file *
1b870 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
1b880 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 mxMmap;       
1b890 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
1b8a0 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61   value for szMma
1b8b0 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63  p */.  void *pSc
1b8c0 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1b8d0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61           /* Scra
1b8e0 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  tch memory */.  
1b8f0 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20  int szScratch;  
1b900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b910 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
1b920 68 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72  h scratch buffer
1b930 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74   */.  int nScrat
1b940 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
1b950 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b960 72 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66  r of scratch buf
1b970 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  fers */.  void *
1b980 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  pPage;          
1b990 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1b9a0 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79  age cache memory
1b9b0 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65   */.  int szPage
1b9c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b9d0 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1b9e0 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20  of each page in 
1b9f0 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
1ba00 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20   nPage;         
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ba20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
1ba30 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  s in pPage[] */.
1ba40 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74    int mxParserSt
1ba50 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ack;            
1ba60 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64      /* maximum d
1ba70 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73  epth of the pars
1ba80 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e  er stack */.  in
1ba90 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61  t sharedCacheEna
1baa0 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
1bab0 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65  /* true if share
1bac0 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61  d-cache mode ena
1bad0 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  bled */.  /* The
1bae0 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20   above might be 
1baf0 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e  initialized to n
1bb00 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f  on-zero.  The fo
1bb10 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20  llowing need to 
1bb20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74  always.  ** init
1bb30 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68  ially be zero, h
1bb40 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74  owever. */.  int
1bb50 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20   isInit;        
1bb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bb70 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69  * True after ini
1bb80 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20  tialization has 
1bb90 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e  finished */.  in
1bba0 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20  t inProgress;   
1bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbc0 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e  /* True while in
1bbd0 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20  itialization in 
1bbe0 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e  progress */.  in
1bbf0 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20  t isMutexInit;  
1bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc10 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75  /* True after mu
1bc20 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61  texes are initia
1bc30 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
1bc40 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20  sMallocInit;    
1bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bc60 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
1bc70 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
1bc80 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63   */.  int isPCac
1bc90 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  heInit;         
1bca0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1bcb0 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
1bcc0 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1bcd0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
1bce0 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  pInitMutex;     
1bcf0 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64     /* Mutex used
1bd00 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74   by sqlite3_init
1bd10 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 69 6e  ialize() */.  in
1bd20 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b  t nRefInitMutex;
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd40 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
1bd50 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78  rs of pInitMutex
1bd60 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f   */.  void (*xLo
1bd70 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  g)(void*,int,con
1bd80 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75  st char*); /* Fu
1bd90 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69  nction for loggi
1bda0 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c  ng */.  void *pL
1bdb0 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ogArg;          
1bdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bdd0 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
1bde0 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 20 20 69 6e  o xLog() */.  in
1bdf0 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c  t bLocaltimeFaul
1be00 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1be10 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20  /* True to fail 
1be20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c  localtime() call
1be30 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  s */.#ifdef SQLI
1be40 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
1be50 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67  .  void(*xSqllog
1be60 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
1be70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
1be80 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c  t);.  void *pSql
1be90 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 7d  logArg;.#endif.}
1bea0 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  ;../*.** Context
1beb0 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20   pointer passed 
1bec0 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65  down through the
1bed0 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73   tree-walk..*/.s
1bee0 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20  truct Walker {. 
1bef0 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c   int (*xExprCall
1bf00 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45  back)(Walker*, E
1bf10 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61  xpr*);     /* Ca
1bf20 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65  llback for expre
1bf30 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ssions */.  int 
1bf40 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
1bf50 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  k)(Walker*,Selec
1bf60 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  t*);  /* Callbac
1bf70 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
1bf80 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1bf90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bfb0 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  Parser context. 
1bfc0 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72   */.  int walker
1bfd0 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20  Depth;          
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bff0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62  /* Number of sub
1c000 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20  queries */.  u8 
1c010 62 53 65 6c 65 63 74 44 65 70 74 68 46 69 72 73  bSelectDepthFirs
1c020 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1c030 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 73 75 62         /* Do sub
1c040 71 75 65 72 69 65 73 20 66 69 72 73 74 20 2a 2f  queries first */
1c050 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20  .  union {      
1c060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c070 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c080 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63  Extra data for c
1c090 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e  allback */.    N
1c0a0 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b  ameContext *pNC;
1c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
1c0d0 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  ing context */. 
1c0e0 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20     int i;       
1c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c110 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 2a   Integer value *
1c120 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70  /.    SrcList *p
1c130 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20  SrcList;        
1c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c150 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20   /* FROM clause 
1c160 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72  */.    struct Sr
1c170 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e  cCount *pSrcCoun
1c180 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1c190 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f    /* Counting co
1c1a0 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20  lumn references 
1c1b0 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a  */.  } u;.};../*
1c1c0 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61   Forward declara
1c1d0 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c  tions */.int sql
1c1e0 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c  ite3WalkExpr(Wal
1c1f0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
1c200 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
1c210 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45  rList(Walker*, E
1c220 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
1c230 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
1c240 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
1c250 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1c260 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61  alkSelectExpr(Wa
1c270 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
1c280 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1c290 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65  SelectFrom(Walke
1c2a0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f  r*, Select*);../
1c2b0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65  *.** Return code
1c2c0 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d   from the parse-
1c2d0 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69  tree walking pri
1c2e0 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69  mitives and thei
1c2f0 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  r.** callbacks..
1c300 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43  */.#define WRC_C
1c310 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f  ontinue    0   /
1c320 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20  * Continue down 
1c330 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f  into children */
1c340 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75  .#define WRC_Pru
1c350 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  ne       1   /* 
1c360 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75  Omit children bu
1c370 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69  t continue walki
1c380 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23  ng siblings */.#
1c390 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74  define WRC_Abort
1c3a0 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62         2   /* Ab
1c3b0 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77  andon the tree w
1c3c0 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73  alk */../*.** As
1c3d0 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74  suming zIn point
1c3e0 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  s to the first b
1c3f0 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63  yte of a UTF-8 c
1c400 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76  haracter,.** adv
1c410 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e  ance zIn to poin
1c420 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  t to the first b
1c430 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20  yte of the next 
1c440 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e  UTF-8 character.
1c450 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
1c460 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e  TE_SKIP_UTF8(zIn
1c470 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  ) {             
1c480 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69             \.  i
1c490 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30  f( (*(zIn++))>=0
1c4a0 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20  xc0 ){          
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4c0 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28      \.    while(
1c4d0 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d   (*zIn & 0xc0)==
1c4e0 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d  0x80 ){ zIn++; }
1c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
1c500 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20   }              
1c510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c530 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a        \.}../*.**
1c540 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b   The SQLITE_*_BK
1c550 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75  PT macros are su
1c560 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68  bstitutes for th
1c570 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69  e error codes wi
1c580 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e  th.** the same n
1c590 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20  ame but without 
1c5a0 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78  the _BKPT suffix
1c5b0 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  .  These macros 
1c5c0 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e  invoke.** routin
1c5d0 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74  es that report t
1c5e0 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f  he line-number o
1c5f0 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f  n which the erro
1c600 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20  r originated.** 
1c610 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f  using sqlite3_lo
1c620 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e  g().  The routin
1c630 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20  es also provide 
1c640 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61  a convenient pla
1c650 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64  ce.** to set a d
1c660 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69  ebugger breakpoi
1c670 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
1c680 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69  e3CorruptError(i
1c690 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1c6a0 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29  MisuseError(int)
1c6b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e  ;.int sqlite3Can
1c6c0 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b  topenError(int);
1c6d0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
1c6e0 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c  CORRUPT_BKPT sql
1c6f0 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
1c700 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
1c710 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  ne SQLITE_MISUSE
1c720 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73  _BKPT sqlite3Mis
1c730 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  useError(__LINE_
1c740 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
1c750 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20  E_CANTOPEN_BKPT 
1c760 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
1c770 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a  rror(__LINE__)..
1c780 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72  ./*.** FTS4 is r
1c790 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69  eally an extensi
1c7a0 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74  on for FTS3.  It
1c7b0 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e   is enabled usin
1c7c0 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f  g the.** SQLITE_
1c7d0 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72  ENABLE_FTS3 macr
1c7e0 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64  o.  But to avoid
1c7f0 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c   confusion we al
1c800 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51  so all.** the SQ
1c810 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
1c820 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20   macro to serve 
1c830 61 73 20 61 6e 20 61 6c 69 73 73 65 20 66 6f 72  as an alisse for
1c840 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1c850 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  TS3..*/.#if defi
1c860 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1c870 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69  E_FTS4) && !defi
1c880 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1c890 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65  E_FTS3).# define
1c8a0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1c8b0 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  TS3.#endif../*.*
1c8c0 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65  * The ctype.h he
1c8d0 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66  ader is needed f
1c8e0 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73  or non-ASCII sys
1c8f0 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73  tems.  It is als
1c900 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46  o.** needed by F
1c910 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73  TS3 when FTS3 is
1c920 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65   included in the
1c930 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a   amalgamation..*
1c940 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
1c950 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20  QLITE_ASCII) || 
1c960 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53  \.    (defined(S
1c970 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1c980 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  3) && defined(SQ
1c990 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
1c9a0 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63  N)).# include <c
1c9b0 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  type.h>.#endif..
1c9c0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
1c9d0 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63  ing macros mimic
1c9e0 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69   the standard li
1c9f0 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20  brary functions 
1ca00 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73  toupper(),.** is
1ca10 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d  space(), isalnum
1ca20 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e  (), isdigit() an
1ca30 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65  d isxdigit(), re
1ca40 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a  spectively. The.
1ca50 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f  ** sqlite versio
1ca60 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72  ns only work for
1ca70 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
1ca80 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  s, regardless of
1ca90 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64   locale..*/.#ifd
1caa0 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a  ef SQLITE_ASCII.
1cab0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1cac0 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29  Toupper(x)  ((x)
1cad0 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d  &~(sqlite3CtypeM
1cae0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1caf0 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20  r)(x)]&0x20)).# 
1cb00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1cb10 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69  space(x)   (sqli
1cb20 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1cb30 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1cb40 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73  0x01).# define s
1cb50 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
1cb60 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
1cb70 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1cb80 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20  ar)(x)]&0x06).# 
1cb90 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1cba0 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69  alpha(x)   (sqli
1cbb0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1cbc0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1cbd0 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73  0x02).# define s
1cbe0 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
1cbf0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
1cc00 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1cc10 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20  ar)(x)]&0x04).# 
1cc20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1cc30 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69  xdigit(x)  (sqli
1cc40 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1cc50 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1cc60 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73  0x08).# define s
1cc70 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
1cc80 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72     (sqlite3Upper
1cc90 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65  ToLower[(unsigne
1cca0 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c  d char)(x)]).#el
1ccb0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1ccc0 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20  te3Toupper(x)   
1ccd0 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65  toupper((unsigne
1cce0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1ccf0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
1cd00 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65  ace(x)   isspace
1cd10 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1cd20 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1cd30 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
1cd40 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67    isalnum((unsig
1cd50 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1cd60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1cd70 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70  alpha(x)   isalp
1cd80 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ha((unsigned cha
1cd90 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1cda0 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
1cdb0 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73  )   isdigit((uns
1cdc0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1cdd0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1cde0 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78  Isxdigit(x)  isx
1cdf0 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
1ce00 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1ce10 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
1ce20 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28  r(x)   tolower((
1ce30 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1ce40 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
1ce50 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
1ce60 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f  on prototypes.*/
1ce70 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
1ce80 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  StrICmp sqlite3_
1ce90 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69  stricmp.int sqli
1cea0 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73  te3Strlen30(cons
1ceb0 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
1cec0 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  e sqlite3StrNICm
1ced0 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  p sqlite3_strnic
1cee0 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  mp..int sqlite3M
1cef0 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b  allocInit(void);
1cf00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c  .void sqlite3Mal
1cf10 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f  locEnd(void);.vo
1cf20 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
1cf30 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  c(int);.void *sq
1cf40 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28  lite3MallocZero(
1cf50 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1cf60 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
1cf70 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
1cf80 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
1cf90 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33  allocRaw(sqlite3
1cfa0 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73  *, int);.char *s
1cfb0 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73  qlite3DbStrDup(s
1cfc0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1cfd0 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
1cfe0 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c  te3DbStrNDup(sql
1cff0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1d000 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
1d010 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f  qlite3Realloc(vo
1d020 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  id*, int);.void 
1d030 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
1d040 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20  cOrFree(sqlite3 
1d050 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b  *, void *, int);
1d060 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
1d070 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20  Realloc(sqlite3 
1d080 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b  *, void *, int);
1d090 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
1d0a0 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ree(sqlite3*, vo
1d0b0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
1d0c0 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64  3MallocSize(void
1d0d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  *);.int sqlite3D
1d0e0 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69  bMallocSize(sqli
1d0f0 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
1d100 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74  id *sqlite3Scrat
1d110 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  chMalloc(int);.v
1d120 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74  oid sqlite3Scrat
1d130 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  chFree(void*);.v
1d140 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65  oid *sqlite3Page
1d150 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
1d160 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65  d sqlite3PageFre
1d170 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
1d180 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61  qlite3MemSetDefa
1d190 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ult(void);.void 
1d1a0 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c  sqlite3BenignMal
1d1b0 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a  locHooks(void (*
1d1c0 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a  )(void), void (*
1d1d0 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71  )(void));.int sq
1d1e0 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46  lite3HeapNearlyF
1d1f0 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a  ull(void);../*.*
1d200 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * On systems wit
1d210 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70  h ample stack sp
1d220 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70  ace and that sup
1d230 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d  port alloca(), m
1d240 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c  ake.** use of al
1d250 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e  loca() to obtain
1d260 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65   space for large
1d270 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63   automatic objec
1d280 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c  ts.  By default,
1d290 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65  .** obtain space
1d2a0 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a   from malloc()..
1d2b0 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61  **.** The alloca
1d2c0 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72  () routine never
1d2d0 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20   returns NULL.  
1d2e0 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20  This will cause 
1d2f0 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68  code paths.** th
1d300 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c  at deal with sql
1d310 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29  ite3StackAlloc()
1d320 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20   failures to be 
1d330 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a  unreachable..*/.
1d340 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
1d350 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e  E_ALLOCA.# defin
1d360 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
1d370 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c  locRaw(D,N)   al
1d380 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65  loca(N).# define
1d390 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
1d3a0 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d  ocZero(D,N)  mem
1d3b0 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30  set(alloca(N), 0
1d3c0 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  , N).# define sq
1d3d0 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
1d3e0 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65  ,P)       .#else
1d3f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1d400 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
1d410 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  ,N)   sqlite3DbM
1d420 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20  allocRaw(D,N).# 
1d430 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1d440 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
1d450 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  )  sqlite3DbMall
1d460 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65  ocZero(D,N).# de
1d470 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
1d480 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20  kFree(D,P)      
1d490 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44   sqlite3DbFree(D
1d4a0 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,P).#endif..#ifd
1d4b0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1d4c0 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73  _MEMSYS3.const s
1d4d0 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
1d4e0 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
1d4f0 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a  tMemsys3(void);.
1d500 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
1d510 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
1d520 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS5.const sqlite
1d530 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
1d540 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
1d550 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys5(void);.#endi
1d560 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  f...#ifndef SQLI
1d570 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20  TE_MUTEX_OMIT.  
1d580 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
1d590 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
1d5a0 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78  ite3DefaultMutex
1d5b0 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
1d5c0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
1d5d0 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f  const *sqlite3No
1d5e0 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  opMutex(void);. 
1d5f0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
1d600 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f  sqlite3MutexAllo
1d610 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  c(int);.  int sq
1d620 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76  lite3MutexInit(v
1d630 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  oid);.  int sqli
1d640 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64  te3MutexEnd(void
1d650 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
1d660 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75  qlite3StatusValu
1d670 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  e(int);.void sql
1d680 69 74 65 33 53 74 61 74 75 73 41 64 64 28 69 6e  ite3StatusAdd(in
1d690 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1d6a0 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28 69  lite3StatusSet(i
1d6b0 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e 64  nt, int);..#ifnd
1d6c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
1d6d0 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
1d6e0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  int sqlite3IsNaN
1d6f0 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a  (double);.#else.
1d700 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1d710 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64  IsNaN(X)  0.#end
1d720 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
1d730 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75  VXPrintf(StrAccu
1d740 6d 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  m*, int, const c
1d750 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
1d760 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1d770 4d 49 54 5f 54 52 41 43 45 0a 76 6f 69 64 20 73  MIT_TRACE.void s
1d780 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74  qlite3XPrintf(St
1d790 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63  rAccum*, const c
1d7a0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64  har*, ...);.#end
1d7b0 69 66 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  if.char *sqlite3
1d7c0 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
1d7d0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  ,const char*, ..
1d7e0 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
1d7f0 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  3VMPrintf(sqlite
1d800 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1d810 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a  va_list);.char *
1d820 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28  sqlite3MAppendf(
1d830 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63  sqlite3*,char*,c
1d840 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
1d850 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1d860 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66  ITE_TEST) || def
1d870 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
1d880 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  G).  void sqlite
1d890 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e  3DebugPrintf(con
1d8a0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
1d8b0 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
1d8c0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
1d8d0 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54    void *sqlite3T
1d8e0 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e  estTextToPtr(con
1d8f0 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
1d900 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72  f../* Output for
1d910 6d 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c 49  matting for SQLI
1d920 54 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50 4c  TE_TESTCTRL_EXPL
1d930 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  AIN */.#if defin
1d940 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1d950 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a 20  _TREE_EXPLAIN). 
1d960 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1d970 6c 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a 29  lainBegin(Vdbe*)
1d980 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1d990 45 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56 64  ExplainPrintf(Vd
1d9a0 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  be*, const char*
1d9b0 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73  , ...);.  void s
1d9c0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c 28  qlite3ExplainNL(
1d9d0 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Vdbe*);.  void s
1d9e0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75 73  qlite3ExplainPus
1d9f0 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  h(Vdbe*);.  void
1da00 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50   sqlite3ExplainP
1da10 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  op(Vdbe*);.  voi
1da20 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1da30 46 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a 20  Finish(Vdbe*);. 
1da40 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1da50 6c 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65 2a  lainSelect(Vdbe*
1da60 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  , Select*);.  vo
1da70 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1da80 6e 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78 70  nExpr(Vdbe*, Exp
1da90 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
1daa0 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69  te3ExplainExprLi
1dab0 73 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c 69  st(Vdbe*, ExprLi
1dac0 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68  st*);.  const ch
1dad0 61 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65 45  ar *sqlite3VdbeE
1dae0 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65 2a  xplanation(Vdbe*
1daf0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
1db00 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  e sqlite3Explain
1db10 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e  Begin(X).# defin
1db20 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  e sqlite3Explain
1db30 53 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64 65  Select(A,B).# de
1db40 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
1db50 61 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20 64  ainExpr(A,B).# d
1db60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
1db70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c 42  lainExprList(A,B
1db80 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1db90 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28  e3ExplainFinish(
1dba0 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  X).# define sqli
1dbb0 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69  te3VdbeExplanati
1dbc0 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  on(X) 0.#endif..
1dbd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74  .void sqlite3Set
1dbe0 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20  String(char **, 
1dbf0 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
1dc00 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
1dc10 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
1dc20 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  g(Parse*, const 
1dc30 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74  char*, ...);.int
1dc40 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28   sqlite3Dequote(
1dc50 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
1dc60 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63  te3KeywordCode(c
1dc70 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
1dc80 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
1dc90 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28  qlite3RunParser(
1dca0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
1dcb0 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76  ar*, char **);.v
1dcc0 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
1dcd0 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b  hCoding(Parse*);
1dce0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
1dcf0 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a  empReg(Parse*);.
1dd00 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
1dd10 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65  aseTempReg(Parse
1dd20 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
1dd30 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28  te3GetTempRange(
1dd40 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
1dd50 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
1dd60 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
1dd70 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
1dd80 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70  sqlite3ClearTemp
1dd90 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29  RegCache(Parse*)
1dda0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
1ddb0 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  xprAlloc(sqlite3
1ddc0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65  *,int,const Toke
1ddd0 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  n*,int);.Expr *s
1dde0 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74  qlite3Expr(sqlit
1ddf0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
1de00 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
1de10 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74  e3ExprAttachSubt
1de20 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78  rees(sqlite3*,Ex
1de30 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  pr*,Expr*,Expr*)
1de40 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50  ;.Expr *sqlite3P
1de50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74  Expr(Parse*, int
1de60 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
1de70 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45  const Token*);.E
1de80 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
1de90 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  And(sqlite3*,Exp
1dea0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  r*, Expr*);.Expr
1deb0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e   *sqlite3ExprFun
1dec0 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70  ction(Parse*,Exp
1ded0 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rList*, Token*);
1dee0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1def0 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72  rAssignVarNumber
1df00 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
1df10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1df20 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  rDelete(sqlite3*
1df30 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  , Expr*);.ExprLi
1df40 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
1df50 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a  istAppend(Parse*
1df60 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
1df70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1df80 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50  xprListSetName(P
1df90 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
1dfa0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Token*,int);.voi
1dfb0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
1dfc0 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c  tSetSpan(Parse*,
1dfd0 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70  ExprList*,ExprSp
1dfe0 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
1dff0 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65  e3ExprListDelete
1e000 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c  (sqlite3*, ExprL
1e010 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
1e020 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  e3Init(sqlite3*,
1e030 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71   char**);.int sq
1e040 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
1e050 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68  k(void*, int, ch
1e060 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76  ar**, char**);.v
1e070 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d  oid sqlite3Pragm
1e080 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  a(Parse*,Token*,
1e090 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
1e0a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e0b0 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
1e0c0 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69  fConnection(sqli
1e0d0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
1e0e0 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
1e0f0 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  a(sqlite3*,int);
1e100 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
1e110 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72  lapseDatabaseArr
1e120 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ay(sqlite3*);.vo
1e130 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50  id sqlite3BeginP
1e140 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29  arse(Parse*,int)
1e150 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1e160 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e  mmitInternalChan
1e170 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54  ges(sqlite3*);.T
1e180 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73  able *sqlite3Res
1e190 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50  ultSetOfSelect(P
1e1a0 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  arse*,Select*);.
1e1b0 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
1e1c0 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73  MasterTable(Pars
1e1d0 65 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  e *, int);.void 
1e1e0 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c  sqlite3StartTabl
1e1f0 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
1e200 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Token*,int,int,i
1e210 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
1e220 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50  lite3AddColumn(P
1e230 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  arse*,Token*);.v
1e240 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f  oid sqlite3AddNo
1e250 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e  tNull(Parse*, in
1e260 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e270 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61  AddPrimaryKey(Pa
1e280 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
1e290 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
1e2a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1e2b0 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28  CheckConstraint(
1e2c0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
1e2d0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
1e2e0 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a  olumnType(Parse*
1e2f0 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
1e300 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74  qlite3AddDefault
1e310 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70  Value(Parse*,Exp
1e320 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
1e330 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54  lite3AddCollateT
1e340 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
1e350 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
1e360 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a  3EndTable(Parse*
1e370 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
1e380 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
1e390 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e  ite3ParseUri(con
1e3a0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
1e3b0 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e  har*,unsigned in
1e3c0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
1e3d0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1e3e0 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61  vfs**,char**,cha
1e3f0 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71  r **);.Btree *sq
1e400 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72  lite3DbNameToBtr
1e410 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ee(sqlite3*,cons
1e420 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
1e430 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61  lite3CodeOnce(Pa
1e440 72 73 65 20 2a 29 3b 0a 0a 42 69 74 76 65 63 20  rse *);..Bitvec 
1e450 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72  *sqlite3BitvecCr
1e460 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73  eate(u32);.int s
1e470 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
1e480 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
1e490 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
1e4a0 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33  cSet(Bitvec*, u3
1e4b0 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
1e4c0 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76  BitvecClear(Bitv
1e4d0 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29  ec*, u32, void*)
1e4e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
1e4f0 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76  tvecDestroy(Bitv
1e500 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  ec*);.u32 sqlite
1e510 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76  3BitvecSize(Bitv
1e520 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ec*);.int sqlite
1e530 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
1e540 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52  st(int,int*);..R
1e550 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f  owSet *sqlite3Ro
1e560 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33  wSetInit(sqlite3
1e570 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e  *, void*, unsign
1e580 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ed int);.void sq
1e590 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
1e5a0 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20  (RowSet*);.void 
1e5b0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
1e5c0 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ert(RowSet*, i64
1e5d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
1e5e0 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a  wSetTest(RowSet*
1e5f0 2c 20 75 38 20 69 42 61 74 63 68 2c 20 69 36 34  , u8 iBatch, i64
1e600 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
1e610 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a  wSetNext(RowSet*
1e620 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73  , i64*);..void s
1e630 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77  qlite3CreateView
1e640 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1e650 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c  oken*,Token*,Sel
1e660 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a  ect*,int,int);..
1e670 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1e680 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c  ITE_OMIT_VIEW) |
1e690 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  | !defined(SQLIT
1e6a0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
1e6b0 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  BLE).  int sqlit
1e6c0 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
1e6d0 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ames(Parse*,Tabl
1e6e0 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
1e6f0 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47  ine sqlite3ViewG
1e700 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c  etColumnNames(A,
1e710 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  B) 0.#endif..voi
1e720 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62  d sqlite3DropTab
1e730 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
1e740 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
1e750 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
1e760 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
1e770 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1e780 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1e790 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  3DeleteTable(sql
1e7a0 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
1e7b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1e7c0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
1e7d0 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
1e7e0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
1e7f0 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  in(Parse *pParse
1e800 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1e810 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
1e820 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  d(Parse *pParse)
1e830 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
1e840 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
1e850 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20  ementBegin(X).# 
1e860 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
1e870 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58  toincrementEnd(X
1e880 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ).#endif.int sql
1e890 69 74 65 33 43 6f 64 65 43 6f 72 6f 75 74 69 6e  ite3CodeCoroutin
1e8a0 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  e(Parse*, Select
1e8b0 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b  *, SelectDest*);
1e8c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
1e8d0 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ert(Parse*, SrcL
1e8e0 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
1e8f0 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74   Select*, IdList
1e900 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
1e910 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63  qlite3ArrayAlloc
1e920 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69  ate(sqlite3*,voi
1e930 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a  d*,int,int*,int*
1e940 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
1e950 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73  e3IdListAppend(s
1e960 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a  qlite3*, IdList*
1e970 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
1e980 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65  qlite3IdListInde
1e990 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  x(IdList*,const 
1e9a0 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20  char*);.SrcList 
1e9b0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45  *sqlite3SrcListE
1e9c0 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c  nlarge(sqlite3*,
1e9d0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
1e9e0 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
1e9f0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
1ea00 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  end(sqlite3*, Sr
1ea10 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
1ea20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74  Token*);.SrcList
1ea30 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
1ea40 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50  AppendFromTerm(P
1ea50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
1ea60 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
1ea70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea90 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53         Token*, S
1eaa0 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49  elect*, Expr*, I
1eab0 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
1eac0 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65  lite3SrcListInde
1ead0 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53  xedBy(Parse *, S
1eae0 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20  rcList *, Token 
1eaf0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
1eb00 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50  ndexedByLookup(P
1eb10 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53  arse *, struct S
1eb20 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a  rcList_item *);.
1eb30 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
1eb40 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
1eb50 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  (SrcList*);.void
1eb60 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41   sqlite3SrcListA
1eb70 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72  ssignCursors(Par
1eb80 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
1eb90 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69  void sqlite3IdLi
1eba0 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
1ebb0 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
1ebc0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
1ebd0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
1ebe0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65   SrcList*);.Inde
1ebf0 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  x *sqlite3Create
1ec00 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b  Index(Parse*,Tok
1ec10 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69  en*,Token*,SrcLi
1ec20 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  st*,ExprList*,in
1ec30 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  t,Token*,.      
1ec40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec50 20 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 2c 20 69    Token*, int, i
1ec60 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1ec70 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65  3DropIndex(Parse
1ec80 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
1ec90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
1eca0 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c  lect(Parse*, Sel
1ecb0 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74  ect*, SelectDest
1ecc0 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
1ecd0 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72  te3SelectNew(Par
1ece0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72  se*,ExprList*,Sr
1ecf0 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
1ed00 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  rList*,.        
1ed10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a   Expr*,ExprList*
1ed30 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ,u16,Expr*,Expr*
1ed40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1ed50 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69  electDelete(sqli
1ed60 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  te3*, Select*);.
1ed70 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72  Table *sqlite3Sr
1ed80 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73  cListLookup(Pars
1ed90 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  e*, SrcList*);.i
1eda0 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64  nt sqlite3IsRead
1edb0 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62  Only(Parse*, Tab
1edc0 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  le*, int);.void 
1edd0 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
1ede0 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75  (Parse*, int iCu
1edf0 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c  r, int iDb, Tabl
1ee00 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65  e*, int);.#if de
1ee10 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
1ee20 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
1ee30 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66  E_LIMIT) && !def
1ee40 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1ee50 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20  _SUBQUERY).Expr 
1ee60 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65  *sqlite3LimitWhe
1ee70 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  re(Parse*,SrcLis
1ee80 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
1ee90 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63  t*,Expr*,Expr*,c
1eea0 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  har*);.#endif.vo
1eeb0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
1eec0 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  From(Parse*, Src
1eed0 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  List*, Expr*);.v
1eee0 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74  oid sqlite3Updat
1eef0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
1ef00 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45  t*, ExprList*, E
1ef10 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72  xpr*, int);.Wher
1ef20 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68  eInfo *sqlite3Wh
1ef30 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c  ereBegin(Parse*,
1ef40 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
1ef50 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  xprList*,ExprLis
1ef60 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69  t*,u16,int);.voi
1ef70 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e  d sqlite3WhereEn
1ef80 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  d(WhereInfo*);.i
1ef90 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1efa0 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73  deGetColumn(Pars
1efb0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1efc0 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
1efd0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1efe0 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54  CodeGetColumnOfT
1eff0 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c  able(Vdbe*, Tabl
1f000 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1f010 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f020 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72  ExprCodeMove(Par
1f030 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
1f040 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1f050 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28  3ExprCacheStore(
1f060 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
1f070 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1f080 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73  ite3ExprCachePus
1f090 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  h(Parse*);.void 
1f0a0 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
1f0b0 50 6f 70 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  Pop(Parse*, int)
1f0c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1f0d0 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61  prCacheRemove(Pa
1f0e0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
1f0f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1f100 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73  rCacheClear(Pars
1f110 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1f120 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69  3ExprCacheAffini
1f130 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c  tyChange(Parse*,
1f140 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
1f150 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28  sqlite3ExprCode(
1f160 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
1f170 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1f180 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72  ExprCodeTemp(Par
1f190 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a  se*, Expr*, int*
1f1a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1f1b0 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72  prCodeTarget(Par
1f1c0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
1f1d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1f1e0 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
1f1f0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1f200 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1f210 78 70 72 43 6f 64 65 43 6f 6e 73 74 61 6e 74 73  xprCodeConstants
1f220 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
1f230 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1f240 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
1f250 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
1f260 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1f270 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75  sqlite3ExprIfTru
1f280 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
1f290 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1f2a0 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
1f2b0 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  lse(Parse*, Expr
1f2c0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61  *, int, int);.Ta
1f2d0 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  ble *sqlite3Find
1f2e0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63  Table(sqlite3*,c
1f2f0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
1f300 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20  t char*);.Table 
1f310 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
1f320 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69  ble(Parse*,int i
1f330 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72  sView,const char
1f340 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
1f350 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
1f360 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50  ocateTableItem(P
1f370 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77  arse*,int isView
1f380 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f  ,struct SrcList_
1f390 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a  item *);.Index *
1f3a0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78  sqlite3FindIndex
1f3b0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1f3c0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
1f3d0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1f3e0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
1f3f0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69  Table(sqlite3*,i
1f400 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1f410 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
1f420 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
1f430 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  x(sqlite3*,int,c
1f440 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
1f450 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28  d sqlite3Vacuum(
1f460 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
1f470 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68  ite3RunVacuum(ch
1f480 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b  ar**, sqlite3*);
1f490 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61  .char *sqlite3Na
1f4a0 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69  meFromToken(sqli
1f4b0 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
1f4c0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1f4d0 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70  mpare(Expr*, Exp
1f4e0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1f4f0 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28  ExprListCompare(
1f500 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c  ExprList*, ExprL
1f510 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
1f520 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67  te3ExprAnalyzeAg
1f530 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e  gregates(NameCon
1f540 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  text*, Expr*);.v
1f550 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
1f560 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61  nalyzeAggList(Na
1f570 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c  meContext*,ExprL
1f580 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
1f590 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68  e3FunctionUsesTh
1f5a0 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63  isSrc(Expr*, Src
1f5b0 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71  List*);.Vdbe *sq
1f5c0 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72  lite3GetVdbe(Par
1f5d0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
1f5e0 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28  e3PrngSaveState(
1f5f0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
1f600 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74  te3PrngRestoreSt
1f610 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
1f620 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 65 74  sqlite3PrngReset
1f630 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69  State(void);.voi
1f640 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63  d sqlite3Rollbac
1f650 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e  kAll(sqlite3*,in
1f660 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f670 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
1f680 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
1f690 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
1f6a0 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61  erifyNamedSchema
1f6b0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
1f6c0 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20  har *zDb);.void 
1f6d0 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e  sqlite3BeginTran
1f6e0 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  saction(Parse*, 
1f6f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1f700 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74  e3CommitTransact
1f710 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ion(Parse*);.voi
1f720 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63  d sqlite3Rollbac
1f730 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  kTransaction(Par
1f740 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
1f750 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73  e3Savepoint(Pars
1f760 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29  e*, int, Token*)
1f770 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
1f780 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71  oseSavepoints(sq
1f790 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73  lite3 *);.void s
1f7a0 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78  qlite3LeaveMutex
1f7b0 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73  AndCloseZombie(s
1f7c0 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
1f7d0 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
1f7e0 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ant(Expr*);.int 
1f7f0 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
1f800 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70  stantNotJoin(Exp
1f810 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1f820 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72  ExprIsConstantOr
1f830 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b  Function(Expr*);
1f840 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1f850 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c  IsInteger(Expr*,
1f860 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
1f870 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c  te3ExprCanBeNull
1f880 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76  (const Expr*);.v
1f890 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1f8a0 6f 64 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64  odeIsNullJump(Vd
1f8b0 62 65 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a  be*, const Expr*
1f8c0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
1f8d0 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64   sqlite3ExprNeed
1f8e0 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67  sNoAffinityChang
1f8f0 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63  e(const Expr*, c
1f900 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
1f910 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63  3IsRowid(const c
1f920 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
1f930 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65  te3GenerateRowDe
1f940 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62  lete(Parse*, Tab
1f950 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
1f960 6e 74 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69  nt, Trigger *, i
1f970 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1f980 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65  3GenerateRowInde
1f990 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20  xDelete(Parse*, 
1f9a0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1f9b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
1f9c0 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
1f9d0 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
1f9e0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1f9f0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
1fa00 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68  rateConstraintCh
1fa10 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ecks(Parse*,Tabl
1fa20 65 2a 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20  e*,int,int,.    
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa50 20 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e   int*,int,int,in
1fa60 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69  t,int,int*);.voi
1fa70 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74  d sqlite3Complet
1fa80 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65  eInsertion(Parse
1fa90 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1faa0 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20  int, int*, int, 
1fab0 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
1fac0 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41  qlite3OpenTableA
1fad0 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a  ndIndices(Parse*
1fae0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1faf0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1fb00 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
1fb10 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
1fb20 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1fb30 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50  ite3MultiWrite(P
1fb40 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
1fb50 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72  ite3MayAbort(Par
1fb60 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
1fb70 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74  e3HaltConstraint
1fb80 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
1fb90 74 2c 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  t, char*, int);.
1fba0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1fbb0 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  rDup(sqlite3*,Ex
1fbc0 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69  pr*,int);.ExprLi
1fbd0 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
1fbe0 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
1fbf0 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ExprList*,int);.
1fc00 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
1fc10 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74  SrcListDup(sqlit
1fc20 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74  e3*,SrcList*,int
1fc30 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
1fc40 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69  e3IdListDup(sqli
1fc50 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53  te3*,IdList*);.S
1fc60 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
1fc70 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a  lectDup(sqlite3*
1fc80 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76  ,Select*,int);.v
1fc90 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44  oid sqlite3FuncD
1fca0 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66  efInsert(FuncDef
1fcb0 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29  Hash*, FuncDef*)
1fcc0 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
1fcd0 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73  e3FindFunction(s
1fce0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1fcf0 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75  ar*,int,int,u8,u
1fd00 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
1fd10 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46  RegisterBuiltinF
1fd20 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
1fd30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1fd40 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65  RegisterDateTime
1fd50 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
1fd60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
1fd70 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74  isterGlobalFunct
1fd80 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
1fd90 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
1fda0 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ckOk(sqlite3*);.
1fdb0 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
1fdc0 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73  yCheckSickOrOk(s
1fdd0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
1fde0 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b  qlite3ChangeCook
1fdf0 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ie(Parse*, int);
1fe00 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
1fe10 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
1fe20 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1fe30 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
1fe40 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ).void sqlite3Ma
1fe50 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61  terializeView(Pa
1fe60 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
1fe70 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69  pr*, int);.#endi
1fe80 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
1fe90 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20  E_OMIT_TRIGGER. 
1fea0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
1feb0 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  inTrigger(Parse*
1fec0 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  , Token*,Token*,
1fed0 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c  int,int,IdList*,
1fee0 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  SrcList*,.      
1fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff00 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20       Expr*,int, 
1ff10 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
1ff20 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65  ite3FinishTrigge
1ff30 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
1ff40 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rStep*, Token*);
1ff50 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
1ff60 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65  ropTrigger(Parse
1ff70 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
1ff80 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1ff90 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
1ffa0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a  Parse*, Trigger*
1ffb0 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
1ffc0 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
1ffd0 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
1ffe0 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  e*, int, ExprLis
1fff0 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b  t*, int *pMask);
20000 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
20010 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50  te3TriggerList(P
20020 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29  arse *, Table *)
20030 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
20040 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50  CodeRowTrigger(P
20050 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a  arse*, Trigger *
20060 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
20070 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a  , int, Table *,.
20080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20090 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c              int,
200a0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
200b0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
200c0 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50  wTriggerDirect(P
200d0 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20  arse *, Trigger 
200e0 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
200f0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
20100 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69  id sqliteViewTri
20110 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61  ggers(Parse*, Ta
20120 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
20130 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
20140 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
20150 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71  teTriggerStep(sq
20160 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53  lite3*, TriggerS
20170 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  tep*);.  Trigger
20180 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
20190 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73  ggerSelectStep(s
201a0 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29  qlite3*,Select*)
201b0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
201c0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49  *sqlite3TriggerI
201d0 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65  nsertStep(sqlite
201e0 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73  3*,Token*, IdLis
201f0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
20200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20210 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
20220 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 75 38  List*,Select*,u8
20230 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
20240 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
20250 55 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74  UpdateStep(sqlit
20260 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  e3*,Token*,ExprL
20270 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29  ist*, Expr*, u8)
20280 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
20290 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44  *sqlite3TriggerD
202a0 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65  eleteStep(sqlite
202b0 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a  3*,Token*, Expr*
202c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
202d0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  3DeleteTrigger(s
202e0 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
202f0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
20300 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
20310 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
20320 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
20330 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  *);.  u32 sqlite
20340 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
20350 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Parse*,Trigger*,
20360 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e  ExprList*,int,in
20370 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23  t,Table*,int);.#
20380 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
20390 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
203a0 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20  ((p)->pToplevel 
203b0 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c  ? (p)->pToplevel
203c0 20 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20   : (p)).#else.# 
203d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
203e0 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c  iggersExist(B,C,
203f0 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e  D,E,F) 0.# defin
20400 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  e sqlite3DeleteT
20410 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65  rigger(A,B).# de
20420 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70  fine sqlite3Drop
20430 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a  TriggerPtr(A,B).
20440 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20450 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
20460 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20  rigger(A,B,C).# 
20470 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
20480 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42  deRowTrigger(A,B
20490 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a  ,C,D,E,F,G,H,I).
204a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
204b0 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69  CodeRowTriggerDi
204c0 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  rect(A,B,C,D,E,F
204d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
204e0 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c  e3TriggerList(X,
204f0 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73   Y) 0.# define s
20500 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
20510 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e  vel(p) p.# defin
20520 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
20530 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c  Colmask(A,B,C,D,
20540 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a  E,F,G) 0.#endif.
20550 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e  .int sqlite3Join
20560 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
20570 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
20580 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
20590 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b  e3CreateForeignK
205a0 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
205b0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78  ist*, Token*, Ex
205c0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  prList*, int);.v
205d0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72  oid sqlite3Defer
205e0 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
205f0 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  *, int);.#ifndef
20600 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
20610 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69  HORIZATION.  voi
20620 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  d sqlite3AuthRea
20630 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53  d(Parse*,Expr*,S
20640 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29  chema*,SrcList*)
20650 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
20660 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  uthCheck(Parse*,
20670 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
20680 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
20690 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
206a0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
206b0 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65  ontextPush(Parse
206c0 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c  *, AuthContext*,
206d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
206e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
206f0 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68  hContextPop(Auth
20700 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74  Context*);.  int
20710 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
20720 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Col(Parse*, cons
20730 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20  t char *, const 
20740 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65  char *, int);.#e
20750 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
20760 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62  ite3AuthRead(a,b
20770 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73  ,c,d).# define s
20780 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
20790 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51  a,b,c,d,e)    SQ
207a0 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65  LITE_OK.# define
207b0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
207c0 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23  extPush(a,b,c).#
207d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
207e0 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29  uthContextPop(a)
207f0 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65    ((void)(a)).#e
20800 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
20810 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Attach(Parse*, 
20820 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78  Expr*, Expr*, Ex
20830 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
20840 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Detach(Parse*,
20850 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
20860 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
20870 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
20880 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
20890 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
208a0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
208b0 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
208c0 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
208d0 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
208e0 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
208f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
20900 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
20910 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
20920 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
20930 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
20940 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
20950 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
20960 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
20970 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
20980 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
20990 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
209a0 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
209b0 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
209c0 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
209d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
209e0 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
209f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
20a00 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
20a10 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
20a20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69  nChar);.int sqli
20a30 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
20a40 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
20a50 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
20a60 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
20a70 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 0a  d(const u8**);..
20a80 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74  /*.** Routines t
20a90 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  o read and write
20aa0 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
20ab0 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73   integers.  Thes
20ac0 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
20ad0 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c  defined locally,
20ae0 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20   but now we use 
20af0 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69  the varint routi
20b00 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e  nes in the util.
20b10 63 0a 2a 2a 20 66 69 6c 65 2e 20 20 43 6f 64 65  c.** file.  Code
20b20 20 73 68 6f 75 6c 64 20 75 73 65 20 74 68 65 20   should use the 
20b30 4d 41 43 52 4f 20 66 6f 72 6d 73 20 62 65 6c 6f  MACRO forms belo
20b40 77 2c 20 61 73 20 74 68 65 20 56 61 72 69 6e 74  w, as the Varint
20b50 33 32 20 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 61  32 versions.** a
20b60 72 65 20 63 6f 64 65 64 20 74 6f 20 61 73 73 75  re coded to assu
20b70 6d 65 20 74 68 65 20 73 69 6e 67 6c 65 20 62 79  me the single by
20b80 74 65 20 63 61 73 65 20 69 73 20 61 6c 72 65 61  te case is alrea
20b90 64 79 20 68 61 6e 64 6c 65 64 20 28 77 68 69 63  dy handled (whic
20ba0 68 20 0a 2a 2a 20 74 68 65 20 4d 41 43 52 4f 20  h .** the MACRO 
20bb0 66 6f 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69  form does)..*/.i
20bc0 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
20bd0 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
20be0 72 2a 2c 20 75 36 34 29 3b 0a 69 6e 74 20 73 71  r*, u64);.int sq
20bf0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32  lite3PutVarint32
20c00 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
20c10 20 75 33 32 29 3b 0a 75 38 20 73 71 6c 69 74 65   u32);.u8 sqlite
20c20 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74  3GetVarint(const
20c30 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
20c40 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c  , u64 *);.u8 sql
20c50 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
20c60 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
20c70 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69  har *, u32 *);.i
20c80 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
20c90 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a  Len(u64 v);../*.
20ca0 2a 2a 20 54 68 65 20 68 65 61 64 65 72 20 6f 66  ** The header of
20cb0 20 61 20 72 65 63 6f 72 64 20 63 6f 6e 73 69 73   a record consis
20cc0 74 73 20 6f 66 20 61 20 73 65 71 75 65 6e 63 65  ts of a sequence
20cd0 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
20ce0 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68   integers..** Th
20cf0 65 73 65 20 69 6e 74 65 67 65 72 73 20 61 72 65  ese integers are
20d00 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 73   almost always s
20d10 6d 61 6c 6c 20 61 6e 64 20 61 72 65 20 65 6e 63  mall and are enc
20d20 6f 64 65 64 20 61 73 20 61 20 73 69 6e 67 6c 65  oded as a single
20d30 20 62 79 74 65 2e 0a 2a 2a 20 54 68 65 20 66 6f   byte..** The fo
20d40 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 74  llowing macros t
20d50 61 6b 65 20 61 64 76 61 6e 74 61 67 65 20 74 68  ake advantage th
20d60 69 73 20 66 61 63 74 20 74 6f 20 70 72 6f 76 69  is fact to provi
20d70 64 65 20 61 20 66 61 73 74 20 65 6e 63 6f 64 65  de a fast encode
20d80 0a 2a 2a 20 61 6e 64 20 64 65 63 6f 64 65 20 6f  .** and decode o
20d90 66 20 74 68 65 20 69 6e 74 65 67 65 72 73 20 69  f the integers i
20da0 6e 20 61 20 72 65 63 6f 72 64 20 68 65 61 64 65  n a record heade
20db0 72 2e 20 20 49 74 20 69 73 20 66 61 73 74 65 72  r.  It is faster
20dc0 20 66 6f 72 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a   for the common.
20dd0 2a 2a 20 63 61 73 65 20 77 68 65 72 65 20 74 68  ** case where th
20de0 65 20 69 6e 74 65 67 65 72 20 69 73 20 61 20 73  e integer is a s
20df0 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 49 74 20  ingle byte.  It 
20e00 69 73 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77  is a little slow
20e10 65 72 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 69  er when the.** i
20e20 6e 74 65 67 65 72 20 69 73 20 74 77 6f 20 6f 72  nteger is two or
20e30 20 6d 6f 72 65 20 62 79 74 65 73 2e 20 20 42 75   more bytes.  Bu
20e40 74 20 6f 76 65 72 61 6c 6c 20 69 74 20 69 73 20  t overall it is 
20e50 66 61 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  faster..**.** Th
20e60 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72  e following expr
20e70 65 73 73 69 6f 6e 73 20 61 72 65 20 65 71 75 69  essions are equi
20e80 76 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20  valent:.**.**   
20e90 20 20 78 20 3d 20 73 71 6c 69 74 65 33 47 65 74    x = sqlite3Get
20ea0 56 61 72 69 6e 74 33 32 28 20 41 2c 20 26 42 20  Varint32( A, &B 
20eb0 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71  );.**     x = sq
20ec0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32  lite3PutVarint32
20ed0 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20  ( A, B );.**.** 
20ee0 20 20 20 20 78 20 3d 20 67 65 74 56 61 72 69 6e      x = getVarin
20ef0 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 20  t32( A, B );.** 
20f00 20 20 20 20 78 20 3d 20 70 75 74 56 61 72 69 6e      x = putVarin
20f10 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a  t32( A, B );.**.
20f20 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  */.#define getVa
20f30 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
20f40 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29   (u8)((*(A)<(u8)
20f50 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29  0x80)?((B)=(u32)
20f60 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47  *(A)),1:sqlite3G
20f70 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28  etVarint32((A),(
20f80 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65  u32 *)&(B))).#de
20f90 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32  fine putVarint32
20fa0 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
20fb0 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30  ((u32)(B)<(u32)0
20fc0 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69  x80)?(*(A)=(unsi
20fd0 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31  gned char)(B)),1
20fe0 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56  :\.  sqlite3PutV
20ff0 61 72 69 6e 74 33 32 28 28 41 29 2c 28 42 29 29  arint32((A),(B))
21000 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  ).#define getVar
21010 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65  int    sqlite3Ge
21020 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20  tVarint.#define 
21030 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  putVarint    sql
21040 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a  ite3PutVarint...
21050 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
21060 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
21070 53 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65  Str(Vdbe *, Inde
21080 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  x *);.void sqlit
21090 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 53  e3TableAffinityS
210a0 74 72 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  tr(Vdbe *, Table
210b0 20 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65   *);.char sqlite
210c0 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79  3CompareAffinity
210d0 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
210e0 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71  ar aff2);.int sq
210f0 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
21100 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72  tyOk(Expr *pExpr
21110 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e  , char idx_affin
21120 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ity);.char sqlit
21130 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45  e3ExprAffinity(E
21140 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
21150 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63   sqlite3Atoi64(c
21160 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
21170 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64  , int, u8);.void
21180 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71   sqlite3Error(sq
21190 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
211a0 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76  st char*,...);.v
211b0 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
211c0 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20  oBlob(sqlite3*, 
211d0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
211e0 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65  nt n);.u8 sqlite
211f0 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29  3HexToInt(int h)
21200 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f  ;.int sqlite3Two
21210 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  PartName(Parse *
21220 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
21230 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a   *, Token **);..
21240 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
21250 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
21260 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
21270 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e  ) || \.    defin
21280 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 5f  ed(SQLITE_DEBUG_
21290 4f 53 5f 54 52 41 43 45 29 0a 63 6f 6e 73 74 20  OS_TRACE).const 
212a0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
212b0 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69  Name(int);.#endi
212c0 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  f..const char *s
212d0 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74  qlite3ErrStr(int
212e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
212f0 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a  adSchema(Parse *
21300 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71  pParse);.CollSeq
21310 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c   *sqlite3FindCol
21320 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38  lSeq(sqlite3*,u8
21330 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72   enc, const char
21340 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20  *,int);.CollSeq 
21350 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f  *sqlite3LocateCo
21360 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
21370 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  rse, const char*
21380 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  zName);.CollSeq 
21390 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c  *sqlite3ExprColl
213a0 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
213b0 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
213c0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
213d0 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65  prAddCollateToke
213e0 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  n(Parse *pParse,
213f0 20 45 78 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b   Expr*, Token*);
21400 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
21410 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69  prAddCollateStri
21420 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ng(Parse*,Expr*,
21430 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78  const char*);.Ex
21440 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53  pr *sqlite3ExprS
21450 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a  kipCollate(Expr*
21460 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
21470 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  eckCollSeq(Parse
21480 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a   *, CollSeq *);.
21490 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
214a0 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65  ObjectName(Parse
214b0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
214c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
214d0 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71  dbeSetChanges(sq
214e0 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69  lite3 *, int);.i
214f0 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  nt sqlite3AddInt
21500 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
21510 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  t sqlite3SubInt6
21520 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
21530 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34   sqlite3MulInt64
21540 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
21550 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28  sqlite3AbsInt32(
21560 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  int);.#ifdef SQL
21570 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e  ITE_ENABLE_8_3_N
21580 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65  AMES.void sqlite
21590 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e  3FileSuffix3(con
215a0 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29  st char*, char*)
215b0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
215c0 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
215d0 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a  ix3(X,Y).#endif.
215e0 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  u8 sqlite3GetBoo
215f0 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  lean(const char 
21600 2a 7a 2c 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20  *z,int);..const 
21610 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c  void *sqlite3Val
21620 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76  ueText(sqlite3_v
21630 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  alue*, u8);.int 
21640 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
21650 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  s(sqlite3_value*
21660 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
21670 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73  te3ValueSetStr(s
21680 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69  qlite3_value*, i
21690 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  nt, const void *
216a0 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20  ,u8, .          
216b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f                vo
216c0 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
216d0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
216e0 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
216f0 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
21700 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
21710 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
21720 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
21730 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
21740 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
21750 6e 74 2c 20 75 38 29 3b 0a 23 69 66 64 65 66 20  nt, u8);.#ifdef 
21760 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
21770 41 54 33 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  AT3.char *sqlite
21780 33 55 74 66 38 74 6f 31 36 28 73 71 6c 69 74 65  3Utf8to16(sqlite
21790 33 20 2a 2c 20 75 38 2c 20 63 68 61 72 20 2a 2c  3 *, u8, char *,
217a0 20 69 6e 74 2c 20 69 6e 74 20 2a 29 3b 0a 23 65   int, int *);.#e
217b0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
217c0 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71  ValueFromExpr(sq
217d0 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c  lite3 *, Expr *,
217e0 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33   u8, u8, sqlite3
217f0 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64  _value **);.void
21800 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
21810 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74  lyAffinity(sqlit
21820 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20  e3_value *, u8, 
21830 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  u8);.#ifndef SQL
21840 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
21850 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
21860 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
21870 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
21880 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  y[];.extern cons
21890 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
218a0 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
218b0 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  wer[];.extern co
218c0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
218d0 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  r sqlite3CtypeMa
218e0 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  p[];.extern cons
218f0 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49  t Token sqlite3I
21900 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65  ntTokens[];.exte
21910 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74  rn SQLITE_WSD st
21920 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
21930 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
21940 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f  ;.extern SQLITE_
21950 57 53 44 20 46 75 6e 63 44 65 66 48 61 73 68 20  WSD FuncDefHash 
21960 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e  sqlite3GlobalFun
21970 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20  ctions;.#ifndef 
21980 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
21990 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
219a0 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23  e3PendingByte;.#
219b0 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69  endif.#endif.voi
219c0 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67  d sqlite3RootPag
219d0 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c  eMoved(sqlite3*,
219e0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
219f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69  .void sqlite3Rei
21a00 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b  ndex(Parse*, Tok
21a10 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
21a20 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
21a30 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
21a40 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
21a50 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72  rRenameTable(Par
21a60 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
21a70 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
21a80 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73  te3GetToken(cons
21a90 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
21aa0 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20  *, int *);.void 
21ab0 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72  sqlite3NestedPar
21ac0 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  se(Parse*, const
21ad0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
21ae0 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65  id sqlite3Expire
21af0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
21b00 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ts(sqlite3*);.in
21b10 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62  t sqlite3CodeSub
21b20 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20  select(Parse *, 
21b30 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  Expr *, int, int
21b40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
21b50 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a  electPrep(Parse*
21b60 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
21b70 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
21b80 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61  lite3MatchSpanNa
21b90 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  me(const char*, 
21ba0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
21bb0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
21bc0 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
21bd0 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61  te3ResolveExprNa
21be0 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
21bf0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
21c00 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c  qlite3ResolveSel
21c10 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  ectNames(Parse*,
21c20 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
21c30 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
21c40 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72  ite3ResolveOrder
21c50 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
21c60 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73  Select*, ExprLis
21c70 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
21c80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
21c90 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65  lumnDefault(Vdbe
21ca0 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
21cb0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21cc0 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41  ite3AlterFinishA
21cd0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
21ce0 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
21cf0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67   sqlite3AlterBeg
21d00 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  inAddColumn(Pars
21d10 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b  e *, SrcList *);
21d20 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
21d30 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73  3GetCollSeq(Pars
21d40 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20  e*, u8, CollSeq 
21d50 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
21d60 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66  .char sqlite3Aff
21d70 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20  inityType(const 
21d80 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
21d90 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73  ite3Analyze(Pars
21da0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
21db0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
21dc0 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
21dd0 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b  r(BusyHandler*);
21de0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
21df0 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  Db(sqlite3*, Tok
21e00 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
21e10 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69  3FindDbName(sqli
21e20 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
21e30 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
21e40 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71  3AnalysisLoad(sq
21e50 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b  lite3*,int iDB);
21e60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
21e70 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28  eteIndexSamples(
21e80 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29  sqlite3*,Index*)
21e90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
21ea0 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65  faultRowEst(Inde
21eb0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
21ec0 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e  3RegisterLikeFun
21ed0 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c  ctions(sqlite3*,
21ee0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
21ef0 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  e3IsLikeFunction
21f00 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
21f10 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69  int*,char*);.voi
21f20 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d  d sqlite3Minimum
21f30 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65  FileFormat(Parse
21f40 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
21f50 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  id sqlite3Schema
21f60 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53  Clear(void *);.S
21f70 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63  chema *sqlite3Sc
21f80 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20  hemaGet(sqlite3 
21f90 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74  *, Btree *);.int
21fa0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f   sqlite3SchemaTo
21fb0 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64  Index(sqlite3 *d
21fc0 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65  b, Schema *);.Ke
21fd0 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 49 6e  yInfo *sqlite3In
21fe0 64 65 78 4b 65 79 69 6e 66 6f 28 50 61 72 73 65  dexKeyinfo(Parse
21ff0 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 69 6e   *, Index *);.in
22000 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  t sqlite3CreateF
22010 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  unc(sqlite3 *, c
22020 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
22030 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a  , int, void *, .
22040 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
22050 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
22060 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
22070 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
22080 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
22090 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
220a0 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73   **), void (*)(s
220b0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
220c0 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  ,.  FuncDestruct
220d0 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a  or *pDestructor.
220e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70  );.int sqlite3Ap
220f0 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64  iExit(sqlite3 *d
22100 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  b, int);.int sql
22110 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61  ite3OpenTempData
22120 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  base(Parse *);..
22130 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
22140 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75  ccumInit(StrAccu
22150 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  m*, char*, int, 
22160 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22170 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
22180 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
22190 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69   char*,int);.voi
221a0 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 53  d sqlite3AppendS
221b0 70 61 63 65 28 53 74 72 41 63 63 75 6d 2a 2c 69  pace(StrAccum*,i
221c0 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  nt);.char *sqlit
221d0 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
221e0 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
221f0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
22200 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a  mReset(StrAccum*
22210 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
22220 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65  electDestInit(Se
22230 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e  lectDest*,int,in
22240 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
22250 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70  3CreateColumnExp
22260 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63  r(sqlite3 *, Src
22270 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  List *, int, int
22280 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
22290 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71  BackupRestart(sq
222a0 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b  lite3_backup *);
222b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
222c0 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65  kupUpdate(sqlite
222d0 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f  3_backup *, Pgno
222e0 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a  , const u8 *);..
222f0 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
22300 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e  ace to the LEMON
22310 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65  -generated parse
22320 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  r.*/.void *sqlit
22330 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f  e3ParserAlloc(vo
22340 69 64 2a 28 2a 29 28 73 69 7a 65 5f 74 29 29 3b  id*(*)(size_t));
22350 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72  .void sqlite3Par
22360 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76  serFree(void*, v
22370 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
22380 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
22390 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54  er(void*, int, T
223a0 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23  oken, Parse*);.#
223b0 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58  ifdef YYTRACKMAX
223c0 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74  STACKDEPTH.  int
223d0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 53 74   sqlite3ParserSt
223e0 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a  ackPeak(void*);.
223f0 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c  #endif..void sql
22400 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65  ite3AutoLoadExte
22410 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
22420 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
22430 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e  _OMIT_LOAD_EXTEN
22440 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  SION.  void sqli
22450 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
22460 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65  ns(sqlite3*);.#e
22470 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
22480 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
22490 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23  ons(X).#endif..#
224a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
224b0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
224c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61    void sqlite3Ta
224d0 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c  bleLock(Parse *,
224e0 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63   int, int, u8, c
224f0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65  onst char *);.#e
22500 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
22510 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76  lite3TableLock(v
22520 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66  ,w,x,y,z).#endif
22530 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
22540 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74  TEST.  int sqlit
22550 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e  e3Utf8To8(unsign
22560 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  ed char*);.#endi
22570 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
22580 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
22590 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  LE.#  define sql
225a0 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 59 29  ite3VtabClear(Y)
225b0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
225c0 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20  e3VtabSync(X,Y) 
225d0 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
225e0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 52  ine sqlite3VtabR
225f0 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65  ollback(X).#  de
22600 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
22610 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66  Commit(X).#  def
22620 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49  ine sqlite3VtabI
22630 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64  nSync(db) 0.#  d
22640 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
22650 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64 65 66  bLock(X) .#  def
22660 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
22670 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69  nlock(X).#  defi
22680 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  ne sqlite3VtabUn
22690 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64  lockList(X).#  d
226a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
226b0 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c  bSavepoint(X, Y,
226c0 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20   Z) SQLITE_OK.# 
226d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47   define sqlite3G
226e0 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28  etVTable(X,Y)  (
226f0 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73  (VTable*)0).#els
22700 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  e.   void sqlite
22710 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74  3VtabClear(sqlit
22720 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b  e3 *db, Table*);
22730 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
22740 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73  VtabDisconnect(s
22750 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
22760 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71  e *p);.   int sq
22770 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73 71  lite3VtabSync(sq
22780 6c 69 74 65 33 20 2a 64 62 2c 20 63 68 61 72 20  lite3 *db, char 
22790 2a 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  **);.   int sqli
227a0 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
227b0 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
227c0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
227d0 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
227e0 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
227f0 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
22800 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
22810 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
22820 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
22830 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
22840 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
22850 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
22860 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
22870 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
22880 2c 20 69 6e 74 29 3b 0a 20 20 20 56 54 61 62 6c  , int);.   VTabl
22890 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61  e *sqlite3GetVTa
228a0 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
228b0 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65  ble*);.#  define
228c0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
228d0 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56  nc(db) ((db)->nV
228e0 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d  Trans>0 && (db)-
228f0 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e  >aVTrans==0).#en
22900 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
22910 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65  VtabMakeWritable
22920 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
22930 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
22940 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  bBeginParse(Pars
22950 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
22960 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  n*, Token*, int)
22970 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
22980 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61  abFinishParse(Pa
22990 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
229a0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
229b0 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a  rgInit(Parse*);.
229c0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
229d0 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a  ArgExtend(Parse*
229e0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
229f0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
22a00 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  eate(sqlite3*, i
22a10 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
22a20 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20  , char **);.int 
22a30 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
22a40 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54  onnect(Parse*, T
22a50 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
22a60 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
22a70 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  oy(sqlite3*, int
22a80 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
22a90 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
22aa0 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c  Begin(sqlite3 *,
22ab0 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63   VTable *);.Func
22ac0 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62  Def *sqlite3Vtab
22ad0 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e  OverloadFunction
22ae0 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44  (sqlite3 *,FuncD
22af0 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45  ef*, int nArg, E
22b00 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
22b10 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69  te3InvalidFuncti
22b20 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  on(sqlite3_conte
22b30 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
22b40 76 61 6c 75 65 2a 2a 29 3b 0a 69 6e 74 20 73 71  value**);.int sq
22b50 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74  lite3VdbeParamet
22b60 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63  erIndex(Vdbe*, c
22b70 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
22b80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61  ;.int sqlite3Tra
22b90 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71  nsferBindings(sq
22ba0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71  lite3_stmt *, sq
22bb0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 69  lite3_stmt *);.i
22bc0 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
22bd0 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
22be0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
22bf0 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
22c00 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
22c10 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
22c20 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
22c30 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
22c40 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
22c50 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
22c60 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
22c70 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
22c80 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
22c90 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
22ca0 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
22cb0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
22cc0 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
22cd0 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
22ce0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
22cf0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
22d00 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
22d10 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
22d20 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
22d30 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
22d40 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69  if../* Declarati
22d50 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ons for function
22d60 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c  s in fkey.c. All
22d70 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65   of these are re
22d80 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d  placed by.** no-
22d90 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49  op macros if OMI
22da0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
22db0 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69   defined. In thi
22dc0 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67  s case no foreig
22dd0 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f  n.** key functio
22de0 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61  nality is availa
22df0 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49  ble. If OMIT_TRI
22e00 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20  GGER is defined 
22e10 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45  but.** OMIT_FORE
22e20 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20  IGN_KEY is not, 
22e30 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65  only some of the
22e40 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
22e50 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68  o-oped. In.** th
22e60 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20  is case foreign 
22e70 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c  keys are parsed,
22e80 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75   but no other fu
22e90 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a  nctionality is .
22ea0 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66  ** provided (enf
22eb0 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63  orcement of FK c
22ec0 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69  onstraints requi
22ed0 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73  res the triggers
22ee0 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f   sub-system)..*/
22ef0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
22f00 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
22f10 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
22f20 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
22f30 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73  RIGGER).  void s
22f40 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61  qlite3FkCheck(Pa
22f50 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
22f60 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
22f70 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
22f80 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
22f90 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  st *, Table*);. 
22fa0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41   void sqlite3FkA
22fb0 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54  ctions(Parse*, T
22fc0 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  able*, ExprList*
22fd0 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  , int);.  int sq
22fe0 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
22ff0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
23000 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33  int*, int);.  u3
23010 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  2 sqlite3FkOldma
23020 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  sk(Parse*, Table
23030 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69  *);.  FKey *sqli
23040 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28  te3FkReferences(
23050 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a  Table *);.#else.
23060 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
23070 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63  3FkActions(a,b,c
23080 2c 64 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,d).  #define sq
23090 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62  lite3FkCheck(a,b
230a0 2c 63 2c 64 29 0a 20 20 23 64 65 66 69 6e 65 20  ,c,d).  #define 
230b0 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
230c0 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66  le(a,b,c).  #def
230d0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  ine sqlite3FkOld
230e0 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 30  mask(a,b)      0
230f0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
23100 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62  e3FkRequired(a,b
23110 2c 63 2c 64 29 20 30 0a 23 65 6e 64 69 66 0a 23  ,c,d) 0.#endif.#
23120 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
23130 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
23140 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
23150 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c  elete(sqlite3 *,
23160 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20   Table*);.  int 
23170 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
23180 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c  ndex(Parse*,Tabl
23190 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a  e*,FKey*,Index**
231a0 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20  ,int**);.#else. 
231b0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
231c0 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20  FkDelete(a,b).  
231d0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
231e0 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62  kLocateIndex(a,b
231f0 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a  ,c,d,e).#endif..
23200 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65  ./*.** Available
23210 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73   fault injectors
23220 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d  .  Should be num
23230 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20  bered beginning 
23240 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69  with 0..*/.#defi
23250 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
23260 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20  NJECTOR_MALLOC  
23270 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c     0.#define SQL
23280 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
23290 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a  R_COUNT      1..
232a0 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
232b0 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ace to the code 
232c0 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20  in fault.c used 
232d0 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20  for identifying 
232e0 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c  "benign".** mall
232f0 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69  oc failures. Thi
23300 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e  s is only presen
23310 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  t if SQLITE_OMIT
23320 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a  _BUILTIN_TEST.**
23330 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e   is not defined.
23340 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
23350 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
23360 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
23370 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
23380 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f  lloc(void);.  vo
23390 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  id sqlite3EndBen
233a0 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
233b0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
233c0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
233d0 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64  ignMalloc().  #d
233e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64  efine sqlite3End
233f0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23  BenignMalloc().#
23400 65 6e 64 69 66 0a 0a 23 64 65 66 69 6e 65 20 49  endif..#define I
23410 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20  N_INDEX_ROWID   
23420 20 20 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e          1.#defin
23430 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20  e IN_INDEX_EPH  
23440 20 20 20 20 20 20 20 20 20 20 20 32 0a 23 64 65             2.#de
23450 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
23460 44 45 58 5f 41 53 43 20 20 20 20 20 20 20 33 0a  DEX_ASC       3.
23470 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
23480 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 20 20  _INDEX_DESC     
23490 20 34 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69   4.int sqlite3Fi
234a0 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20  ndInIndex(Parse 
234b0 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2a 29  *, Expr *, int*)
234c0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
234d0 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57  _ENABLE_ATOMIC_W
234e0 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74  RITE.  int sqlit
234f0 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71  e3JournalOpen(sq
23500 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e  lite3_vfs *, con
23510 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74  st char *, sqlit
23520 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20  e3_file *, int, 
23530 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
23540 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73  te3JournalSize(s
23550 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20  qlite3_vfs *);. 
23560 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
23570 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65  nalCreate(sqlite
23580 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74  3_file *);.  int
23590 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45   sqlite3JournalE
235a0 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66 69  xists(sqlite3_fi
235b0 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20  le *p);.#else.  
235c0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a  #define sqlite3J
235d0 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73 29  ournalSize(pVfs)
235e0 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69   ((pVfs)->szOsFi
235f0 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  le).  #define sq
23600 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73  lite3JournalExis
23610 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a  ts(p) 1.#endif..
23620 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a  void sqlite3MemJ
23630 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
23640 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20  e3_file *);.int 
23650 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
23660 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74  lSize(void);.int
23670 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75   sqlite3IsMemJou
23680 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c  rnal(sqlite3_fil
23690 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54  e *);..#if SQLIT
236a0 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
236b0 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  >0.  void sqlite
236c0 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28 50  3ExprSetHeight(P
236d0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
236e0 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73 71  pr *p);.  int sq
236f0 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
23700 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b  eight(Select *);
23710 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78  .  int sqlite3Ex
23720 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61  prCheckHeight(Pa
23730 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  rse*, int);.#els
23740 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
23750 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74  te3ExprSetHeight
23760 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20  (x,y).  #define 
23770 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
23780 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23  rHeight(x) 0.  #
23790 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
237a0 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c  prCheckHeight(x,
237b0 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73  y).#endif..u32 s
237c0 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63  qlite3Get4byte(c
237d0 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20  onst u8*);.void 
237e0 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28  sqlite3Put4byte(
237f0 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64  u8*, u32);..#ifd
23800 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
23810 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
23820 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
23830 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73  nectionBlocked(s
23840 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65  qlite3 *, sqlite
23850 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  3 *);.  void sql
23860 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
23870 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
23880 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  db);.  void sqli
23890 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
238a0 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  sed(sqlite3 *db)
238b0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
238c0 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
238d0 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a  ionBlocked(x,y).
238e0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
238f0 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
23900 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65  ked(x).  #define
23910 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
23920 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64  onClosed(x).#end
23930 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
23940 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  E_DEBUG.  void s
23950 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
23960 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29  e(FILE*, char *)
23970 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
23980 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  If the SQLITE_EN
23990 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69  ABLE IOTRACE exi
239a0 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f  sts then the glo
239b0 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  bal variable.** 
239c0 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69  sqlite3IoTrace i
239d0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
239e0 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75   printf-like rou
239f0 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  tine used to.** 
23a00 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e  print I/O tracin
23a10 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a  g messages. .*/.
23a20 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
23a30 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64  ABLE_IOTRACE.# d
23a40 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
23a50 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54    if( sqlite3IoT
23a60 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49  race ){ sqlite3I
23a70 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f  oTrace A; }.  vo
23a80 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  id sqlite3VdbeIO
23a90 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b  TraceSql(Vdbe*);
23aa0 0a 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76  .SQLITE_EXTERN v
23ab0 6f 69 64 20 28 2a 73 71 6c 69 74 65 33 49 6f 54  oid (*sqlite3IoT
23ac0 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72  race)(const char
23ad0 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20  *,...);.#else.# 
23ae0 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
23af0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
23b00 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
23b10 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
23b20 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73  * These routines
23b30 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66   are available f
23b40 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65  or the mem2.c de
23b50 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61  bugging memory a
23b60 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79  llocator.** only
23b70 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64  .  They are used
23b80 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
23b90 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73  different "types
23ba0 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61  " of memory.** a
23bb0 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70  llocations are p
23bc0 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20  roperly tracked 
23bd0 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a  by the system..*
23be0 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
23bf0 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65  ebugSetType() se
23c00 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66  ts the "type" of
23c10 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74   an allocation t
23c20 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20  o one of.** the 
23c30 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73  MEMTYPE_* macros
23c40 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20   defined below. 
23c50 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62   The type must b
23c60 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68  e a bitmask with
23c70 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74  .** a single bit
23c80 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69   set..**.** sqli
23c90 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
23ca0 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
23cb0 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  e if any of the 
23cc0 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
23cd0 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
23ce0 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
23cf0 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
23d00 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
23d10 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73  gSetType()..** s
23d20 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
23d30 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e  sType() is inten
23d40 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69  ded for use insi
23d50 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  de assert() stat
23d60 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71  ements..**.** sq
23d70 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
23d80 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
23d90 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ue if none of th
23da0 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
23db0 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
23dc0 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
23dd0 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
23de0 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
23df0 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
23e00 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20  .** Perhaps the 
23e10 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70  most important p
23e20 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66  oint is the diff
23e30 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d  erence between M
23e40 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61  EMTYPE_HEAP.** a
23e50 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  nd MEMTYPE_LOOKA
23e60 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c  SIDE.  If an all
23e70 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59  ocation is MEMTY
23e80 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68  PE_LOOKASIDE, th
23e90 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d  at means.** it m
23ea0 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61  ight have been a
23eb0 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b  llocated by look
23ec0 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68  aside, except th
23ed0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73  e allocation was
23ee0 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72  .** too large or
23ef0 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61   lookaside was a
23f00 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74  lready full.  It
23f10 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
23f20 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20   verify.** that 
23f30 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74  allocations that
23f40 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
23f50 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f   satisfied by lo
23f60 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a  okaside are not.
23f70 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74  ** passed back t
23f80 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  o non-lookaside 
23f90 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e  free() routines.
23fa0 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61    Asserts such a
23fb0 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65  s the.** example
23fc0 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65   above are place
23fd0 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f  d on the non-loo
23fe0 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
23ff0 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79  utines to verify
24000 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61  .** this constra
24010 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  int. .**.** All 
24020 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70  of this is no-op
24030 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f   for a productio
24040 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c  n build.  It onl
24050 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20  y comes into.** 
24060 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51  play when the SQ
24070 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f  LITE_MEMDEBUG co
24080 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
24090 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69  n is used..*/.#i
240a0 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44  fdef SQLITE_MEMD
240b0 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
240c0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
240d0 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
240e0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
240f0 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a  bugHasType(void*
24100 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
24110 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
24120 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c  e(void*,u8);.#el
24130 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
24140 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
24150 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f  pe(X,Y)  /* no-o
24160 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71  p */.# define sq
24170 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
24180 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64  Type(X,Y)  1.# d
24190 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
241a0 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29  debugNoType(X,Y)
241b0 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66     1.#endif.#def
241c0 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  ine MEMTYPE_HEAP
241d0 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20         0x01  /* 
241e0 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c  General heap all
241f0 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
24200 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  ine MEMTYPE_LOOK
24210 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20  ASIDE  0x02  /* 
24220 4d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  Might have been 
24230 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79  lookaside memory
24240 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
24250 59 50 45 5f 53 43 52 41 54 43 48 20 20 20 20 30  YPE_SCRATCH    0
24260 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20  x04  /* Scratch 
24270 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
24280 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50  define MEMTYPE_P
24290 43 41 43 48 45 20 20 20 20 20 30 78 30 38 20 20  CACHE     0x08  
242a0 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c  /* Page cache al
242b0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
242c0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 44 42 20  fine MEMTYPE_DB 
242d0 20 20 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a          0x10  /*
242e0 20 55 73 65 73 20 73 71 6c 69 74 65 33 44 62 4d   Uses sqlite3DbM
242f0 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c 69 74  alloc, not sqlit
24300 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 23 65 6e  e_malloc */..#en
24310 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e  dif /* _SQLITEIN
24320 54 5f 48 5f 20 2a 2f 0a                          T_H_ */.