/ Hex Artifact Content
Login

Artifact da0e92df9550e57107aa43eab63b29d040fe9c80:


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 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  * If none of the
16e0: 20 61 62 6f 76 65 20 61 72 65 20 64 65 66 69 6e   above are defin
16f0: 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53 51 4c  ed, then set SQL
1700: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
1710: 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65 66 61  C as.** the defa
1720: 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ult..*/.#if defi
1730: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
1740: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
1750: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
1760: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
1770: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
1780: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
1790: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
17a0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e 31 0a  ITE_MEMDEBUG)>1.
17b0: 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f 72 20  # error "Two or 
17c0: 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  more of the foll
17d0: 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d 74 69  owing compile-ti
17e0: 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  me configuration
17f0: 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65 20 64   options\. are d
1800: 65 66 69 6e 65 64 20 62 75 74 20 61 74 20 6d 6f  efined but at mo
1810: 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f 77 65  st one is allowe
1820: 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59 53 54  d:\. SQLITE_SYST
1830: 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54  EM_MALLOC, SQLIT
1840: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20  E_WIN32_MALLOC, 
1850: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 2c  SQLITE_MEMDEBUG,
1860: 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  \. SQLITE_ZERO_M
1870: 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a 23 69  ALLOC".#endif.#i
1880: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
1890: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20  _SYSTEM_MALLOC) 
18a0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
18b0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
18c0: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
18d0: 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c  (SQLITE_ZERO_MAL
18e0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
18f0: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
1900: 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20  UG)==0.# define 
1910: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1920: 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  LLOC 1.#endif../
1930: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4d  *.** If SQLITE_M
1940: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
1950: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1960: 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70 20 74  en try to keep t
1970: 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66 20 6d  he.** sizes of m
1980: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1990: 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76 61 6c  s below this val
19a0: 75 65 20 77 68 65 72 65 20 70 6f 73 73 69 62 6c  ue where possibl
19b0: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
19c0: 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  ed(SQLITE_MALLOC
19d0: 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23 20 64  _SOFT_LIMIT).# d
19e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 4c  efine SQLITE_MAL
19f0: 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 31  LOC_SOFT_LIMIT 1
1a00: 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  024.#endif../*.*
1a10: 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65 66  * We need to def
1a20: 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ine _XOPEN_SOURC
1a30: 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69 6e 20  E as follows in 
1a40: 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c 65 0a  order to enable.
1a50: 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d 75 74  ** recursive mut
1a60: 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55 6e 69  exes on most Uni
1a70: 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20 66 63  x systems and fc
1a80: 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e 42 53  hmod() on OpenBS
1a90: 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50 45 4e  D..** But _XOPEN
1aa0: 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65 20 63  _SOURCE define c
1ab0: 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73 20 66  auses problems f
1ac0: 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73 6f 20  or Mac OS X, so 
1ad0: 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23  omit.** it..*/.#
1ae0: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58 4f 50  if !defined(_XOP
1af0: 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20 21 64  EN_SOURCE) && !d
1b00: 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49 4e 5f  efined(__DARWIN_
1b10: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
1b20: 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64 65 66  _APPLE__).#  def
1b30: 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ine _XOPEN_SOURC
1b40: 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  E 600.#endif../*
1b50: 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53  .** NDEBUG and S
1b60: 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20  QLITE_DEBUG are 
1b70: 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73  opposites.  It s
1b80: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20  hould always be 
1b90: 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  true that.** def
1ba0: 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64  ined(NDEBUG)==!d
1bb0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1bc0: 42 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69  BUG).  If this i
1bd0: 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
1be0: 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74  true,.** make it
1bf0: 20 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e   true by definin
1c00: 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20  g or undefining 
1c10: 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65  NDEBUG..**.** Se
1c20: 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b  tting NDEBUG mak
1c30: 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c  es the code smal
1c40: 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72 20 62  ler and faster b
1c50: 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65 0a  y disabling the.
1c60: 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74 61 74  ** assert() stat
1c70: 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
1c80: 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e 74 20  de.  So we want 
1c90: 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69  the default acti
1ca0: 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f 72 20  on.** to be for 
1cb0: 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73 65 74  NDEBUG to be set
1cc0: 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f 20 62   and NDEBUG to b
1cd0: 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e 6c 79  e undefined only
1ce0: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
1cf0: 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54 68 75  .** is set.  Thu
1d00: 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d 65 73  s NDEBUG becomes
1d10: 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74 68 65   an opt-in rathe
1d20: 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d 6f 75  r than an opt-ou
1d30: 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a 2a 2f  t.** feature..*/
1d40: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
1d50: 45 42 55 47 29 20 26 26 20 21 64 65 66 69 6e 65  EBUG) && !define
1d60: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
1d70: 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55 47  .# define NDEBUG
1d80: 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   1.#endif.#if de
1d90: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
1da0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1db0: 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20 4e  DEBUG).# undef N
1dc0: 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f 2a  DEBUG.#endif../*
1dd0: 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65  .** The testcase
1de0: 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
1df0: 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72   to aid in cover
1e00: 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68  age testing.  Wh
1e10: 65 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76  en .** doing cov
1e20: 65 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74  erage testing, t
1e30: 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73  he condition ins
1e40: 69 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ide the argument
1e50: 20 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28   to.** testcase(
1e60: 29 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61  ) must be evalua
1e70: 74 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e  ted both true an
1e80: 64 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72  d false in order
1e90: 20 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20   to.** get full 
1ea0: 62 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e  branch coverage.
1eb0: 20 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29    The testcase()
1ec0: 20 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74   macro is insert
1ed0: 65 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e  ed.** to help en
1ee0: 73 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65  sure adequate te
1ef0: 73 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70  st coverage in p
1f00: 6c 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70  laces where simp
1f10: 6c 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f  le.** condition/
1f20: 64 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67  decision coverag
1f30: 65 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e  e is inadequate.
1f40: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74    For example, t
1f50: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e  estcase().** can
1f60: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   be used to make
1f70: 20 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76   sure boundary v
1f80: 61 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64  alues are tested
1f90: 2e 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73  .  For.** bitmas
1fa0: 6b 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73  k tests, testcas
1fb0: 65 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20  e() can be used 
1fc0: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63  to make sure eac
1fd0: 68 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e  h bit.** is sign
1fe0: 69 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64  ificant and used
1ff0: 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20   at least once. 
2000: 20 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65   On switch state
2010: 6d 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d  ments.** where m
2020: 75 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f  ultiple cases go
2030: 20 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f   to the same blo
2040: 63 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74  ck of code, test
2050: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e  case().** can in
2060: 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61  sure that all ca
2070: 73 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65  ses are evaluate
2080: 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20  d..**.*/.#ifdef 
2090: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
20a0: 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
20b0: 74 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29  te3Coverage(int)
20c0: 3b 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63  ;.# define testc
20d0: 61 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b  ase(X)  if( X ){
20e0: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
20f0: 28 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65  (__LINE__); }.#e
2100: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73  lse.# define tes
2110: 74 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a  tcase(X).#endif.
2120: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f  ./*.** The TESTO
2130: 4e 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65  NLY macro is use
2140: 64 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72  d to enclose var
2150: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
2160: 6e 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62  ns or.** other b
2170: 69 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74  its of code that
2180: 20 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73   are needed to s
2190: 75 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d  upport the argum
21a0: 65 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74  ents.** within t
21b0: 65 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73  estcase() and as
21c0: 73 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a  sert() macros..*
21d0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e  /.#if !defined(N
21e0: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
21f0: 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47  d(SQLITE_COVERAG
2200: 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65  E_TEST).# define
2210: 20 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a   TESTONLY(X)  X.
2220: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54  #else.# define T
2230: 45 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69  ESTONLY(X).#endi
2240: 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d  f../*.** Sometim
2250: 65 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61  es we need a sma
2260: 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64  ll amount of cod
2270: 65 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69  e such as a vari
2280: 61 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  able initializat
2290: 69 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20  ion.** to setup 
22a0: 66 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65  for a later asse
22b0: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20  rt() statement. 
22c0: 20 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20   We do not want 
22d0: 74 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20  this code to.** 
22e0: 61 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65  appear when asse
22f0: 72 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64  rt() is disabled
2300: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
2310: 20 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66   macro is theref
2320: 6f 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63  ore.** used to c
2330: 6f 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75  ontain that setu
2340: 70 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56  p code.  The "VV
2350: 41 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64  A" acronym stand
2360: 73 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69  s for.** "Verifi
2370: 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
2380: 6f 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74  on, and Accredit
2390: 61 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65  ation".  In othe
23a0: 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20  r words, the.** 
23b0: 63 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f  code within VVA_
23c0: 4f 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79  ONLY() will only
23d0: 20 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69   run during veri
23e0: 66 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73  fication process
23f0: 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e  es..*/.#ifndef N
2400: 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56  DEBUG.# define V
2410: 56 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65  VA_ONLY(X)  X.#e
2420: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41  lse.# define VVA
2430: 5f 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a  _ONLY(X).#endif.
2440: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59  ./*.** The ALWAY
2450: 53 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72  S and NEVER macr
2460: 6f 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c  os surround bool
2470: 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ean expressions 
2480: 77 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e  which .** are in
2490: 74 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73  tended to always
24a0: 20 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73   be true or fals
24b0: 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  e, respectively.
24c0: 20 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73    Such.** expres
24d0: 73 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f  sions could be o
24e0: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
24f0: 63 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e  code completely.
2500: 20 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72    But they.** ar
2510: 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20  e included in a 
2520: 66 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64  few cases in ord
2530: 65 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68  er to enhance th
2540: 65 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20  e resilience.** 
2550: 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65  of SQLite to une
2560: 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72  xpected behavior
2570: 20 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63   - to make the c
2580: 6f 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e  ode "self-healin
2590: 67 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c  g".** or "ductil
25a0: 65 22 20 72 61 74 68 65 72 20 74 68 61 6e 20 62  e" rather than b
25b0: 65 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61  eing "brittle" a
25c0: 6e 64 20 63 72 61 73 68 69 6e 67 20 61 74 20 74  nd crashing at t
25d0: 68 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74  he first.** hint
25e0: 20 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65   of unplanned be
25f0: 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e  havior..**.** In
2600: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c   other words, AL
2610: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61  WAYS and NEVER a
2620: 72 65 20 61 64 64 65 64 20 66 6f 72 20 64 65 66  re added for def
2630: 65 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a  ensive code..**.
2640: 2a 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f  ** When doing co
2650: 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 20 41  verage testing A
2660: 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20  LWAYS and NEVER 
2670: 61 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74  are hard-coded t
2680: 6f 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64  o.** be true and
2690: 20 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74   false so that t
26a0: 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  he unreachable c
26b0: 6f 64 65 20 74 68 65 79 20 73 70 65 63 69 66 79  ode they specify
26c0: 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20   will.** not be 
26d0: 63 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73  counted as untes
26e0: 74 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66  ted code..*/.#if
26f0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2700: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23  COVERAGE_TEST).#
2710: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
2720: 29 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66  )      (1).# def
2730: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
2740: 20 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65     (0).#elif !de
2750: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20  fined(NDEBUG).# 
2760: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
2770: 20 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73        ((X)?1:(as
2780: 73 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65  sert(0),0)).# de
2790: 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20  fine NEVER(X)   
27a0: 20 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74      ((X)?(assert
27b0: 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a  (0),1):0).#else.
27c0: 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28  # define ALWAYS(
27d0: 58 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65  X)      (X).# de
27e0: 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20  fine NEVER(X)   
27f0: 20 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a      (X).#endif..
2800: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
2810: 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20  e (non-zero) if 
2820: 74 68 65 20 69 6e 70 75 74 20 69 73 20 61 20 69  the input is a i
2830: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
2840: 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66  oo large.** to f
2850: 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20  it in 32-bits.  
2860: 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
2870: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72  ed inside of var
2880: 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a  ious testcase().
2890: 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72  ** macros to ver
28a0: 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65  ify that we have
28b0: 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66   tested SQLite f
28c0: 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75  or large-file su
28d0: 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  pport..*/.#defin
28e0: 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20  e IS_BIG_INT(X) 
28f0: 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66   (((X)&~(i64)0xf
2900: 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a  fffffff)!=0)../*
2910: 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e  .** The macro un
2920: 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69  likely() is a hi
2930: 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64  nt that surround
2940: 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65  s a boolean.** e
2950: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
2960: 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e  s usually false.
2970: 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29    Macro likely()
2980: 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20   surrounds.** a 
2990: 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
29a0: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
29b0: 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20  ly true.  These 
29c0: 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20  hints could,.** 
29d0: 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73  in theory, be us
29e0: 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c  ed by the compil
29f0: 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62  er to generate b
2a00: 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a  etter code, but.
2a10: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65  ** currently the
2a20: 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65  y are just comme
2a30: 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65  nts for human re
2a40: 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  aders..*/.#defin
2a50: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28  e likely(X)    (
2a60: 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b  X).#define unlik
2a70: 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e  ely(X)  (X)..#in
2a80: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68  clude "sqlite3.h
2a90: 22 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73 68  ".#include "hash
2aa0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61  .h".#include "pa
2ab0: 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  rse.h".#include 
2ac0: 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75  <stdio.h>.#inclu
2ad0: 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69  de <stdlib.h>.#i
2ae0: 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68  nclude <string.h
2af0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65  >.#include <asse
2b00: 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  rt.h>.#include <
2b10: 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a  stddef.h>../*.**
2b20: 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f   If compiling fo
2b30: 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68  r a processor th
2b40: 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e  at lacks floatin
2b50: 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c  g point support,
2b60: 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69  .** substitute i
2b70: 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74  nteger for float
2b80: 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66  ing-point.*/.#if
2b90: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ba0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23  FLOATING_POINT.#
2bb0: 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73   define double s
2bc0: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
2bd0: 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74  fine float sqlit
2be0: 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65  e_int64.# define
2bf0: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
2c00: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
2c10: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ifndef SQLITE_BI
2c20: 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65  G_DBL.#   define
2c30: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
2c40: 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  (((sqlite3_int64
2c50: 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66  )1)<<50).# endif
2c60: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2c70: 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46  _OMIT_DATETIME_F
2c80: 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20  UNCS 1.# define 
2c90: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
2ca0: 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  E 1.# undef SQLI
2cb0: 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f  TE_MIXED_ENDIAN_
2cc0: 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e  64BIT_FLOAT.# un
2cd0: 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f  def SQLITE_HAVE_
2ce0: 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66  ISNAN.#endif.#if
2cf0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f  ndef SQLITE_BIG_
2d00: 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  DBL.# define SQL
2d10: 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39  ITE_BIG_DBL (1e9
2d20: 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  9).#endif../*.**
2d30: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20   OMIT_TEMPDB is 
2d40: 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49  set to 1 if SQLI
2d50: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69  TE_OMIT_TEMPDB i
2d60: 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a  s defined, or 0.
2d70: 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61  ** afterward. Ha
2d80: 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20  ving this macro 
2d90: 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75  allows us to cau
2da0: 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65  se the C compile
2db0: 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f  r .** to omit co
2dc0: 64 65 20 75 73 65 64 20 62 79 20 54 45 4d 50 20  de used by TEMP 
2dd0: 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d  tables without m
2de0: 65 73 73 79 20 23 69 66 6e 64 65 66 20 73 74 61  essy #ifndef sta
2df0: 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64  tements..*/.#ifd
2e00: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
2e10: 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d  EMPDB.#define OM
2e20: 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73  IT_TEMPDB 1.#els
2e30: 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  e.#define OMIT_T
2e40: 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a  EMPDB 0.#endif..
2e50: 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20  /*.** The "file 
2e60: 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69  format" number i
2e70: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
2e80: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
2e90: 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65   whenever.** the
2ea0: 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65   VDBE-level file
2eb0: 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e   format changes.
2ec0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2ed0: 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68  macros define th
2ee0: 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74  e.** the default
2ef0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72   file format for
2f00: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 61   new databases a
2f10: 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66  nd the maximum f
2f20: 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68  ile format.** th
2f30: 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  at the library c
2f40: 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66  an read..*/.#def
2f50: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46  ine SQLITE_MAX_F
2f60: 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66  ILE_FORMAT 4.#if
2f70: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
2f80: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a  ULT_FILE_FORMAT.
2f90: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2fa0: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
2fb0: 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  MAT 4.#endif../*
2fc0: 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68  .** Determine wh
2fd0: 65 74 68 65 72 20 74 72 69 67 67 65 72 73 20 61  ether triggers a
2fe0: 72 65 20 72 65 63 75 72 73 69 76 65 20 62 79 20  re recursive by 
2ff0: 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63  default.  This c
3000: 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64  an be.** changed
3010: 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69   at run-time usi
3020: 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  ng a pragma..*/.
3030: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
3040: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
3050: 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65 66 69  _TRIGGERS.# defi
3060: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
3070: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
3080: 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  GERS 0.#endif../
3090: 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64  *.** Provide a d
30a0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
30b0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
30c0: 52 45 20 69 6e 20 63 61 73 65 20 69 74 20 69 73  RE in case it is
30d0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a   not specified.*
30e0: 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  * on the command
30f0: 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  -line.*/.#ifndef
3100: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
3110: 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RE.# define SQLI
3120: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a  TE_TEMP_STORE 1.
3130: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3140: 54 45 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20  TEMP_STORE_xc 1 
3150: 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d   /* Exclude from
3160: 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64   ctime.c */.#end
3170: 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f  if../*.** GCC do
3180: 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68  es not define th
3190: 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63  e offsetof() mac
31a0: 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65  ro so we'll have
31b0: 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72   to do it.** our
31c0: 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64  selves..*/.#ifnd
31d0: 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66  ef offsetof.#def
31e0: 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52  ine offsetof(STR
31f0: 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28  UCTURE,FIELD) ((
3200: 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53  int)((char*)&((S
3210: 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49  TRUCTURE*)0)->FI
3220: 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ELD)).#endif../*
3230: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f  .** Macros to co
3240: 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e  mpute minimum an
3250: 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f  d maximum of two
3260: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65   numbers..*/.#de
3270: 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28  fine MIN(A,B) ((
3280: 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)<(B)?(A):(B)).
3290: 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29  #define MAX(A,B)
32a0: 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42   ((A)>(B)?(A):(B
32b0: 29 29 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  ))../*.** Check 
32c0: 74 6f 20 73 65 65 20 69 66 20 74 68 69 73 20 6d  to see if this m
32d0: 61 63 68 69 6e 65 20 75 73 65 73 20 45 42 43 44  achine uses EBCD
32e0: 49 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65  IC.  (Yes, belie
32f0: 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c  ve it or.** not,
3300: 20 74 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c   there are still
3310: 20 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68   machines out th
3320: 65 72 65 20 74 68 61 74 20 75 73 65 20 45 42 43  ere that use EBC
3330: 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27  DIC.).*/.#if 'A'
3340: 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66   == '\301'.# def
3350: 69 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49  ine SQLITE_EBCDI
3360: 43 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  C 1.#else.# defi
3370: 6e 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20  ne SQLITE_ASCII 
3380: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
3390: 49 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77  Integers of know
33a0: 6e 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20  n sizes.  These 
33b0: 74 79 70 65 64 65 66 73 20 6d 69 67 68 74 20 63  typedefs might c
33c0: 68 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74  hange for archit
33d0: 65 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65  ectures.** where
33e0: 20 74 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e   the sizes very.
33f0: 20 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d    Preprocessor m
3400: 61 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61  acros are availa
3410: 62 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a  ble so that the.
3420: 2a 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65 20  ** types can be 
3430: 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64  conveniently red
3440: 65 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c  efined at compil
3450: 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68  e-type.  Like th
3460: 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20  is:.**.**       
3470: 20 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f    cc '-DUINTPTR_
3480: 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69  TYPE=long long i
3490: 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64  nt' ....*/.#ifnd
34a0: 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23  ef UINT32_TYPE.#
34b0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
34c0: 33 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  32_T.#  define U
34d0: 49 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33  INT32_TYPE uint3
34e0: 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  2_t.# else.#  de
34f0: 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45  fine UINT32_TYPE
3500: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20   unsigned int.# 
3510: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3520: 6e 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  ndef UINT16_TYPE
3530: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
3540: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
3550: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e   UINT16_TYPE uin
3560: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
3570: 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59  define UINT16_TY
3580: 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72  PE unsigned shor
3590: 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  t int.# endif.#e
35a0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
35b0: 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  16_TYPE.# ifdef 
35c0: 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20  HAVE_INT16_T.#  
35d0: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
35e0: 45 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65  E int16_t.# else
35f0: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
3600: 5f 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a  _TYPE short int.
3610: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
3620: 69 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50  ifndef UINT8_TYP
3630: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
3640: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
3650: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74   UINT8_TYPE uint
3660: 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  8_t.# else.#  de
3670: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
3680: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20  unsigned char.# 
3690: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
36a0: 6e 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23  ndef INT8_TYPE.#
36b0: 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38   ifdef HAVE_INT8
36c0: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  _T.#  define INT
36d0: 38 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20  8_TYPE int8_t.# 
36e0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
36f0: 4e 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20  NT8_TYPE signed 
3700: 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e  char.# endif.#en
3710: 64 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47  dif.#ifndef LONG
3720: 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65  DOUBLE_TYPE.# de
3730: 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  fine LONGDOUBLE_
3740: 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65  TYPE long double
3750: 0a 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20  .#endif.typedef 
3760: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34  sqlite_int64 i64
3770: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d  ;          /* 8-
3780: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
3790: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73  ger */.typedef s
37a0: 71 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34  qlite_uint64 u64
37b0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62  ;         /* 8-b
37c0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
37d0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
37e0: 55 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b  UINT32_TYPE u32;
37f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d             /* 4-
3800: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
3810: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
3820: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36   UINT16_TYPE u16
3830: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32  ;           /* 2
3840: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
3850: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
3860: 66 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36  f INT16_TYPE i16
3870: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
3880: 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  2-byte signed in
3890: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
38a0: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20   UINT8_TYPE u8; 
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
38c0: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
38d0: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
38e0: 66 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20  f INT8_TYPE i8; 
38f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3900: 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  1-byte signed in
3910: 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  teger */../*.** 
3920: 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69  SQLITE_MAX_U32 i
3930: 73 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74  s a u64 constant
3940: 20 74 68 61 74 20 69 73 20 74 68 65 20 6d 61 78   that is the max
3950: 69 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a  imum u64 value.*
3960: 2a 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 74  * that can be st
3970: 6f 72 65 64 20 69 6e 20 61 20 75 33 32 20 77 69  ored in a u32 wi
3980: 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61  thout loss of da
3990: 74 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  ta.  The value.*
39a0: 2a 20 69 73 20 30 78 30 30 30 30 30 30 30 30 66  * is 0x00000000f
39b0: 66 66 66 66 66 66 66 2e 20 20 42 75 74 20 62 65  fffffff.  But be
39c0: 63 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20  cause of quirks 
39d0: 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  of some compiler
39e0: 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f  s, we.** have to
39f0: 20 73 70 65 63 69 66 79 20 74 68 65 20 76 61 6c   specify the val
3a00: 75 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69  ue in the less i
3a10: 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20  ntuitive manner 
3a20: 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e  shown:.*/.#defin
3a30: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32  e SQLITE_MAX_U32
3a40: 20 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32    ((((u64)1)<<32
3a50: 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  )-1)../*.** The 
3a60: 64 61 74 61 74 79 70 65 20 75 73 65 64 20 74 6f  datatype used to
3a70: 20 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73   store estimates
3a80: 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   of the number o
3a90: 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74  f rows in a.** t
3aa0: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
3ab0: 54 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67  This is an unsig
3ac0: 6e 65 64 20 69 6e 74 65 67 65 72 20 74 79 70 65  ned integer type
3ad0: 2e 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a  .  For 99.9% of.
3ae0: 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20  ** the world, a 
3af0: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69  32-bit integer i
3b00: 73 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42  s sufficient.  B
3b10: 75 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ut a 64-bit inte
3b20: 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  ger.** can be us
3b30: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
3b40: 6d 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a  me if desired..*
3b50: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
3b60: 36 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70  64BIT_STATS. typ
3b70: 65 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74  edef u64 tRowcnt
3b80: 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f  ;    /* 64-bit o
3b90: 6e 6c 79 20 69 66 20 72 65 71 75 65 73 74 65 64  nly if requested
3ba0: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
3bb0: 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64   */.#else. typed
3bc0: 65 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20  ef u32 tRowcnt; 
3bd0: 20 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20     /* 32-bit is 
3be0: 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  the default */.#
3bf0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
3c00: 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
3c10: 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63   whether the mac
3c20: 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c  hine is big or l
3c30: 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a  ittle endian,.**
3c40: 20 65 76 61 6c 75 61 74 65 64 20 61 74 20 72 75   evaluated at ru
3c50: 6e 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ntime..*/.#ifdef
3c60: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
3c70: 54 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73  TION.const int s
3c80: 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23  qlite3one = 1;.#
3c90: 65 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73  else.extern cons
3ca0: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
3cb0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
3cc0: 69 6e 65 64 28 69 33 38 36 29 20 7c 7c 20 64 65  ined(i386) || de
3cd0: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
3ce0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58  || defined(_M_IX
3cf0: 38 36 29 5c 0a 20 20 20 20 20 20 20 20 20 20 20  86)\.           
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d10: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78    || defined(__x
3d20: 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65  86_64) || define
3d30: 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 0a 23 20  d(__x86_64__).# 
3d40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3d50: 47 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64  GENDIAN    0.# d
3d60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
3d70: 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65  TLEENDIAN 1.# de
3d80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
3d90: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
3da0: 55 54 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20  UTF16LE.#else.# 
3db0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3dc0: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
3dd0: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
3de0: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
3df0: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
3e00: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
3e10: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
3e20: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3e30: 55 54 46 31 36 4e 41 54 49 56 45 20 28 53 51 4c  UTF16NATIVE (SQL
3e40: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51  ITE_BIGENDIAN?SQ
3e50: 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c  LITE_UTF16BE:SQL
3e60: 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e  ITE_UTF16LE).#en
3e70: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74  dif../*.** Const
3e80: 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72  ants for the lar
3e90: 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73  gest and smalles
3ea0: 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69  t possible 64-bi
3eb0: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
3ec0: 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  s..** These macr
3ed0: 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20  os are designed 
3ee0: 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c  to work correctl
3ef0: 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74  y on both 32-bit
3f00: 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63   and 64-bit.** c
3f10: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65  ompilers..*/.#de
3f20: 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54  fine LARGEST_INT
3f30: 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c  64  (0xffffffff|
3f40: 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66  (((i64)0x7ffffff
3f50: 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65  f)<<32)).#define
3f60: 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20   SMALLEST_INT64 
3f70: 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52  (((i64)-1) - LAR
3f80: 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20  GEST_INT64)../* 
3f90: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
3fa0: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
3fb0: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
3fc0: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
3fd0: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
3fe0: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
3ff0: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
4000: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
4010: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
4020: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
4030: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
4040: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
4050: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
4060: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
4070: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
4080: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
4090: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
40a0: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
40b0: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
40c0: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
40d0: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
40e0: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
40f0: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
4100: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
4110: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
4120: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
4130: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
4140: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
4150: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
4160: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
4170: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
4180: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
4190: 69 6d 70 6c 65 6d 65 6e 74 69 6f 6e 20 6d 69 67  implemention mig
41a0: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
41b0: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
41c0: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
41d0: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
41e0: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
41f0: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
4200: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
4210: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
4220: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
4230: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
4240: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
4250: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
4260: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
4270: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
4280: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
4290: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
42a0: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
42b0: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
42c0: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
42d0: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
42e0: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
42f0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4300: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
4310: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
4320: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
4330: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4340: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4350: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
4360: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
4370: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
4380: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
4390: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
43a0: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
43b0: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
43c0: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
43d0: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
43e0: 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52  nals.h>.# if TAR
43f0: 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20  GET_OS_IPHONE.# 
4400: 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d    undef SQLITE_M
4410: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20  AX_MMAP_SIZE.#  
4420: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4430: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
4440: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
4450: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  fndef SQLITE_MAX
4460: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20  _MMAP_SIZE.# if 
4470: 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f  defined(__linux_
4480: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
4490: 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c  d(_WIN32) \.  ||
44a0: 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c   (defined(__APPL
44b0: 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28  E__) && defined(
44c0: 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c  __MACH__)) \.  |
44d0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29  | defined(__sun)
44e0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
44f0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4500: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
4510: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
4520: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
4530: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
4540: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
4550: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4560: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  AX_MMAP_SIZE_xc 
4570: 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f  1 /* exclude fro
4580: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
4590: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
45a0: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
45b0: 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20   is zero on all 
45c0: 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20  platforms.  Or, 
45d0: 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72  even if a larger
45e0: 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  .** default MMAP
45f0: 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69  _SIZE is specifi
4600: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
4610: 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68  me, make sure th
4620: 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f  at it does.** no
4630: 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78  t exceed the max
4640: 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a  imum mmap size..
4650: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4660: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
4670: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
4680: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
4690: 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65  _SIZE 0.# define
46a0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
46b0: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20  MMAP_SIZE_xc 1  
46c0: 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* Exclude from 
46d0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
46e0: 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46  f.#if SQLITE_DEF
46f0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53  AULT_MMAP_SIZE>S
4700: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4710: 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  IZE.# undef SQLI
4720: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
4730: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
4740: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
4750: 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41  P_SIZE SQLITE_MA
4760: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64  X_MMAP_SIZE.#end
4770: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f  if../*.** Only o
4780: 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41  ne of SQLITE_ENA
4790: 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c  BLE_STAT3 or SQL
47a0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
47b0: 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e   can be defined.
47c0: 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20  .** Priority is 
47d0: 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f  given to SQLITE_
47e0: 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49  ENABLE_STAT4.  I
47f0: 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65 66  f either are def
4800: 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65  ined, also.** de
4810: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
4820: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
4830: 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  4.*/.#ifdef SQLI
4840: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
4850: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
4860: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
4870: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
4880: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
4890: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
48a0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
48b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
48c0: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
48d0: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
48e0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
48f0: 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66  OR_STAT4.# undef
4900: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
4910: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65  TAT3_OR_STAT4.#e
4920: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
4930: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
4940: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
4950: 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  re is used to st
4960: 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e  ore the busy-han
4970: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
4980: 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c   for a given sql
4990: 69 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a  ite handle. .**.
49a0: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75  ** The sqlite.bu
49b0: 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72  syHandler member
49c0: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73   of the sqlite s
49d0: 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74  truct contains t
49e0: 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62  he busy.** callb
49f0: 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61  ack for the data
4a00: 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63  base handle. Eac
4a10: 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76  h pager opened v
4a20: 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a  ia the sqlite.**
4a30: 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65   handle is passe
4a40: 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73  d a pointer to s
4a50: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
4a60: 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64  r. The busy-hand
4a70: 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  ler.** callback 
4a80: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76  is currently inv
4a90: 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77  oked only from w
4aa0: 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a  ithin pager.c..*
4ab0: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
4ac0: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73   BusyHandler Bus
4ad0: 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74  yHandler;.struct
4ae0: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20   BusyHandler {. 
4af0: 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f   int (*xFunc)(vo
4b00: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
4b10: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
4b20: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67   */.  void *pArg
4b30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4b40: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f   /* First arg to
4b50: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   busy callback *
4b60: 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20  /.  int nBusy;  
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4b80: 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69  * Incremented wi
4b90: 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c  th each busy cal
4ba0: 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e  l */.};../*.** N
4bb0: 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65  ame of the maste
4bc0: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
4bd0: 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61  .  The master da
4be0: 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20  tabase table.** 
4bf0: 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62  is a special tab
4c00: 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  le that holds th
4c10: 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72  e names and attr
4c20: 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a  ibutes of all.**
4c30: 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64   user tables and
4c40: 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65   indices..*/.#de
4c50: 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45  fine MASTER_NAME
4c60: 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d         "sqlite_m
4c70: 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54  aster".#define T
4c80: 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20  EMP_MASTER_NAME 
4c90: 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61   "sqlite_temp_ma
4ca0: 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ster"../*.** The
4cb0: 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
4cc0: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
4cd0: 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  e table..*/.#def
4ce0: 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20  ine MASTER_ROOT 
4cf0: 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54        1../*.** T
4d00: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73  he name of the s
4d10: 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a  chema table..*/.
4d20: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54  #define SCHEMA_T
4d30: 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54  ABLE(x)  ((!OMIT
4d40: 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29  _TEMPDB)&&(x==1)
4d50: 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d  ?TEMP_MASTER_NAM
4d60: 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a  E:MASTER_NAME)..
4d70: 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65  /*.** A convenie
4d80: 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72  nce macro that r
4d90: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
4da0: 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
4db0: 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f  .** an array..*/
4dc0: 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69  .#define ArraySi
4dd0: 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28  ze(X)    ((int)(
4de0: 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66  sizeof(X)/sizeof
4df0: 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20  (X[0])))../*.** 
4e00: 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65  Determine if the
4e10: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70   argument is a p
4e20: 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23  ower of two.*/.#
4e30: 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66  define IsPowerOf
4e40: 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58  Two(X) (((X)&((X
4e50: 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  )-1))==0)../*.**
4e60: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
4e70: 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75  alue as a destru
4e80: 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73  ctor means to us
4e90: 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  e sqlite3DbFree(
4ea0: 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  )..** The sqlite
4eb0: 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e  3DbFree() routin
4ec0: 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70  e requires two p
4ed0: 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61  arameters instea
4ee0: 64 20 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65  d of the .** one
4ef0: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
4f00: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
4f10: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
4f20: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
4f30: 75 63 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67  uce .** this mag
4f40: 69 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68  ic value that th
4f50: 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20  e code knows to 
4f60: 68 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74  handle different
4f70: 6c 79 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69  ly.  Any .** poi
4f80: 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68  nter will work h
4f90: 65 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69  ere as long as i
4fa0: 74 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72  t is distinct fr
4fb0: 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  om SQLITE_STATIC
4fc0: 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54  .** and SQLITE_T
4fd0: 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65  RANSIENT..*/.#de
4fe0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41  fine SQLITE_DYNA
4ff0: 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f  MIC   ((sqlite3_
5000: 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29  destructor_type)
5010: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a  sqlite3MallocSiz
5020: 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53  e)../*.** When S
5030: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69  QLITE_OMIT_WSD i
5040: 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65  s defined, it me
5050: 61 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72  ans that the tar
5060: 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65  get platform doe
5070: 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74  s.** not support
5080: 20 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63   Writable Static
5090: 20 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68   Data (WSD) such
50a0: 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73   as global and s
50b0: 74 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e  tatic variables.
50c0: 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65  .** All variable
50d0: 73 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65  s must either be
50e0: 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72   on the stack or
50f0: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
5100: 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74  ocated from.** t
5110: 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57  he heap.  When W
5120: 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65  SD is unsupporte
5130: 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  d, the variable 
5140: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61  declarations sca
5150: 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67  ttered.** throug
5160: 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20  hout the SQLite 
5170: 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65  code must become
5180: 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65   constants inste
5190: 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f  ad.  The SQLITE_
51a0: 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20  WSD.** macro is 
51b0: 75 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75  used for this pu
51c0: 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74  rpose.  And inst
51d0: 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69  ead of referenci
51e0: 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a  ng the variable.
51f0: 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20  ** directly, we 
5200: 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74  use its constant
5210: 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f   as a key to loo
5220: 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65  kup the run-time
5230: 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75   allocated.** bu
5240: 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  ffer that holds 
5250: 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20  real variable.  
5260: 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20  The constant is 
5270: 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c  also the initial
5280: 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20  izer.** for the 
5290: 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74  run-time allocat
52a0: 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a  ed buffer..**.**
52b0: 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61   In the usual ca
52c0: 73 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20  se where WSD is 
52d0: 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53  supported, the S
52e0: 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c  QLITE_WSD and GL
52f0: 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62  OBAL.** macros b
5300: 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64  ecome no-ops and
5310: 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f   have zero perfo
5320: 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a  rmance impact..*
5330: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
5340: 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69  OMIT_WSD.  #defi
5350: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f  ne SQLITE_WSD co
5360: 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c  nst.  #define GL
5370: 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29  OBAL(t,v) (*(t*)
5380: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
5390: 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69  ((void*)&(v), si
53a0: 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66  zeof(v))).  #def
53b0: 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ine sqlite3Globa
53c0: 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73  lConfig GLOBAL(s
53d0: 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
53e0: 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66  fig, sqlite3Conf
53f0: 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  ig).  int sqlite
5400: 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e  3_wsd_init(int N
5410: 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64  , int J);.  void
5420: 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69   *sqlite3_wsd_fi
5430: 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20  nd(void *K, int 
5440: 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  L);.#else.  #def
5450: 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a  ine SQLITE_WSD .
5460: 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c    #define GLOBAL
5470: 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e  (t,v) v.  #defin
5480: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
5490: 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
54a0: 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  fig.#endif../*.*
54b0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
54c0: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
54d0: 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70  to suppress comp
54e0: 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e  iler warnings an
54f0: 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20  d to.** make it 
5500: 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72  clear to human r
5510: 65 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75  eaders when a fu
5520: 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72  nction parameter
5530: 20 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79   is deliberately
5540: 20 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64   .** left unused
5550: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
5560: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20   of a function. 
5570: 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70  This usually hap
5580: 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66  pens when.** a f
5590: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
55a0: 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e  d via a function
55b0: 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78   pointer. For ex
55c0: 61 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d  ample the .** im
55d0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
55e0: 61 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65  an SQL aggregate
55f0: 20 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d   step callback m
5600: 61 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a  ay not use the.*
5610: 2a 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69  * parameter indi
5620: 63 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65  cating the numbe
5630: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70  r of arguments p
5640: 61 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67  assed to the agg
5650: 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74  regate,.** if it
5660: 20 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73   knows that this
5670: 20 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73   is enforced els
5680: 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  ewhere..**.** Wh
5690: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
56a0: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75  rameter is not u
56b0: 73 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69  sed at all withi
56c0: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
56d0: 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20  function,.** it 
56e0: 69 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d  is generally nam
56f0: 65 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20  ed "NotUsed" or 
5700: 22 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61  "NotUsed2" to ma
5710: 6b 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63  ke things even c
5720: 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76  learer..** Howev
5730: 65 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73  er, these macros
5740: 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65   may also be use
5750: 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61  d to suppress wa
5760: 72 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74  rnings related t
5770: 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20  o.** parameters 
5780: 74 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20  that may or may 
5790: 6e 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65  not be used depe
57a0: 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61  nding on compila
57b0: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a  tion options..**
57c0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f   For example tho
57d0: 73 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e  se parameters on
57e0: 6c 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72  ly used in asser
57f0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  t() statements. 
5800: 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65  In these.** case
5810: 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  s the parameters
5820: 20 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65   are named as pe
5830: 72 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76  r the usual conv
5840: 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  entions..*/.#def
5850: 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ine UNUSED_PARAM
5860: 45 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78  ETER(x) (void)(x
5870: 29 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  ).#define UNUSED
5880: 5f 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29  _PARAMETER2(x,y)
5890: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
58a0: 52 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41  R(x),UNUSED_PARA
58b0: 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20  METER(y)../*.** 
58c0: 46 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63  Forward referenc
58d0: 65 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73  es to structures
58e0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
58f0: 63 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e  ct AggInfo AggIn
5900: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
5910: 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41  ct AuthContext A
5920: 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  uthContext;.type
5930: 64 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69  def struct Autoi
5940: 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e  ncInfo AutoincIn
5950: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
5960: 63 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63  ct Bitvec Bitvec
5970: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5980: 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71   CollSeq CollSeq
5990: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
59a0: 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a   Column Column;.
59b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
59c0: 62 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74  b Db;.typedef st
59d0: 72 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65  ruct Schema Sche
59e0: 6d 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ma;.typedef stru
59f0: 63 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79  ct Expr Expr;.ty
5a00: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
5a10: 72 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a  rList ExprList;.
5a20: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
5a30: 78 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e  xprSpan ExprSpan
5a40: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5a50: 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65   FKey FKey;.type
5a60: 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44  def struct FuncD
5a70: 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65  estructor FuncDe
5a80: 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65  structor;.typede
5a90: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
5aa0: 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65   FuncDef;.typede
5ab0: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
5ac0: 48 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68  Hash FuncDefHash
5ad0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5ae0: 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a   IdList IdList;.
5af0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
5b00: 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65  ndex Index;.type
5b10: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
5b20: 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70  Sample IndexSamp
5b30: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
5b40: 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43  ct KeyClass KeyC
5b50: 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74  lass;.typedef st
5b60: 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79  ruct KeyInfo Key
5b70: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
5b80: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c  ruct Lookaside L
5b90: 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65  ookaside;.typede
5ba0: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
5bb0: 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65  deSlot Lookaside
5bc0: 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74  Slot;.typedef st
5bd0: 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75  ruct Module Modu
5be0: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
5bf0: 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e  ct NameContext N
5c00: 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  ameContext;.type
5c10: 64 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65  def struct Parse
5c20: 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20   Parse;.typedef 
5c30: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
5c40: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
5c50: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
5c60: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
5c70: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
5c80: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
5c90: 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
5ca0: 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79  t SelectDest;.ty
5cb0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63  pedef struct Src
5cc0: 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79  List SrcList;.ty
5cd0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72  pedef struct Str
5ce0: 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a  Accum StrAccum;.
5cf0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
5d00: 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65  able Table;.type
5d10: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
5d20: 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a  Lock TableLock;.
5d30: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
5d40: 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65  oken Token;.type
5d50: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
5d60: 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70 65  er Trigger;.type
5d70: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
5d80: 65 72 50 72 67 20 54 72 69 67 67 65 72 50 72 67  erPrg TriggerPrg
5d90: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5da0: 20 54 72 69 67 67 65 72 53 74 65 70 20 54 72 69   TriggerStep Tri
5db0: 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64 65  ggerStep;.typede
5dc0: 66 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  f struct Unpacke
5dd0: 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65 64  dRecord Unpacked
5de0: 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66 20  Record;.typedef 
5df0: 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 56 54  struct VTable VT
5e00: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
5e10: 72 75 63 74 20 56 74 61 62 43 74 78 20 56 74 61  ruct VtabCtx Vta
5e20: 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74  bCtx;.typedef st
5e30: 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b  ruct Walker Walk
5e40: 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  er;.typedef stru
5e50: 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65  ct WhereInfo Whe
5e60: 72 65 49 6e 66 6f 3b 0a 0a 2f 2a 0a 2a 2a 20 44  reInfo;../*.** D
5e70: 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64  efer sourcing vd
5e80: 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68  be.h and btree.h
5e90: 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65   until after the
5ea0: 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42   "u8" and .** "B
5eb0: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
5ec0: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
5ed0: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
5ee0: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
5ef0: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
5f00: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
5f10: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
5f20: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
5f30: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
5f40: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
5f50: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
5f60: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69  e "pcache.h"..#i
5f70: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
5f80: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
5f90: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
5fa0: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
5fb0: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
5fc0: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
5fd0: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
5fe0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
5ff0: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
6000: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
6010: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
6020: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
6030: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
6040: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
6050: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
6060: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
6070: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
6080: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
6090: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
60a0: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
60b0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
60c0: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
60d0: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
60e0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
60f0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
6100: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
6110: 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
6120: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42          /* The B
6130: 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  *Tree structure 
6140: 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73  for this databas
6150: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73  e file */.  u8 s
6160: 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20  afety_level;    
6170: 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69   /* How aggressi
6180: 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61  ve at syncing da
6190: 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20  ta to disk */.  
61a0: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
61b0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
61c0: 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65  to database sche
61d0: 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61  ma (possibly sha
61e0: 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  red) */.};../*.*
61f0: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
6200: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
6210: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
6220: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
6230: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
6240: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
6250: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
6260: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
6270: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
6280: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
6290: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
62a0: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
62b0: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
62c0: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
62d0: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
62e0: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
62f0: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
6300: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
6310: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
6320: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
6330: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
6340: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
6350: 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62  ** .** Schema ob
6360: 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61  jects are automa
6370: 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61  tically dealloca
6380: 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73  ted when the las
6390: 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20  t Btree that.** 
63a0: 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20  references them 
63b0: 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20  is destroyed.   
63c0: 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20  The TEMP Schema 
63d0: 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65  is manually free
63e0: 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  d by.** sqlite3_
63f0: 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20  close()..*.** A 
6400: 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68  thread must be h
6410: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
6420: 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  n the correspond
6430: 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64  ing Btree in ord
6440: 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20  er.** to access 
6450: 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20  Schema content. 
6460: 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68   This implies th
6470: 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75  at the thread mu
6480: 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f  st also be.** ho
6490: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
64a0: 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e   the sqlite3 con
64b0: 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  nection pointer 
64c0: 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74  that owns the Bt
64d0: 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45  ree..** For a TE
64e0: 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20  MP Schema, only 
64f0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d  the connection m
6500: 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64  utex is required
6510: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65  ..*/.struct Sche
6520: 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d  ma {.  int schem
6530: 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44  a_cookie;   /* D
6540: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76  atabase schema v
6550: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
6560: 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20  r this file */. 
6570: 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e   int iGeneration
6580: 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74  ;     /* Generat
6590: 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e  ion counter.  In
65a0: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
65b0: 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20  ach change */.  
65c0: 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20  Hash tblHash;   
65d0: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c       /* All tabl
65e0: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
65f0: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78  me */.  Hash idx
6600: 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  Hash;        /* 
6610: 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69  All (named) indi
6620: 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ces indexed by n
6630: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72  ame */.  Hash tr
6640: 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  igHash;       /*
6650: 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e   All triggers in
6660: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
6670: 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68  .  Hash fkeyHash
6680: 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66  ;       /* All f
6690: 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72  oreign keys by r
66a0: 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20  eferenced table 
66b0: 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  name */.  Table 
66c0: 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f  *pSeqTab;      /
66d0: 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71  * The sqlite_seq
66e0: 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64  uence table used
66f0: 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   by AUTOINCREMEN
6700: 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66  T */.  u8 file_f
6710: 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53  ormat;      /* S
6720: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72  chema format ver
6730: 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69  sion for this fi
6740: 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  le */.  u8 enc; 
6750: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6760: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73  Text encoding us
6770: 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62  ed by this datab
6780: 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ase */.  u16 fla
6790: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gs;           /*
67a0: 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   Flags associate
67b0: 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65  d with this sche
67c0: 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68  ma */.  int cach
67d0: 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20  e_size;      /* 
67e0: 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
67f0: 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61  to use in the ca
6800: 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  che */.};../*.**
6810: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
6820: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
6830: 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
6840: 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a   bits in the .**
6850: 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   Db.pSchema->fla
6860: 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
6870: 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72  fine DbHasProper
6880: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28  ty(D,I,P)     ((
6890: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
68a0: 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  ema->flags&(P))=
68b0: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
68c0: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
68d0: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
68e0: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  b[I].pSchema->fl
68f0: 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
6900: 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72  fine DbSetProper
6910: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44  ty(D,I,P)     (D
6920: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
6930: 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  a->flags|=(P).#d
6940: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
6950: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
6960: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
6970: 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  ma->flags&=~(P).
6980: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
6990: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42  alues for the DB
69a0: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
69b0: 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  field..**.** The
69c0: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
69d0: 20 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74   flag is set aft
69e0: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
69f0: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a  schema has been.
6a00: 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74  ** read into int
6a10: 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65  ernal hash table
6a20: 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65  s..**.** DB_Unre
6a30: 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74  setViews means t
6a40: 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  hat one or more 
6a50: 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d  views have colum
6a60: 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20  n names that.** 
6a70: 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64  have been filled
6a80: 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63   out.  If the sc
6a90: 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68  hema changes, th
6aa0: 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ese column names
6ab0: 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65   might.** change
6ac0: 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65  s and so the vie
6ad0: 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62  w will need to b
6ae0: 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  e reset..*/.#def
6af0: 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  ine DB_SchemaLoa
6b00: 64 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f  ded    0x0001  /
6b10: 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73  * The schema has
6b20: 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a   been loaded */.
6b30: 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73  #define DB_Unres
6b40: 65 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30  etViews    0x000
6b50: 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73  2  /* Some views
6b60: 20 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f   have defined co
6b70: 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  lumn names */.#d
6b80: 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20  efine DB_Empty  
6b90: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20           0x0004 
6ba0: 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20   /* The file is 
6bb0: 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20  empty (length 0 
6bc0: 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  bytes) */../*.**
6bd0: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
6be0: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
6bf0: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
6c00: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
6c10: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
6c20: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
6c30: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
6c40: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
6c50: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49  SQLITE_LIMIT_TRI
6c60: 47 47 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f  GGER_DEPTH+1)../
6c70: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d  *.** Lookaside m
6c80: 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f  alloc is a set o
6c90: 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66  f fixed-size buf
6ca0: 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65  fers that can be
6cb0: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69   used.** to sati
6cc0: 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69  sfy small transi
6cd0: 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ent memory alloc
6ce0: 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66  ation requests f
6cf0: 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73  or objects.** as
6d00: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
6d10: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
6d20: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
6d30: 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c   The use of.** l
6d40: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
6d50: 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69  provides a signi
6d60: 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e  ficant performan
6d70: 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a  ce enhancement.*
6d80: 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62  * (approx 10%) b
6d90: 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72  y avoiding numer
6da0: 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20  ous malloc/free 
6db0: 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70  requests while p
6dc0: 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74  arsing.** SQL st
6dd0: 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
6de0: 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74  The Lookaside st
6df0: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f  ructure holds co
6e00: 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f  nfiguration info
6e10: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
6e20: 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  e.** lookaside m
6e30: 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e  alloc subsystem.
6e40: 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65    Each available
6e50: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
6e60: 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f  on in.** the loo
6e70: 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d  kaside subsystem
6e80: 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20   is stored on a 
6e90: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c  linked list of L
6ea0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20  ookasideSlot.** 
6eb0: 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c  objects..**.** L
6ec0: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
6ed0: 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c  ions are only al
6ee0: 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74  lowed for object
6ef0: 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63  s that are assoc
6f00: 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20  iated.** with a 
6f10: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
6f20: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
6f30: 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69   Hence, schema i
6f40: 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f  nformation canno
6f50: 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69  t.** be stored i
6f60: 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61  n lookaside beca
6f70: 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61  use in shared ca
6f80: 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68  che mode the sch
6f90: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ema information.
6fa0: 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20  ** is shared by 
6fb0: 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
6fc0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20  e connections.  
6fd0: 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65  Therefore, while
6fe0: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65   parsing.** sche
6ff0: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  ma information, 
7000: 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45  the Lookaside.bE
7010: 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63  nabled flag is c
7020: 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a  leared so that.*
7030: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * lookaside allo
7040: 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20  cations are not 
7050: 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63  used to construc
7060: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a  t the schema obj
7070: 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ects..*/.struct 
7080: 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31  Lookaside {.  u1
7090: 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  6 sz;           
70a0: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
70b0: 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20   each buffer in 
70c0: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45  bytes */.  u8 bE
70d0: 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
70e0: 20 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64     /* False to d
70f0: 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61  isable new looka
7100: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
7110: 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63   */.  u8 bMalloc
7120: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
7130: 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20   True if pStart 
7140: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
7150: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a  lite3_malloc() *
7160: 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20  /.  int nOut;   
7170: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7180: 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73  umber of buffers
7190: 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b   currently check
71a0: 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  ed out */.  int 
71b0: 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20  mxOut;          
71c0: 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72      /* Highwater
71d0: 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a   mark for nOut *
71e0: 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33  /.  int anStat[3
71f0: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
7200: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
7210: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
7220: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
7230: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72  okasideSlot *pFr
7240: 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ee;   /* List of
7250: 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65   available buffe
7260: 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  rs */.  void *pS
7270: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
7280: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66  /* First byte of
7290: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
72a0: 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69  y space */.  voi
72b0: 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  d *pEnd;        
72c0: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
72d0: 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61  te past end of a
72e0: 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a  vailable space *
72f0: 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  /.};.struct Look
7300: 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f  asideSlot {.  Lo
7310: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65  okasideSlot *pNe
7320: 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62  xt;    /* Next b
7330: 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73  uffer in the lis
7340: 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72  t of free buffer
7350: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
7360: 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   hash table for 
7370: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
7380: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68  ions..**.** Hash
7390: 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74   each FuncDef st
73a0: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65  ructure into one
73b0: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48   of the FuncDefH
73c0: 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a  ash.a[] slots..*
73d0: 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65  * Collisions are
73e0: 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e   on the FuncDef.
73f0: 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a  pHash chain..*/.
7400: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
7410: 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  sh {.  FuncDef *
7420: 61 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20  a[23];       /* 
7430: 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  Hash table for f
7440: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
7450: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
7460: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
7470: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
7480: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7490: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
74a0: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
74b0: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
74c0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
74d0: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
74e0: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
74f0: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
7500: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
7510: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
7520: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
7530: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
7540: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
7550: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
7560: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
7570: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
7580: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
7590: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
75a0: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
75b0: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
75c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
75d0: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
75e0: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7600: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
7610: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
7620: 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66  n use */.  int f
7630: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
7640: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63           /* Misc
7650: 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e  ellaneous flags.
7660: 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
7670: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20  i64 lastRowid;  
7680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7690: 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72   ROWID of most r
76a0: 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65  ecent insert (se
76b0: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36  e above) */.  i6
76c0: 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
76d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
76e0: 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65  efault mmap_size
76f0: 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e   setting */.  un
7700: 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46  signed int openF
7710: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46  lags;       /* F
7720: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
7730: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
7740: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
7750: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
7760: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
7770: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
7780: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
7790: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
77a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
77b0: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
77c0: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
77d0: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
77e0: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
77f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7800: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
7810: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
7820: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61  ations */.  u8 a
7830: 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20  utoCommit;      
7840: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
7850: 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
7860: 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f  g. */.  u8 temp_
7870: 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20  store;          
7880: 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65        /* 1: file
7890: 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65   2: memory 0: de
78a0: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61  fault */.  u8 ma
78b0: 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20  llocFailed;     
78c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
78d0: 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e   if we have seen
78e0: 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72   a malloc failur
78f0: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
7900: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
7910: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
7920: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
7930: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
7940: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
7950: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
7960: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
7970: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
7980: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
7990: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
79a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
79b0: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
79c0: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
79d0: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
79e0: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
79f0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
7a00: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
7a10: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
7a20: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
7a30: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
7a40: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
7a50: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
7a60: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
7a70: 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67  */.  int nextPag
7a80: 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20  esize;          
7a90: 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61     /* Pagesize a
7aa0: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
7ab0: 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63  0 */.  u32 magic
7ac0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7ad0: 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75       /* Magic nu
7ae0: 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20  mber for detect 
7af0: 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a  library misuse *
7b00: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b20: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
7b30: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
7b40: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
7b50: 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20  t nTotalChange; 
7b60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
7b70: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
7b80: 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
7b90: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
7ba0: 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  t aLimit[SQLITE_
7bb0: 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c  N_LIMIT];   /* L
7bc0: 69 6d 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63  imits */.  struc
7bd0: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66  t sqlite3InitInf
7be0: 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  o {      /* Info
7bf0: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72  rmation used dur
7c00: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
7c10: 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65  on */.    int ne
7c20: 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20  wTnum;          
7c30: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67        /* Rootpag
7c40: 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67  e of table being
7c50: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
7c60: 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20      u8 iDb;     
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c80: 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65  /* Which db file
7c90: 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61   is being initia
7ca0: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
7cb0: 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  busy;           
7cc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45           /* TRUE
7cd0: 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
7ce0: 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20  itializing */.  
7cf0: 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67    u8 orphanTrigg
7d00: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
7d10: 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   Last statement 
7d20: 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50  is orphaned TEMP
7d30: 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20   trigger */.  } 
7d40: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
7d50: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
7d60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
7d70: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
7d80: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
7d90: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7db0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
7dc0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
7dd0: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
7de0: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7e00: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
7e10: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
7e20: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
7e30: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7e50: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
7e60: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
7e70: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
7e80: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
7e90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7ea0: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
7eb0: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
7ec0: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
7ee0: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
7ef0: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
7f00: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63  /.  void (*xTrac
7f10: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
7f20: 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a  har*);        /*
7f30: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
7f40: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
7f50: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7f70: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
7f80: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
7f90: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
7fa0: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
7fb0: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
7fc0: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
7fd0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
7fe0: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8000: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
8010: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
8020: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
8030: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
8040: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
8050: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
8060: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  itCallback() */ 
8070: 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d    .  int (*xComm
8080: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
8090: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
80a0: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
80b0: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
80c0: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
80d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
80e0: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
80f0: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  ckCallback() */ 
8100: 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c    .  void (*xRol
8110: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
8120: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
8130: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
8140: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
8150: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
8160: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
8170: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
8180: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
8190: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
81a0: 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  t64);.#ifndef SQ
81b0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
81c0: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
81d0: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
81e0: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
81f0: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
8200: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
8210: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
8220: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
8230: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
8240: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
8250: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
8260: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
8270: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
8280: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
8290: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
82a0: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
82b0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
82c0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
82d0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
82e0: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
82f0: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
8300: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
8310: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
8320: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
8330: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
8340: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
8350: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
8360: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
8370: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
8380: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
8390: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
83a0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
83b0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
83c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
83d0: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
83e0: 0a 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28  .  int (*xAuth)(
83f0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
8400: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
8410: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
8420: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20  nst char*);.    
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8440: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
8450: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
8460: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
8470: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
8480: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8490: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
84a0: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
84b0: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
84c0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
84d0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
84e0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
84f0: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
8500: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
8510: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
8520: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
8530: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
8540: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
8550: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
8560: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
8570: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
8580: 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20  ressOps;        
8590: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
85a0: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
85b0: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
85c0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
85d0: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
85e0: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72  TABLE.  int nVTr
85f0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
8600: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
8610: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
8620: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f  ns */.  Hash aMo
8630: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
8640: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
8650: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
8660: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
8670: 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61  .  VtabCtx *pVta
8680: 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20  bCtx;           
8690: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
86a0: 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e  active vtab conn
86b0: 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20  ect/create */.  
86c0: 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73  VTable **aVTrans
86d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
86e0: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
86f0: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
8700: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62  ctions */.  VTab
8710: 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b  le *pDisconnect;
8720: 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63      /* Disconnec
8730: 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20  t these in next 
8740: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
8750: 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75  ) */.#endif.  Fu
8760: 6e 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b  ncDefHash aFunc;
8770: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
8780: 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e  ash table of con
8790: 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  nection function
87a0: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c  s */.  Hash aCol
87b0: 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  lSeq;           
87c0: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c       /* All coll
87d0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
87e0: 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72  */.  BusyHandler
87f0: 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20   busyHandler;   
8800: 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62     /* Busy callb
8810: 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53  ack */.  Db aDbS
8820: 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20  tatic[2];       
8830: 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63         /* Static
8840: 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32   space for the 2
8850: 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64   default backend
8860: 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  s */.  Savepoint
8870: 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20   *pSavepoint;   
8880: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
8890: 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74  active savepoint
88a0: 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54  s */.  int busyT
88b0: 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20  imeout;         
88c0: 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e       /* Busy han
88d0: 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e  dler timeout, in
88e0: 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e   msec */.  int n
88f0: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
8900: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8910: 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61  er of non-transa
8920: 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73  ction savepoints
8930: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65   */.  int nState
8940: 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ment;           
8950: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
8960: 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e   nested statemen
8970: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20  t-transactions  
8980: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
8990: 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
89a0: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
89b0: 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  ed constraints t
89c0: 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  his transaction.
89d0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
89e0: 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
89f0: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
8a00: 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f  red immediate co
8a10: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
8a20: 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64  nt *pnBytesFreed
8a30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
8a40: 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63  If not NULL, inc
8a50: 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44  rement this in D
8a60: 62 46 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64  bFree() */..#ifd
8a70: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
8a80: 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
8a90: 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
8aa0: 67 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  g variables are 
8ab0: 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79  all protected by
8ac0: 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54   the STATIC_MAST
8ad0: 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20  ER .  ** mutex, 
8ae0: 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d  not by sqlite3.m
8af0: 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75  utex. They are u
8b00: 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e  sed by code in n
8b10: 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20  otify.c. .  **. 
8b20: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
8b30: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
8b40: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
8b50: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
8b60: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
8b70: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
8b80: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
8b90: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
8ba0: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
8bb0: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
8bc0: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
8bd0: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
8be0: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
8bf0: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
8c00: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
8c10: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
8c20: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
8c30: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
8c40: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
8c50: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
8c60: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
8c70: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
8c80: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
8c90: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
8ca0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
8cb0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
8cc0: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
8cd0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
8ce0: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
8cf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
8d00: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
8d10: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
8d20: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
8d30: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
8d40: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
8d50: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
8d60: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
8d70: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
8d80: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
8d90: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
8da0: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
8db0: 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20  dif.};../*.** A 
8dc0: 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65  macro to discove
8dd0: 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  r the encoding o
8de0: 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  f a database..*/
8df0: 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29  .#define ENC(db)
8e00: 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70   ((db)->aDb[0].p
8e10: 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a  Schema->enc)../*
8e20: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
8e30: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
8e40: 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64  te3.flags..*/.#d
8e50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
8e60: 65 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30  eTrace      0x00
8e70: 30 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20  000001  /* True 
8e80: 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78  to trace VDBE ex
8e90: 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ecution */.#defi
8ea0: 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  ne SQLITE_Intern
8eb0: 43 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30  Changes  0x00000
8ec0: 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74  002  /* Uncommit
8ed0: 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63  ted Hash table c
8ee0: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
8ef0: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  e SQLITE_FullFSy
8f00: 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30  nc      0x000000
8f10: 30 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  04  /* Use full 
8f20: 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63  fsync on the bac
8f30: 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kend */.#define 
8f40: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
8f50: 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 30 38  Sync  0x00000008
8f60: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
8f70: 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69  ync for checkpoi
8f80: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
8f90: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
8fa0: 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20 20      0x00000010  
8fb0: 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70  /* OK to spill p
8fc0: 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64  ager cache */.#d
8fd0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
8fe0: 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30  lColNames   0x00
8ff0: 30 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77 20  000020  /* Show 
9000: 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  full column name
9010: 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23  s on SELECT */.#
9020: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68  define SQLITE_Sh
9030: 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30  ortColNames  0x0
9040: 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77  0000040  /* Show
9050: 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e   short columns n
9060: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
9070: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
9080: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30        0x00000080
9090: 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20    /* Count rows 
90a0: 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52  changed by INSER
90b0: 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  T, */.          
90c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90e0: 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20  /*   DELETE, or 
90f0: 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72  UPDATE and retur
9100: 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  n */.           
9110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9130: 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73  *   the count us
9140: 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20  ing a callback. 
9150: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9160: 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20  E_NullCallback  
9170: 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20   0x00000100  /* 
9180: 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62  Invoke the callb
9190: 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20  ack once if the 
91a0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
91d0: 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20    result set is 
91e0: 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
91f0: 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
9200: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 30         0x0000020
9210: 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e  0  /* Debug prin
9220: 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63  t SQL as it exec
9230: 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  utes */.#define 
9240: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
9250: 6e 67 20 20 20 20 30 78 30 30 30 30 30 34 30 30  ng    0x00000400
9260: 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69    /* Debug listi
9270: 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67  ngs of VDBE prog
9280: 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rams */.#define 
9290: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
92a0: 6d 61 20 20 20 20 30 78 30 30 30 30 30 38 30 30  ma    0x00000800
92b0: 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74    /* OK to updat
92c0: 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
92d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
92e0: 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65  E_VdbeAddopTrace
92f0: 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20   0x00001000  /* 
9300: 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62  Trace sqlite3Vdb
9310: 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a  eAddOp() calls *
9320: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9330: 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20  _IgnoreChecks   
9340: 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44  0x00002000  /* D
9350: 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68  o not enforce ch
9360: 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
9370: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9380: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
9390: 64 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20  d 0x0004000  /* 
93a0: 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  For shared-cache
93b0: 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65   mode */.#define
93c0: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
93d0: 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38 30 30  leFmt  0x0000800
93e0: 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77  0  /* Create new
93f0: 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f   databases in fo
9400: 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e  rmat 1 */.#defin
9410: 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72  e SQLITE_Recover
9420: 79 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30 30  yMode   0x000100
9430: 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63  00  /* Ignore sc
9440: 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23  hema errors */.#
9450: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
9460: 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30  verseOrder   0x0
9470: 30 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65  0020000  /* Reve
9480: 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45  rse unordered SE
9490: 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LECTs */.#define
94a0: 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67   SQLITE_RecTrigg
94b0: 65 72 73 20 20 20 20 30 78 30 30 30 34 30 30 30  ers    0x0004000
94c0: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63  0  /* Enable rec
94d0: 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20  ursive triggers 
94e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
94f0: 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20  E_ForeignKeys   
9500: 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20   0x00080000  /* 
9510: 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20  Enforce foreign 
9520: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
9530: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9540: 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20  TE_AutoIndex    
9550: 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a    0x00100000  /*
9560: 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69   Enable automati
9570: 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  c indexes */.#de
9580: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66  fine SQLITE_Pref
9590: 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32  erBuiltin  0x002
95a0: 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72  00000  /* Prefer
95b0: 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e  ence to built-in
95c0: 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e   funcs */.#defin
95d0: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
95e0: 65 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30  ension  0x004000
95f0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
9600: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
9610: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
9620: 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78  nableTrigger  0x
9630: 30 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75  00800000  /* Tru
9640: 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67  e to enable trig
9650: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
9660: 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
9670: 20 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30        0x01000000
9680: 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46    /* Defer all F
9690: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
96a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
96b0: 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30  QueryOnly      0
96c0: 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69  x02000000  /* Di
96d0: 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63  sable database c
96e0: 68 61 6e 67 65 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  hanges */.../*.*
96f0: 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71  * Bits of the sq
9700: 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73  lite3.dbOptFlags
9710: 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20   field that are 
9720: 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  used by the.** s
9730: 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
9740: 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
9750: 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
9760: 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  S,...) interface
9770: 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65   to.** selective
9780: 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f  ly disable vario
9790: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
97a0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
97b0: 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e  ITE_QueryFlatten
97c0: 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51  er 0x0001   /* Q
97d0: 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20  uery flattening 
97e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
97f0: 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20  E_ColumnCache   
9800: 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c   0x0002   /* Col
9810: 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  umn cache */.#de
9820: 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75  fine SQLITE_Grou
9830: 70 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30  pByOrder   0x000
9840: 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63  4   /* GROUPBY c
9850: 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20  over of ORDERBY 
9860: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9870: 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74  E_FactorOutConst
9880: 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e   0x0008   /* Con
9890: 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20  stant factoring 
98a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
98b0: 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 20  E_IdxRealAsInt  
98c0: 20 30 78 30 30 31 30 20 20 20 2f 2a 20 53 74 6f   0x0010   /* Sto
98d0: 72 65 20 52 45 41 4c 20 61 73 20 49 4e 54 20 69  re REAL as INT i
98e0: 6e 20 69 6e 64 69 63 65 73 20 2a 2f 0a 23 64 65  n indices */.#de
98f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
9900: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32  inctOpt    0x002
9910: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
9920: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
9930: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9940: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
9950: 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0040   /* Cover
9960: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
9970: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9980: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
9990: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44   0x0080   /* ORD
99a0: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
99b0: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
99c0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43  ine SQLITE_SubqC
99d0: 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30  oroutine  0x0100
99e0: 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73     /* Evaluate s
99f0: 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72  ubqueries as cor
9a00: 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69  outines */.#defi
9a10: 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69  ne SQLITE_Transi
9a20: 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20  tive     0x0200 
9a30: 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20    /* Transitive 
9a40: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
9a50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d  define SQLITE_Om
9a60: 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30  itNoopJoin   0x0
9a70: 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e  400   /* Omit un
9a80: 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a  used tables in j
9a90: 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oins */.#define 
9aa0: 53 51 4c 49 54 45 5f 53 74 61 74 33 20 20 20 20  SQLITE_Stat3    
9ab0: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
9ac0: 2a 20 55 73 65 20 74 68 65 20 53 51 4c 49 54 45  * Use the SQLITE
9ad0: 5f 53 54 41 54 33 20 74 61 62 6c 65 20 2a 2f 0a  _STAT3 table */.
9ae0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
9af0: 64 6a 75 73 74 4f 75 74 45 73 74 20 20 20 30 78  djustOutEst   0x
9b00: 31 30 30 30 20 20 20 2f 2a 20 41 64 6a 75 73 74  1000   /* Adjust
9b10: 20 6f 75 74 70 75 74 20 65 73 74 69 6d 61 74 65   output estimate
9b20: 73 20 75 73 69 6e 67 20 57 48 45 52 45 20 2a 2f  s using WHERE */
9b30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9b40: 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30  AllOpts        0
9b50: 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f  xffff   /* All o
9b60: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a  ptimizations */.
9b70: 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f  ./*.** Macros fo
9b80: 72 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65  r testing whethe
9b90: 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a  r or not optimiz
9ba0: 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c  ations are enabl
9bb0: 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a  ed or disabled..
9bc0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
9bd0: 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
9be0: 45 53 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  EST.#define Opti
9bf0: 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64  mizationDisabled
9c00: 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64  (db, mask)  (((d
9c10: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
9c20: 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69  mask))!=0).#defi
9c30: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
9c40: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
9c50: 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74     (((db)->dbOpt
9c60: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30  Flags&(mask))==0
9c70: 29 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ).#else.#define 
9c80: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
9c90: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
9ca0: 30 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  0.#define Optimi
9cb0: 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62  zationEnabled(db
9cc0: 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64  , mask)   1.#end
9cd0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  if../*.** Possib
9ce0: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
9cf0: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
9d00: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
9d10: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
9d20: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
9d30: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
9d40: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
9d50: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
9d60: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
9d70: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
9d80: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
9d90: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
9da0: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
9db0: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
9dc0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
9dd0: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
9de0: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
9df0: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
9e00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
9e10: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
9e20: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
9e30: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
9e40: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
9e50: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
9e60: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
9e70: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
9e80: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
9e90: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9ea0: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
9eb0: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
9ec0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
9ed0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
9ee0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9ef0: 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20  _MAGIC_ZOMBIE   
9f00: 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43  0x64cffc7f  /* C
9f10: 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73  lose with last s
9f20: 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a  tatement close *
9f30: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
9f40: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
9f50: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
9f60: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
9f70: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
9f80: 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74  re.  A pointer t
9f90: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
9fa0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
9fb0: 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a  e sqlite.aFunc.*
9fc0: 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57  * hash table.  W
9fd0: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e  hen multiple fun
9fe0: 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20  ctions have the 
9ff0: 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68  same name, the h
a000: 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69  ash table.** poi
a010: 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20  nts to a linked 
a020: 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74  list of these st
a030: 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72  ructures..*/.str
a040: 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20  uct FuncDef {.  
a050: 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20  i16 nArg;       
a060: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a070: 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31  f arguments.  -1
a080: 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64   means unlimited
a090: 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c   */.  u16 funcFl
a0a0: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f  ags;       /* So
a0b0: 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f  me combination o
a0c0: 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20  f SQLITE_FUNC_* 
a0d0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
a0e0: 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65  Data;     /* Use
a0f0: 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72  r data parameter
a100: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
a110: 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Next;      /* Ne
a120: 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  xt function with
a130: 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20   same name */.  
a140: 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71  void (*xFunc)(sq
a150: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
a160: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
a170: 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20  **); /* Regular 
a180: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
a190: 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69  id (*xStep)(sqli
a1a0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
a1b0: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
a1c0: 29 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  ); /* Aggregate 
a1d0: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
a1e0: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
a1f0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
a200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a210: 20 41 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c   Aggregate final
a220: 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a  izer */.  char *
a230: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
a240: 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68  * SQL name of th
a250: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20  e function. */. 
a260: 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b   FuncDef *pHash;
a270: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69        /* Next wi
a280: 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e  th a different n
a290: 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65  ame but the same
a2a0: 20 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44   hash */.  FuncD
a2b0: 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
a2c0: 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66  ructor;   /* Ref
a2d0: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64  erence counted d
a2e0: 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
a2f0: 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  on */.};../*.** 
a300: 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65  This structure e
a310: 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73  ncapsulates a us
a320: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74  er-function dest
a330: 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ructor callback 
a340: 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  (as.** configure
a350: 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66  d using create_f
a360: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e  unction_v2()) an
a370: 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f  d a reference co
a380: 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63  unter. When.** c
a390: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
a3a0: 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  2() is called to
a3b0: 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69   create a functi
a3c0: 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75  on with a destru
a3d0: 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c  ctor,.** a singl
a3e0: 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  e object of this
a3f0: 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74   type is allocat
a400: 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74  ed. FuncDestruct
a410: 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74  or.nRef is set t
a420: 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  o .** the number
a430: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
a440: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
a450: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
a460: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
a470: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
a480: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
a490: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
a4a0: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
a4b0: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
a4c0: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
a4d0: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
a4e0: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
a4f0: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
a500: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
a510: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
a520: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
a530: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
a540: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
a550: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
a560: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
a570: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
a580: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
a590: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
a5a0: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
a5b0: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
a5c0: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
a5d0: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
a5e0: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
a5f0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
a600: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
a610: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
a620: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
a630: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
a640: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
a650: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
a660: 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20  ef.flags.  Note 
a670: 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48  that the _LENGTH
a680: 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20   and _TYPEOF.** 
a690: 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72  values must corr
a6a0: 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47  espond to OPFLAG
a6b0: 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
a6c0: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e  PFLAG_TYPEOFARG.
a6d0: 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61    There.** are a
a6e0: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
a6f0: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74  ts in the code t
a700: 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a  o verify this..*
a710: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a720: 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30  _FUNC_ENCMASK  0
a730: 78 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55  x003 /* SQLITE_U
a740: 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  TF8, SQLITE_UTF1
a750: 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a  6BE or UTF16LE *
a760: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a770: 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30  _FUNC_LIKE     0
a780: 78 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74  x004 /* Candidat
a790: 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f  e for the LIKE o
a7a0: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
a7b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
a7c0: 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 30  NC_CASE     0x00
a7d0: 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74  8 /* Case-sensit
a7e0: 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75  ive LIKE-type fu
a7f0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
a800: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50  e SQLITE_FUNC_EP
a810: 48 45 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20  HEM    0x010 /* 
a820: 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65  Ephemeral.  Dele
a830: 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a  te with VDBE */.
a840: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a850: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30  UNC_NEEDCOLL 0x0
a860: 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74  20 /* sqlite3Get
a870: 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69  FuncCollSeq() mi
a880: 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f  ght be called */
a890: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a8a0: 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78  FUNC_LENGTH   0x
a8b0: 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  040 /* Built-in 
a8c0: 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f  length() functio
a8d0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
a8e0: 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20  ITE_FUNC_TYPEOF 
a8f0: 20 20 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74    0x080 /* Built
a900: 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e  -in typeof() fun
a910: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
a920: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55   SQLITE_FUNC_COU
a930: 4e 54 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42  NT    0x100 /* B
a940: 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29  uilt-in count(*)
a950: 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64   aggregate */.#d
a960: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
a970: 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30  C_COALESCE 0x200
a980: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61   /* Built-in coa
a990: 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c  lesce() or ifnul
a9a0: 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  l() */.#define S
a9b0: 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b  QLITE_FUNC_UNLIK
a9c0: 45 4c 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69  ELY 0x400 /* Bui
a9d0: 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
a9e0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a   function */../*
a9f0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
aa00: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
aa10: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
aa20: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
aa30: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
aa40: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
aa50: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
aa60: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
aa70: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
aa80: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
aa90: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
aaa0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
aab0: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
aac0: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
aad0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
aae0: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
aaf0: 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65   .**     impleme
ab00: 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
ab10: 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
ab20: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
ab30: 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
ab40: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
ab50: 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
ab60: 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
ab70: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
ab80: 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
ab90: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
aba0: 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
abb0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
abc0: 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e   .**     argumen
abd0: 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74  t bNC is true, t
abe0: 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46  hen the SQLITE_F
abf0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61  UNC_NEEDCOLL fla
ac00: 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  g is set..**.** 
ac10: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
ac20: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
ac30: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
ac40: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
ac50: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
ac60: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
ac70: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
ac80: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
ac90: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
aca0: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
acb0: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
acc0: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
acd0: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
ace0: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
acf0: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
ad00: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
ad10: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
ad20: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
ad30: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
ad40: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
ad50: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
ad60: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
ad70: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
ad80: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
ad90: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61  Name .**     tha
ada0: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
adb0: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
adc0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
add0: 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20   call to C .**  
ade0: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
adf0: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
ae00: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
ae10: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
ae20: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
ae30: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
ae40: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
ae50: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
ae60: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
ae70: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
ae80: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
ae90: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
aea0: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
aeb0: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
aec0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
aed0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
aee0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
aef0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
af00: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
af10: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
af20: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
af30: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
af40: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
af50: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
af60: 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54  0}.#define FUNCT
af70: 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
af80: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
af90: 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
afa0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
afb0: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
afc0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
afd0: 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a  )|extraFlags, \.
afe0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
aff0: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
b000: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
b010: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
b020: 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a  e STR_FUNCTION(z
b030: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
b040: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
b050: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
b060: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
b070: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
b080: 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78   \.   pArg, 0, x
b090: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
b0a0: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
b0b0: 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65  e LIKEFUNC(zName
b0c0: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61  , nArg, arg, fla
b0d0: 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
b0e0: 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73  QLITE_UTF8|flags
b0f0: 2c 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30  , (void *)arg, 0
b100: 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30  , likeFunc, 0, 0
b110: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
b120: 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54  #define AGGREGAT
b130: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
b140: 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
b150: 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67  Final) \.  {nArg
b160: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
b170: 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
b180: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
b190: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
b1a0: 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65  arg), 0, 0, xSte
b1b0: 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c  p,xFinal,#zName,
b1c0: 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20  0,0}../*.** All 
b1d0: 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e  current savepoin
b1e0: 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
b1f0: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73   a linked list s
b200: 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71  tarting at.** sq
b210: 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74  lite3.pSavepoint
b220: 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
b230: 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ent in the list 
b240: 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  is the most rece
b250: 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73  ntly.** opened s
b260: 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f  avepoint. Savepo
b270: 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74  ints are added t
b280: 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68  o the list by th
b290: 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76  e vdbe.** OP_Sav
b2a0: 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
b2b0: 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61  on..*/.struct Sa
b2c0: 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72  vepoint {.  char
b2d0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
b2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2f0: 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d  /* Savepoint nam
b300: 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  e (nul-terminate
b310: 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  d) */.  i64 nDef
b320: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
b330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
b340: 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
b350: 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20  d fk violations 
b360: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
b370: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
b380: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
b390: 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69  er of deferred i
b3a0: 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65  mm fk. */.  Save
b3b0: 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20  point *pNext;   
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3d0: 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f  /* Parent savepo
b3e0: 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a  int (if any) */.
b3f0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
b400: 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64  llowing are used
b410: 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70   as the second p
b420: 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
b430: 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a  te3Savepoint(),.
b440: 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31  ** and as the P1
b450: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
b460: 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
b470: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64  struction..*/.#d
b480: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
b490: 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65  BEGIN      0.#de
b4a0: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
b4b0: 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66  ELEASE    1.#def
b4c0: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f  ine SAVEPOINT_RO
b4d0: 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a  LLBACK   2.../*.
b4e0: 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d  ** Each SQLite m
b4f0: 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74  odule (virtual t
b500: 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29  able definition)
b510: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
b520: 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
b530: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
b540: 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64  tructure, stored
b550: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e   in the sqlite3.
b560: 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20  aModule.** hash 
b570: 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  table..*/.struct
b580: 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73   Module {.  cons
b590: 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
b5a0: 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20   *pModule;      
b5b0: 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69   /* Callback poi
b5c0: 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  nters */.  const
b5d0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5f0: 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74  /* Name passed t
b600: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
b610: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  ) */.  void *pAu
b620: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
b630: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
b640: 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72  Aux passed to cr
b650: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
b660: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
b670: 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  oy)(void *);    
b680: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c          /* Modul
b690: 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  e destructor fun
b6a0: 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ction */.};../*.
b6b0: 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
b6c0: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
b6d0: 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   of an SQL table
b6e0: 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69   is held in an i
b6f0: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
b700: 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  is structure..*/
b710: 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b  .struct Column {
b720: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
b730: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
b740: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
b750: 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20  Expr *pDflt;    
b760: 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75   /* Default valu
b770: 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
b780: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c   */.  char *zDfl
b790: 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e  t;     /* Origin
b7a0: 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 64  al text of the d
b7b0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a  efault value */.
b7c0: 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20    char *zType;  
b7d0: 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20     /* Data type 
b7e0: 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20  for this column 
b7f0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  */.  char *zColl
b800: 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  ;     /* Collati
b810: 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66  ng sequence.  If
b820: 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64   NULL, use the d
b830: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e  efault */.  u8 n
b840: 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20  otNull;      /* 
b850: 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20  An OE_ code for 
b860: 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e  handling a NOT N
b870: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
b880: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
b890: 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74  y;   /* One of t
b8a0: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e  he SQLITE_AFF_..
b8b0: 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  . values */.  u8
b8c0: 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f   szEst;        /
b8d0: 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
b8e0: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
b8f0: 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38    INT==1 */.  u8
b900: 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f   colFlags;     /
b910: 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72  * Boolean proper
b920: 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c  ties.  See COLFL
b930: 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f  AG_ defines belo
b940: 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  w */.};../* Allo
b950: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43  wed values for C
b960: 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a  olumn.colFlags:.
b970: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
b980: 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30  AG_PRIMKEY  0x00
b990: 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  01    /* Column 
b9a0: 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  is part of the p
b9b0: 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
b9c0: 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49  efine COLFLAG_HI
b9d0: 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20  DDEN   0x0002   
b9e0: 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c   /* A hidden col
b9f0: 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c  umn in a virtual
ba00: 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   table */../*.**
ba10: 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65   A "Collating Se
ba20: 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e  quence" is defin
ba30: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
ba40: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
ba50: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
ba60: 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61   Conceptually, a
ba70: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
ba80: 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  nce consists of 
ba90: 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20  a name and.** a 
baa0: 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69  comparison routi
bab0: 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ne that defines 
bac0: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61  the order of tha
bad0: 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a  t sequence..**.*
bae0: 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d  * If CollSeq.xCm
baf0: 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65  p is NULL, it me
bb00: 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ans that the.** 
bb10: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
bb20: 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  ce is undefined.
bb30: 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20    Indices built 
bb40: 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a  on an undefined.
bb50: 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
bb60: 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65  uence may not be
bb70: 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e   read or written
bb80: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c  ..*/.struct Coll
bb90: 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  Seq {.  char *zN
bba0: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
bbb0: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c   Name of the col
bbc0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c  lating sequence,
bbd0: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a   UTF-8 encoded *
bbe0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
bbf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
bc00: 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c  t encoding handl
bc10: 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a  ed by xCmp() */.
bc20: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20    void *pUser;  
bc30: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
bc40: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d   argument to xCm
bc50: 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  p() */.  int (*x
bc60: 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  Cmp)(void*,int, 
bc70: 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
bc80: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  , const void*);.
bc90: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
bca0: 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72  oid*);  /* Destr
bcb0: 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20  uctor for pUser 
bcc0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73  */.};../*.** A s
bcd0: 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65  ort order can be
bce0: 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44   either ASC or D
bcf0: 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ESC..*/.#define 
bd00: 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20  SQLITE_SO_ASC   
bd10: 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69      0  /* Sort i
bd20: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
bd30: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
bd40: 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20  ITE_SO_DESC     
bd50: 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   1  /* Sort in a
bd60: 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
bd70: 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
bd80: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
bd90: 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
bda0: 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
bdb0: 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
bdc0: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
bdd0: 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
bde0: 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
bdf0: 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
be00: 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
be10: 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
be20: 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
be30: 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
be40: 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
be50: 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20   consecutively. 
be60: 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68   .**.** But rath
be70: 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69  er than start wi
be80: 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65  th 0 or 1, we be
be90: 67 69 6e 20 77 69 74 68 20 27 61 27 2e 20 20 54  gin with 'a'.  T
bea0: 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e  hat way,.** when
beb0: 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69   multiple affini
bec0: 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e  ty types are con
bed0: 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61  catenated into a
bee0: 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75   string and.** u
bef0: 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70  sed as the P4 op
bf00: 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c  erand, they will
bf10: 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c   be more readabl
bf20: 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c  e..**.** Note al
bf30: 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65  so that the nume
bf40: 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72  ric types are gr
bf50: 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73  ouped together s
bf60: 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a  o that testing.*
bf70: 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20  * for a numeric 
bf80: 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65  type is a single
bf90: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a   comparison..*/.
bfa0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
bfb0: 46 46 5f 54 45 58 54 20 20 20 20 20 27 61 27 0a  FF_TEXT     'a'.
bfc0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
bfd0: 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a  FF_NONE     'b'.
bfe0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
bff0: 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 63 27 0a  FF_NUMERIC  'c'.
c000: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
c010: 46 46 5f 49 4e 54 45 47 45 52 20 20 27 64 27 0a  FF_INTEGER  'd'.
c020: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
c030: 46 46 5f 52 45 41 4c 20 20 20 20 20 27 65 27 0a  FF_REAL     'e'.
c040: 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
c050: 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  IsNumericAffinit
c060: 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49  y(X)  ((X)>=SQLI
c070: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a  TE_AFF_NUMERIC).
c080: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
c090: 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65  E_AFF_MASK value
c0a0: 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20  s masks off the 
c0b0: 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73  significant bits
c0c0: 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69   of an.** affini
c0d0: 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64  ty value. .*/.#d
c0e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
c0f0: 5f 4d 41 53 4b 20 20 20 20 20 30 78 36 37 0a 0a  _MASK     0x67..
c100: 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c  /*.** Additional
c110: 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74   bit values that
c120: 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74   can be ORed wit
c130: 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69  h an affinity wi
c140: 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e  thout.** changin
c150: 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a  g the affinity..
c160: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c170: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30  E_JUMPIFNULL   0
c180: 78 30 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66  x08  /* jumps if
c190: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
c1a0: 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  is NULL */.#defi
c1b0: 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  ne SQLITE_STOREP
c1c0: 32 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20  2      0x10  /* 
c1d0: 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
c1e0: 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74  reg[P2] rather t
c1f0: 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66  han jump */.#def
c200: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  ine SQLITE_NULLE
c210: 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a  Q       0x80  /*
c220: 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f   NULL=NULL */../
c230: 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
c240: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
c250: 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
c260: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
c270: 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
c280: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
c290: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64   .**.** If the d
c2a0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
c2b0: 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74  s shared, then t
c2c0: 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74  here is one inst
c2d0: 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ance of this.** 
c2e0: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61  structure for ea
c2f0: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
c300: 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a  ection (sqlite3*
c310: 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20  ) that uses the 
c320: 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61  shared.** schema
c330: 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
c340: 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  e each database 
c350: 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69  connection requi
c360: 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71  res its own uniq
c370: 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  ue.** instance o
c380: 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  f the sqlite3_vt
c390: 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20  ab* handle used 
c3a0: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
c3b0: 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20  rtual table .** 
c3c0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
c3d0: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
c3e0: 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65  ndles can not be
c3f0: 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 20   shared between 
c400: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
c410: 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77  nections, even w
c420: 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20  hen the rest of 
c430: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
c440: 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d  tabase .** schem
c450: 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20  a is shared, as 
c460: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
c470: 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20  on often stores 
c480: 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
c490: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
c4a0: 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76  e passed to it v
c4b0: 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28  ia the xConnect(
c4c0: 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d  ) or xCreate() m
c4d0: 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20  ethod.** during 
c4e0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
c4f0: 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20  nternally. This 
c500: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
c510: 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a  ion handle may.*
c520: 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62  * then be used b
c530: 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  y the virtual ta
c540: 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
c550: 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61  on to access rea
c560: 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74  l tables .** wit
c570: 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hin the database
c580: 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61  . So that they a
c590: 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66  ppear as part of
c5a0: 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a   the callers .**
c5b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
c5c0: 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65  ese accesses nee
c5d0: 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61  d to be made via
c5e0: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
c5f0: 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  se .** connectio
c600: 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
c610: 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
c620: 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
c630: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
c640: 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
c650: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
c660: 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
c670: 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
c680: 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
c690: 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
c6a0: 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
c6b0: 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
c6c0: 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
c6d0: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
c6e0: 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
c6f0: 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
c700: 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
c710: 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
c720: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
c730: 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
c740: 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
c750: 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
c760: 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
c770: 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
c780: 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
c790: 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
c7a0: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
c7b0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
c7c0: 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
c7d0: 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
c7e0: 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
c7f0: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
c800: 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
c810: 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
c820: 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
c830: 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
c840: 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
c850: 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
c860: 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
c870: 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
c880: 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
c890: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
c8a0: 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65  e not .** delete
c8b0: 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
c8c0: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
c8d0: 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e  are not xDisconn
c8e0: 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65  ect()ed .** imme
c8f0: 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64  diately. Instead
c900: 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64  , they are moved
c910: 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e   from the Table.
c920: 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a  pVTable list to.
c930: 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65  ** another linke
c940: 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79  d list headed by
c950: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69   the sqlite3.pDi
c960: 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20  sconnect member 
c970: 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  of the.** corres
c980: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20  ponding sqlite3 
c990: 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20  structure. They 
c9a0: 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64  are then deleted
c9b0: 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a  /xDisconnected .
c9c0: 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73  ** next time a s
c9d0: 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70  tatement is prep
c9e0: 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20  ared using said 
c9f0: 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69  sqlite3*. This i
ca00: 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f  s done.** to avo
ca10: 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75  id deadlock issu
ca20: 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c  es involving mul
ca30: 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75  tiple sqlite3.mu
ca40: 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20  tex mutexes..** 
ca50: 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74  Refer to comment
ca60: 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e  s above function
ca70: 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
ca80: 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a  ckList() for an.
ca90: 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61  ** explanation a
caa0: 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73  s to why it is s
cab0: 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e  afe to add an en
cac0: 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  try to an sqlite
cad0: 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a  3.pDisconnect.**
cae0: 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f   list without ho
caf0: 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73  lding the corres
cb00: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e  ponding sqlite3.
cb10: 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a  mutex mutex..**.
cb20: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f  ** The memory fo
cb30: 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69  r objects of thi
cb40: 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73  s type is always
cb50: 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a   allocated by .*
cb60: 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
cb70: 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
cb80: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
cb90: 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
cba0: 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20  e.db as .** the 
cbb0: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
cbc0: 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65  */.struct VTable
cbd0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
cbe0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
cbf0: 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * Database conne
cc00: 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ction associated
cc10: 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65   with this table
cc20: 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d   */.  Module *pM
cc30: 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  od;             
cc40: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f  /* Pointer to mo
cc50: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
cc60: 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ion */.  sqlite3
cc70: 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20  _vtab *pVtab;   
cc80: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
cc90: 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a   vtab instance *
cca0: 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
ccb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ccc0: 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
ccd0: 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75  ers to this stru
cce0: 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43  cture */.  u8 bC
ccf0: 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20  onstraint;      
cd00: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
cd10: 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
cd20: 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69  supported */.  i
cd30: 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt iSavepoint;  
cd40: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74           /* Dept
cd50: 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49  h of the SAVEPOI
cd60: 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54  NT stack */.  VT
cd70: 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20  able *pNext;    
cd80: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
cd90: 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  in linked list (
cda0: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b  see above) */.};
cdb0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
cdc0: 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73   table is repres
cdd0: 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
cde0: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
cdf0: 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69  f the.** followi
ce00: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
ce10: 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20  .** Table.zName 
ce20: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
ce30: 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63  he table.  The c
ce40: 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69  ase of the origi
ce50: 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41  nal.** CREATE TA
ce60: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  BLE statement is
ce70: 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73   stored, but cas
ce80: 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69  e is not signifi
ce90: 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70  cant for.** comp
cea0: 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54  arisons..**.** T
ceb0: 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65  able.nCol is the
cec0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
ced0: 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ns in this table
cee0: 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73  .  Table.aCol is
cef0: 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
cf00: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c   an array of Col
cf10: 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20  umn structures, 
cf20: 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  one for each col
cf30: 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  umn..**.** If th
cf40: 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49  e table has an I
cf50: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
cf60: 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69  EY, then Table.i
cf70: 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64 65  PKey is the inde
cf80: 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75  x of.** the colu
cf90: 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61 74 20  mn that is that 
cfa0: 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65  key.   Otherwise
cfb0: 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20   Table.iPKey is 
cfc0: 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a  negative.  Note.
cfd0: 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61  ** that the data
cfe0: 74 79 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d  type of the PRIM
cff0: 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20  ARY KEY must be 
d000: 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69 73  INTEGER for this
d010: 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20   field to.** be 
d020: 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52  set.  An INTEGER
d030: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
d040: 75 73 65 64 20 61 73 20 74 68 65 20 72 6f 77 69  used as the rowi
d050: 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
d060: 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20  f.** the table. 
d070: 20 49 66 20 61 20 74 61 62 6c 65 20 68 61 73 20   If a table has 
d080: 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  no INTEGER PRIMA
d090: 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72  RY KEY, then a r
d0a0: 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69  andom rowid.** i
d0b0: 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20  s generated for 
d0c0: 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20  each row of the 
d0d0: 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72  table.  TF_HasPr
d0e0: 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74 20  imaryKey is set 
d0f0: 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  if.** the table 
d100: 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20  has any PRIMARY 
d110: 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20  KEY, INTEGER or 
d120: 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a  otherwise..**.**
d130: 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74   Table.tnum is t
d140: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  he page number f
d150: 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65  or the root BTre
d160: 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  e page of the ta
d170: 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61  ble in the.** da
d180: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66  tabase file.  If
d190: 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68   Table.iDb is th
d1a0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
d1b0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 62 61  atabase table ba
d1c0: 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69  ckend.** in sqli
d1d0: 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20  te.aDb[].  0 is 
d1e0: 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
d1f0: 61 62 61 73 65 20 61 6e 64 20 31 20 69 73 20 66  abase and 1 is f
d200: 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68 61 74  or the file that
d210: 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72  .** holds tempor
d220: 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69  ary tables and i
d230: 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45  ndices.  If TF_E
d240: 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a  phemeral is set.
d250: 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  ** then the tabl
d260: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  e is stored in a
d270: 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 61 75   file that is au
d280: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65  tomatically dele
d290: 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20  ted.** when the 
d2a0: 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74  VDBE cursor to t
d2b0: 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73  he table is clos
d2c0: 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ed.  In this cas
d2d0: 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a  e Table.tnum .**
d2e0: 20 72 65 66 65 72 73 20 56 44 42 45 20 63 75 72   refers VDBE cur
d2f0: 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20  sor number that 
d300: 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20  holds the table 
d310: 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65  open, not to the
d320: 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75   root.** page nu
d330: 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74  mber.  Transient
d340: 20 74 61 62 6c 65 73 20 61 72 65 20 75 73 65 64   tables are used
d350: 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73   to hold the res
d360: 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62  ults of a.** sub
d370: 2d 71 75 65 72 79 20 74 68 61 74 20 61 70 70 65  -query that appe
d380: 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61  ars instead of a
d390: 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65   real table name
d3a0: 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
d3b0: 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c  use .** of a SEL
d3c0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
d3d0: 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b  /.struct Table {
d3e0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
d3f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
d400: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  of the table or 
d410: 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e  view */.  Column
d420: 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f   *aCol;        /
d430: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
d440: 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
d450: 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  */.  Index *pInd
d460: 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  ex;       /* Lis
d470: 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73  t of SQL indexes
d480: 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   on this table. 
d490: 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
d4a0: 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c  lect;     /* NUL
d4b0: 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50  L for tables.  P
d4c0: 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74  oints to definit
d4d0: 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a  ion if a view. *
d4e0: 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b  /.  FKey *pFKey;
d4f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b           /* Link
d500: 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66  ed list of all f
d510: 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74  oreign keys in t
d520: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63  his table */.  c
d530: 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
d540: 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
d550: 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
d560: 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
d570: 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  mn */.#ifndef SQ
d580: 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a  LITE_OMIT_CHECK.
d590: 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65    ExprList *pChe
d5a0: 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48  ck;    /* All CH
d5b0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ECK constraints 
d5c0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 74 52 6f 77  */.#endif.  tRow
d5d0: 63 6e 74 20 6e 52 6f 77 45 73 74 3b 20 20 20 20  cnt nRowEst;    
d5e0: 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f   /* Estimated ro
d5f0: 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72  ws in table - fr
d600: 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  om sqlite_stat1 
d610: 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74  table */.  int t
d620: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
d630: 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f  /* Root BTree no
d640: 64 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c  de for this tabl
d650: 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76  e (see note abov
d660: 65 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65  e) */.  i16 iPKe
d670: 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  y;           /* 
d680: 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c  If not negative,
d690: 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d   use aCol[iPKey]
d6a0: 20 61 73 20 74 68 65 20 70 72 69 6d 61 72 79 20   as the primary 
d6b0: 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f  key */.  i16 nCo
d6c0: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  l;            /*
d6d0: 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
d6e0: 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ns in this table
d6f0: 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20   */.  u16 nRef; 
d700: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
d710: 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
d720: 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a   to this Table *
d730: 2f 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b  /.  u8 tabFlags;
d740: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
d750: 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20   of TF_* values 
d760: 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b  */.  u8 keyConf;
d770: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61            /* Wha
d780: 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20  t to do in case 
d790: 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f  of uniqueness co
d7a0: 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20  nflict on iPKey 
d7b0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
d7c0: 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
d7d0: 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66  E.  int addColOf
d7e0: 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73  fset;    /* Offs
d7f0: 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42  et in CREATE TAB
d800: 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61  LE stmt to add a
d810: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   new column */.#
d820: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
d830: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
d840: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f  LTABLE.  int nMo
d850: 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a  duleArg;      /*
d860: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
d870: 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75  ents to the modu
d880: 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  le */.  char **a
d890: 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20  zModuleArg;  /* 
d8a0: 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75  Text of all modu
d8b0: 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20  le args. [0] is 
d8c0: 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20  module name */. 
d8d0: 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65   VTable *pVTable
d8e0: 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ;     /* List of
d8f0: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e   VTable objects.
d900: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69   */.#endif.  Tri
d910: 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
d920: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69    /* List of tri
d930: 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20  ggers stored in 
d940: 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68  pSchema */.  Sch
d950: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
d960: 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74    /* Schema that
d970: 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74   contains this t
d980: 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  able */.  Table 
d990: 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f  *pNextZombie;  /
d9a0: 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61  * Next on the Pa
d9b0: 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c  rse.pZombieTab l
d9c0: 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
d9d0: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
d9e0: 66 6f 72 20 54 61 62 65 2e 74 61 62 46 6c 61 67  for Tabe.tabFlag
d9f0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  s..*/.#define TF
da00: 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20  _Readonly       
da10: 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64   0x01    /* Read
da20: 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62  -only system tab
da30: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
da40: 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20  _Ephemeral      
da50: 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65   0x02    /* An e
da60: 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
da70: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
da80: 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30  PrimaryKey   0x0
da90: 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61  4    /* Table ha
daa0: 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20  s a primary key 
dab0: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75  */.#define TF_Au
dac0: 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78  toincrement   0x
dad0: 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
dae0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
daf0: 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
db00: 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74  .#define TF_Virt
db10: 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31 30  ual         0x10
db20: 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74      /* Is a virt
db30: 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 0a 2f  ual table */.../
db40: 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
db50: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
db60: 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72  a table is a vir
db70: 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69  tual table.  Thi
db80: 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20  s is.** done as 
db90: 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20  a macro so that 
dba0: 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d  it will be optim
dbb0: 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69  ized out when vi
dbc0: 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73  rtual.** table s
dbd0: 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65  upport is omitte
dbe0: 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64  d from the build
dbf0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
dc00: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
dc10: 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
dc20: 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
dc30: 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67    (((X)->tabFlag
dc40: 73 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21  s & TF_Virtual)!
dc50: 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  =0).#  define Is
dc60: 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
dc70: 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
dc80: 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
dc90: 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64  )!=0).#else.#  d
dca0: 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
dcb0: 58 29 20 20 20 20 20 20 30 0a 23 20 20 64 65 66  X)      0.#  def
dcc0: 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
dcd0: 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  mn(X) 0.#endif..
dce0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69  /*.** Each forei
dcf0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
dd00: 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  t is an instance
dd10: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
dd20: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
dd30: 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79  ** A foreign key
dd40: 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77   is associated w
dd50: 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20  ith two tables. 
dd60: 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c   The "from" tabl
dd70: 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c  e is.** the tabl
dd80: 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
dd90: 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
dda0: 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74  lause that creat
ddb0: 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  es the foreign.*
ddc0: 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22  * key.  The "to"
ddd0: 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61   table is the ta
dde0: 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65  ble that is name
ddf0: 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e  d in the REFEREN
de00: 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43  CES clause..** C
de10: 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61  onsider this exa
de20: 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mple:.**.**     
de30: 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31  CREATE TABLE ex1
de40: 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54  (.**       a INT
de50: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
de60: 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54  ,.**       b INT
de70: 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20  EGER CONSTRAINT 
de80: 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65  fk1 REFERENCES e
de90: 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a  x2(x).**     );.
dea0: 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67  **.** For foreig
deb0: 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65  n key "fk1", the
dec0: 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22   from-table is "
ded0: 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d  ex1" and the to-
dee0: 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a  table is "ex2"..
def0: 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52  **.** Each REFER
df00: 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e  ENCES clause gen
df10: 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e  erates an instan
df20: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
df30: 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
df40: 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68   which is attach
df50: 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74  ed to the from-t
df60: 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61  able.  The to-ta
df70: 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69  ble need not exi
df80: 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66  st when.** the f
df90: 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65  rom-table is cre
dfa0: 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74  ated.  The exist
dfb0: 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74  ence of the to-t
dfc0: 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63  able is not chec
dfd0: 6b 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ked..*/.struct F
dfe0: 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70  Key {.  Table *p
dff0: 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62  From;     /* Tab
e000: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
e010: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
e020: 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29  use (aka: Child)
e030: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
e040: 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20  tFrom;  /* Next 
e050: 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e 20 70  foreign key in p
e060: 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a  From */.  char *
e070: 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  zTo;        /* N
e080: 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61  ame of table tha
e090: 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73  t the key points
e0a0: 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74   to (aka: Parent
e0b0: 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
e0c0: 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74  xtTo;    /* Next
e0d0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20   foreign key on 
e0e0: 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20  table named zTo 
e0f0: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76  */.  FKey *pPrev
e100: 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f  To;    /* Previo
e110: 75 73 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f  us foreign key o
e120: 6e 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54  n table named zT
e130: 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b  o */.  int nCol;
e140: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
e150: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
e160: 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f   this key */.  /
e170: 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31  * EV: R-30323-21
e180: 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65  917 */.  u8 isDe
e190: 66 65 72 72 65 64 3b 20 20 20 20 2f 2a 20 54 72  ferred;    /* Tr
e1a0: 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74  ue if constraint
e1b0: 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66   checking is def
e1c0: 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49  erred till COMMI
e1d0: 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f  T */.  u8 aActio
e1e0: 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 2f  n[2];          /
e1f0: 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20  * ON DELETE and 
e200: 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e  ON UPDATE action
e210: 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  s, respectively 
e220: 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70  */.  Trigger *ap
e230: 54 72 69 67 67 65 72 5b 32 5d 3b 20 20 2f 2a 20  Trigger[2];  /* 
e240: 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63  Triggers for aAc
e250: 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a  tion[] actions *
e260: 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d  /.  struct sColM
e270: 61 70 20 7b 20 20 2f 2a 20 4d 61 70 70 69 6e 67  ap {  /* Mapping
e280: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70   of columns in p
e290: 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  From to columns 
e2a0: 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e  in zTo */.    in
e2b0: 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20  t iFrom;        
e2c0: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c   /* Index of col
e2d0: 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a  umn in pFrom */.
e2e0: 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20      char *zCol; 
e2f0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
e300: 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e  f column in zTo.
e310: 20 20 49 66 20 30 20 75 73 65 20 50 52 49 4d 41    If 0 use PRIMA
e320: 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43  RY KEY */.  } aC
e330: 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 2f 2a  ol[1];        /*
e340: 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
e350: 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75  ach of nCol colu
e360: 6d 6e 20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  mn s */.};../*.*
e370: 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  * SQLite support
e380: 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  s many different
e390: 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65   ways to resolve
e3a0: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a   a constraint.**
e3b0: 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43   error.  ROLLBAC
e3c0: 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  K processing mea
e3d0: 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72  ns that a constr
e3e0: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a  aint violation.*
e3f0: 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65  * causes the ope
e400: 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
e410: 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f  s to fail and fo
e420: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  r the current tr
e430: 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20  ansaction.** to 
e440: 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
e450: 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e   ABORT processin
e460: 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72  g means the oper
e470: 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
e480: 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e  .** fails and an
e490: 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  y prior changes 
e4a0: 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70  from that one op
e4b0: 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b  eration are back
e4c0: 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74  ed out,.** but t
e4d0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
e4e0: 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63  s not rolled bac
e4f0: 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73  k.  FAIL process
e500: 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a  ing means that.*
e510: 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  * the operation 
e520: 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70  in progress stop
e530: 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e  s and returns an
e540: 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75   error code.  Bu
e550: 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67  t prior.** chang
e560: 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61  es due to the sa
e570: 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  me operation are
e580: 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20   not backed out 
e590: 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a  and no rollback.
e5a0: 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f  ** occurs.  IGNO
e5b0: 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  RE means that th
e5c0: 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77  e particular row
e5d0: 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
e5e0: 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
e5f0: 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65  rror is not inse
e600: 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e  rted or updated.
e610: 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
e620: 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
e630: 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ror.** is return
e640: 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61  ed.  REPLACE mea
e650: 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74  ns that preexist
e660: 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77  ing database row
e670: 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a  s that caused.**
e680: 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
e690: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
e6a0: 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68  re removed so th
e6b0: 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72  at the new inser
e6c0: 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63  t or.** update c
e6d0: 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f  an proceed.  Pro
e6e0: 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
e6f0: 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69  s and no error i
e700: 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a  s reported..**.*
e710: 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e  * RESTRICT, SETN
e720: 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45  ULL, and CASCADE
e730: 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f   actions apply o
e740: 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b  nly to foreign k
e750: 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54  eys..** RESTRICT
e760: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
e770: 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49  ABORT for IMMEDI
e780: 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ATE foreign keys
e790: 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65   and the.** same
e7a0: 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72   as ROLLBACK for
e7b0: 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20   DEFERRED keys. 
e7c0: 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74   SETNULL means t
e7d0: 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  hat the foreign.
e7e0: 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f  ** key is set to
e7f0: 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20   NULL.  CASCADE 
e800: 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c  means that a DEL
e810: 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66  ETE or UPDATE of
e820: 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63   the.** referenc
e830: 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  ed table row is 
e840: 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20  propagated into 
e850: 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c  the row that hol
e860: 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67  ds the.** foreig
e870: 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68  n key..** .** Th
e880: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62  e following symb
e890: 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20  olic values are 
e8a0: 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77  used to record w
e8b0: 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20  hich type.** of 
e8c0: 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a  action to take..
e8d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f  */.#define OE_No
e8e0: 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68  ne     0   /* Th
e8f0: 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72  ere is no constr
e900: 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f  aint to check */
e910: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c  .#define OE_Roll
e920: 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c  back 1   /* Fail
e930: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   the operation a
e940: 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  nd rollback the 
e950: 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
e960: 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20  define OE_Abort 
e970: 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f     2   /* Back o
e980: 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64  ut changes but d
e990: 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72  o no rollback tr
e9a0: 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
e9b0: 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20  fine OE_Fail    
e9c0: 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65   3   /* Stop the
e9d0: 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c   operation but l
e9e0: 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63  eave all prior c
e9f0: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
ea00: 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20  e OE_Ignore   4 
ea10: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20    /* Ignore the 
ea20: 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f  error. Do not do
ea30: 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55   the INSERT or U
ea40: 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
ea50: 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20   OE_Replace  5  
ea60: 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74   /* Delete exist
ea70: 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ing record, then
ea80: 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50   do INSERT or UP
ea90: 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  DATE */..#define
eaa0: 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20   OE_Restrict 6  
eab0: 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72   /* OE_Abort for
eac0: 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52   IMMEDIATE, OE_R
ead0: 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45  ollback for DEFE
eae0: 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  RRED */.#define 
eaf0: 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20  OE_SetNull  7   
eb00: 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
eb10: 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
eb20: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
eb30: 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20  OE_SetDflt  8   
eb40: 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
eb50: 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
eb60: 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  its default */.#
eb70: 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64  define OE_Cascad
eb80: 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64  e  9   /* Cascad
eb90: 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f  e the changes */
eba0: 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66  ..#define OE_Def
ebb0: 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20  ault  10  /* Do 
ebc0: 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66  whatever the def
ebd0: 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a  ault action is *
ebe0: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  /.../*.** An ins
ebf0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
ec00: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
ec10: 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
ec20: 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
ec30: 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64  ent to sqlite3Vd
ec40: 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64  beKeyCompare and
ec50: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   is used to cont
ec60: 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70  rol the .** comp
ec70: 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77  arison of the tw
ec80: 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a  o index keys..**
ec90: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53  .** Note that aS
eca0: 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61  ortOrder[] and a
ecb0: 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65  Coll[] have nFie
ecc0: 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65  ld+1 slots.  The
ecd0: 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64  re.** are nField
ece0: 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63   slots for the c
ecf0: 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64  olumns of an ind
ed00: 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72  ex then one extr
ed10: 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68  a slot.** for th
ed20: 65 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65  e rowid at the e
ed30: 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65  nd..*/.struct Ke
ed40: 79 49 6e 66 6f 20 7b 0a 20 20 73 71 6c 69 74 65  yInfo {.  sqlite
ed50: 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
ed60: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   The database co
ed70: 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  nnection */.  u8
ed80: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
ed90: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
eda0: 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20  ng - one of the 
edb0: 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75  SQLITE_UTF* valu
edc0: 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  es */.  u16 nFie
edd0: 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ld;         /* M
ede0: 61 78 69 6d 75 6d 20 69 6e 64 65 78 20 66 6f 72  aximum index for
edf0: 20 61 43 6f 6c 6c 5b 5d 20 61 6e 64 20 61 53 6f   aColl[] and aSo
ee00: 72 74 4f 72 64 65 72 5b 5d 20 2a 2f 0a 20 20 75  rtOrder[] */.  u
ee10: 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
ee20: 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72     /* Sort order
ee30: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
ee40: 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  . */.  CollSeq *
ee50: 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f  aColl[1];  /* Co
ee60: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
ee70: 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f   for each term o
ee80: 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a  f the key */.};.
ee90: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
eea0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
eeb0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f  ing structure ho
eec0: 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lds information 
eed0: 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69 6e 67 6c  about a.** singl
eee0: 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64 20 74  e index record t
eef0: 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20  hat has already 
ef00: 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20  been parsed out 
ef10: 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a  into individual.
ef20: 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  ** values..**.**
ef30: 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20   A record is an 
ef40: 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74  object that cont
ef50: 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
ef60: 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e   fields of data.
ef70: 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20  .** Records are 
ef80: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
ef90: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74  e content of a t
efa0: 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20  able row and to 
efb0: 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79  store.** the key
efc0: 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41   of an index.  A
efd0: 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f   blob encoding o
efe0: 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63 72  f a record is cr
eff0: 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  eated by.** the 
f000: 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  OP_MakeRecord op
f010: 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42 45  code of the VDBE
f020: 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d   and is disassem
f030: 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f  bled by the.** O
f040: 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e  P_Column opcode.
f050: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
f060: 63 74 75 72 65 20 68 6f 6c 64 73 20 61 20 72 65  cture holds a re
f070: 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c  cord that has al
f080: 72 65 61 64 79 20 62 65 65 6e 20 64 69 73 61 73  ready been disas
f090: 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20  sembled.** into 
f0a0: 69 74 73 20 63 6f 6e 73 74 69 74 75 65 6e 74 20  its constituent 
f0b0: 66 69 65 6c 64 73 2e 0a 2a 2f 0a 73 74 72 75 63  fields..*/.struc
f0c0: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
f0d0: 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b   {.  KeyInfo *pK
f0e0: 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c  eyInfo;  /* Coll
f0f0: 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f  ation and sort-o
f100: 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  rder information
f110: 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64   */.  u16 nField
f120: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
f130: 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
f140: 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 75  n apMem[] */.  u
f150: 38 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  8 flags;        
f160: 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 73 65     /* Boolean se
f170: 74 74 69 6e 67 73 2e 20 20 55 4e 50 41 43 4b 45  ttings.  UNPACKE
f180: 44 5f 2e 2e 2e 20 62 65 6c 6f 77 20 2a 2f 0a 20  D_... below */. 
f190: 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20 20   i64 rowid;     
f1a0: 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
f1b0: 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f  UNPACKED_PREFIX_
f1c0: 53 45 41 52 43 48 20 2a 2f 0a 20 20 4d 65 6d 20  SEARCH */.  Mem 
f1d0: 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *aMem;          
f1e0: 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a  /* Values */.};.
f1f0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
f200: 61 6c 75 65 73 20 6f 66 20 55 6e 70 61 63 6b 65  alues of Unpacke
f210: 64 52 65 63 6f 72 64 2e 66 6c 61 67 73 0a 2a 2f  dRecord.flags.*/
f220: 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45  .#define UNPACKE
f230: 44 5f 49 4e 43 52 4b 45 59 20 20 20 20 20 20 20  D_INCRKEY       
f240: 30 78 30 31 20 20 2f 2a 20 4d 61 6b 65 20 74 68  0x01  /* Make th
f250: 69 73 20 6b 65 79 20 61 6e 20 65 70 73 69 6c 6f  is key an epsilo
f260: 6e 20 6c 61 72 67 65 72 20 2a 2f 0a 23 64 65 66  n larger */.#def
f270: 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  ine UNPACKED_PRE
f280: 46 49 58 5f 4d 41 54 43 48 20 20 30 78 30 32 20  FIX_MATCH  0x02 
f290: 20 2f 2a 20 41 20 70 72 65 66 69 78 20 6d 61 74   /* A prefix mat
f2a0: 63 68 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ch is considered
f2b0: 20 4f 4b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55   OK */.#define U
f2c0: 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53  NPACKED_PREFIX_S
f2d0: 45 41 52 43 48 20 30 78 30 34 20 20 2f 2a 20 49  EARCH 0x04  /* I
f2e0: 67 6e 6f 72 65 20 66 69 6e 61 6c 20 28 72 6f 77  gnore final (row
f2f0: 69 64 29 20 66 69 65 6c 64 20 2a 2f 0a 0a 2f 2a  id) field */../*
f300: 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64  .** Each SQL ind
f310: 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ex is represente
f320: 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61  d in memory by a
f330: 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
f340: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
f350: 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
f360: 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  The columns of t
f370: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72  he table that ar
f380: 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  e to be indexed 
f390: 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a  are described.**
f3a0: 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e   by the aiColumn
f3b0: 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73  [] field of this
f3c0: 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72   structure.  For
f3d0: 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73   example, suppos
f3e0: 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65  e.** we have the
f3f0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65   following table
f400: 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a   and index:.**.*
f410: 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
f420: 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63  LE Ex1(c1 int, c
f430: 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b  2 int, c3 text);
f440: 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49  .**     CREATE I
f450: 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28  NDEX Ex2 ON Ex1(
f460: 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e  c3,c1);.**.** In
f470: 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63   the Table struc
f480: 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20  ture describing 
f490: 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63  Ex1, nCol==3 bec
f4a0: 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a  ause there are.*
f4b0: 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20  * three columns 
f4c0: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
f4d0: 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75  n the Index stru
f4e0: 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
f4f0: 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e  .** Ex2, nColumn
f500: 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74  ==2 since 2 of t
f510: 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  he 3 columns of 
f520: 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e  Ex1 are indexed.
f530: 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
f540: 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c   aiColumn is {2,
f550: 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30   0}.  aiColumn[0
f560: 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65  ]==2 because the
f570: 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d   .** first colum
f580: 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
f590: 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c3) has an inde
f5a0: 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43  x of 2 in Ex1.aC
f5b0: 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63  ol[]..** The sec
f5c0: 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  ond column to be
f5d0: 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61   indexed (c1) ha
f5e0: 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20  s an index of 0 
f5f0: 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d  in.** Ex1.aCol[]
f600: 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f  , hence Ex2.aiCo
f610: 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a  lumn[1]==0..**.*
f620: 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72  * The Index.onEr
f630: 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d  ror field determ
f640: 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20  ines whether or 
f650: 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20  not the indexed 
f660: 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20  columns.** must 
f670: 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68  be unique and wh
f680: 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79  at to do if they
f690: 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20   are not.  When 
f6a0: 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45  Index.onError=OE
f6b0: 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61  _None,.** it mea
f6c0: 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61  ns this is not a
f6d0: 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20   unique index.  
f6e0: 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  Otherwise it is 
f6f0: 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a  a unique index.*
f700: 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  * and the value 
f710: 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  of Index.onError
f720: 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68   indicate the wh
f730: 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ich conflict res
f740: 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f  olution .** algo
f750: 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20  rithm to employ 
f760: 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65  whenever an atte
f770: 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69  mpt is made to i
f780: 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71  nsert a non-uniq
f790: 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a  ue.** element..*
f7a0: 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b  /.struct Index {
f7b0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
f7c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
f7d0: 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65  ame of this inde
f7e0: 78 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69 43 6f  x */.  int *aiCo
f7f0: 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
f800: 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73  /* Which columns
f810: 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69   are used by thi
f820: 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73  s index.  1st is
f830: 20 30 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20   0 */.  tRowcnt 
f840: 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20  *aiRowEst;      
f850: 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45   /* From ANALYZE
f860: 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65  : Est. rows sele
f870: 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c  cted by each col
f880: 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  umn */.  Table *
f890: 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  pTable;         
f8a0: 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62    /* The SQL tab
f8b0: 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  le being indexed
f8c0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
f8d0: 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Aff;           /
f8e0: 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
f8f0: 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
f900: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
f910: 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b  .  Index *pNext;
f920: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
f930: 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73  he next index as
f940: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
f950: 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a  e same table */.
f960: 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
f970: 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63  a;         /* Sc
f980: 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
f990: 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
f9a0: 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
f9b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20           /* for 
f9c0: 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75  each column: Tru
f9d0: 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d  e==DESC, False==
f9e0: 41 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ASC */.  char **
f9f0: 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20  azColl;         
fa00: 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f    /* Array of co
fa10: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
fa20: 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78   names for index
fa30: 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72   */.  Expr *pPar
fa40: 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f  tIdxWhere;     /
fa50: 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  * WHERE clause f
fa60: 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63  or partial indic
fa70: 65 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  es */.  int tnum
fa80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
fa90: 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74   /* DB Page cont
faa0: 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74  aining root of t
fab0: 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
fac0: 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  16 nColumn;     
fad0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
fae0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
faf0: 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 74 68  table used by th
fb00: 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  is index */.  u8
fb10: 20 69 53 63 61 6e 52 61 74 69 6f 3b 20 20 20 20   iScanRatio;    
fb20: 20 20 20 20 20 20 20 2f 2a 20 53 63 61 6e 20 72         /* Scan r
fb30: 61 74 65 20 72 65 6c 61 74 69 76 65 20 74 6f 20  ate relative to 
fb40: 74 68 65 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a  the main table *
fb50: 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6f 6e 45  /.  unsigned onE
fb60: 72 72 6f 72 3a 34 3b 20 20 20 20 20 20 2f 2a 20  rror:4;      /* 
fb70: 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e  OE_Abort, OE_Ign
fb80: 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c  ore, OE_Replace,
fb90: 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20   or OE_None */. 
fba0: 20 75 6e 73 69 67 6e 65 64 20 61 75 74 6f 49 6e   unsigned autoIn
fbb0: 64 65 78 3a 32 3b 20 20 20 20 2f 2a 20 31 3d 3d  dex:2;    /* 1==
fbc0: 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41  UNIQUE, 2==PRIMA
fbd0: 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54  RY KEY, 0==CREAT
fbe0: 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73  E INDEX */.  uns
fbf0: 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64  igned bUnordered
fc00: 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69  :1;   /* Use thi
fc10: 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f  s index for == o
fc20: 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c  r IN queries onl
fc30: 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  y */.  unsigned 
fc40: 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20  uniqNotNull:1;  
fc50: 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51 55  /* True if UNIQU
fc60: 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66  E and NOT NULL f
fc70: 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a  or all columns *
fc80: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
fc90: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
fca0: 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d  STAT4.  int nSam
fcb0: 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ple;            
fcc0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c   /* Number of el
fcd0: 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c  ements in aSampl
fce0: 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  e[] */.  int nSa
fcf0: 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20  mpleCol;        
fd00: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64    /* Size of Ind
fd10: 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20  exSample.anEq[] 
fd20: 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74  and so on */.  t
fd30: 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20  Rowcnt *aAvgEq; 
fd40: 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61          /* Avera
fd50: 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f  ge nEq values fo
fd60: 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53  r keys not in aS
fd70: 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78  ample */.  Index
fd80: 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b  Sample *aSample;
fd90: 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f      /* Samples o
fda0: 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  f the left-most 
fdb0: 6b 65 79 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  key */.#endif.};
fdc0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d  ../*.** Each sam
fdd0: 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ple stored in th
fde0: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
fdf0: 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
fe00: 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a  ted in memory .*
fe10: 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74  * using a struct
fe20: 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65  ure of this type
fe30: 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  .  See documenta
fe40: 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20  tion at the top 
fe50: 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a  of the.** analyz
fe60: 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20  e.c source file 
fe70: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
fe80: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
fe90: 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
fea0: 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20  e {.  void *p;  
feb0: 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
fec0: 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65  er to sampled re
fed0: 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  cord */.  int n;
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
fef0: 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e  ize of record in
ff00: 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77   bytes */.  tRow
ff10: 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a  cnt *anEq;    /*
ff20: 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
ff30: 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b  rows where the k
ff40: 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73  ey equals this s
ff50: 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
ff60: 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20  nt *anLt;    /* 
ff70: 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
ff80: 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73  ows where key is
ff90: 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
ffa0: 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
ffb0: 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a  cnt *anDLt;   /*
ffc0: 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
ffd0: 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65  distinct keys le
ffe0: 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
fff0: 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ple */.};../*.**
10000 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69   Each token comi
10010 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65  ng out of the le
10020 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  xer is an instan
10030 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74  ce of.** this st
10040 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73  ructure.  Tokens
10050 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61   are also used a
10060 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70  s part of an exp
10070 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e  ression..**.** N
10080 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d  ote if Token.z==
10090 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e  0 then Token.dyn
100a0 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65   and Token.n are
100b0 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a   undefined and.*
100c0 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61  * may contain ra
100d0 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f  ndom values.  Do
100e0 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73   not make any as
100f0 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20  sumptions about 
10100 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64  Token.dyn.** and
10110 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f   Token.n when To
10120 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72  ken.z==0..*/.str
10130 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f  uct Token {.  co
10140 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  nst char *z;    
10150 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
10160 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c  token.  Not NULL
10170 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a  -terminated! */.
10180 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e    unsigned int n
10190 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  ;    /* Number o
101a0 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  f characters in 
101b0 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b  this token */.};
101c0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
101d0 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
101e0 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
101f0 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
10200 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
10210 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45   code for a SELE
10220 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  CT that contains
10230 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10240 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45  ions..**.** If E
10250 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43  xpr.op==TK_AGG_C
10260 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f  OLUMN or TK_AGG_
10270 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78  FUNCTION then Ex
10280 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61  pr.pAggInfo is a
10290 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  .** pointer to t
102a0 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
102b0 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  The Expr.iColumn
102c0 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e   field is the in
102d0 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66  dex in.** AggInf
102e0 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49  o.aCol[] or AggI
102f0 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69  nfo.aFunc[] of i
10300 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
10310 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
10320 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e   code for that n
10330 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e  ode..**.** AggIn
10340 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20  fo.pGroupBy and 
10350 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45  AggInfo.aFunc.pE
10360 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65  xpr point to fie
10370 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a  lds within the.*
10380 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63  * original Selec
10390 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  t structure that
103a0 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53   describes the S
103b0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
103c0 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64    These.** field
103d0 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  s do not need to
103e0 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64   be freed when d
103f0 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20  eallocating the 
10400 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72  AggInfo structur
10410 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67  e..*/.struct Agg
10420 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65  Info {.  u8 dire
10430 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ctMode;         
10440 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65   /* Direct rende
10450 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20  ring mode means 
10460 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74  take data direct
10470 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly.             
10480 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
10490 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c  from source tabl
104a0 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66  es rather than f
104b0 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73  rom accumulators
104c0 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74   */.  u8 useSort
104d0 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a  ingIdx;       /*
104e0 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c   In direct mode,
104f0 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73   reference the s
10500 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74  orting index rat
10510 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  her.            
10520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
10530 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65   than the source
10540 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
10550 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  sortingIdx;     
10560 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
10570 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74  mber of the sort
10580 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
10590 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61  nt sortingIdxPTa
105a0 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72  b;     /* Cursor
105b0 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64   number of pseud
105c0 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  o-table */.  int
105d0 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b   nSortingColumn;
105e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
105f0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
10600 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
10610 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
10620 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54  roupBy;     /* T
10630 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75  he group by clau
10640 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  se */.  struct A
10650 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20  ggInfo_col {    
10660 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* For each colu
10670 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63  mn used in sourc
10680 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20  e tables */.    
10690 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
106a0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72           /* Sour
106b0 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
106c0 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
106d0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
106e0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
106f0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
10700 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e  .    int iColumn
10710 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
10720 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77   Column number w
10730 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65  ithin the source
10740 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
10750 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b  t iSorterColumn;
10760 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
10770 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73   number in the s
10780 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
10790 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
107b0 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
107c0 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
107d0 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
107e0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
107f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
10800 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73  original express
10810 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c  ion */.  } *aCol
10820 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b  ;.  int nColumn;
10830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
10840 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e  umber of used en
10850 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20  tries in aCol[] 
10860 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75  */.  int nAccumu
10870 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  lator;       /* 
10880 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
10890 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f  s that show thro
108a0 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75  ugh to the outpu
108b0 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
108c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
108d0 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d  Additional colum
108e0 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79  ns are used only
108f0 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74   as parameters t
10900 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o.              
10910 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61              ** a
10920 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
10930 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  ns */.  struct A
10940 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20  ggInfo_func {   
10950 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72  /* For each aggr
10960 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a  egate function *
10970 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
10980 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
10990 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63  * Expression enc
109a0 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69  oding the functi
109b0 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65  on */.    FuncDe
109c0 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20  f *pFunc;       
109d0 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67     /* The aggreg
109e0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70  ate function imp
109f0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
10a00 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
10a10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
10a20 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
10a30 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
10a40 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69  mulator */.    i
10a50 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20  nt iDistinct;   
10a60 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d          /* Ephem
10a70 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20  eral table used 
10a80 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49  to enforce DISTI
10a90 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e  NCT */.  } *aFun
10aa0 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20  c;.  int nFunc; 
10ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10ac0 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
10ad0 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a  s in aFunc[] */.
10ae0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  };../*.** The da
10af0 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20  tatype ynVar is 
10b00 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  a signed integer
10b10 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20  , either 16-bit 
10b20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73  or 32-bit..** Us
10b30 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62  ually it is 16-b
10b40 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c  its.  But if SQL
10b50 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
10b60 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74  _NUMBER is great
10b70 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37  er.** than 32767
10b80 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65   we have to make
10b90 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d   it 32-bit.  16-
10ba0 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64  bit is preferred
10bb0 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75   because.** it u
10bc0 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20  ses less memory 
10bd0 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65  in the Expr obje
10be0 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62  ct, which is a b
10bf0 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a  ig memory user.*
10c00 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * in systems wit
10c10 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72  h lots of prepar
10c20 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20  ed statements.  
10c30 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74  And few applicat
10c40 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72  ions.** need mor
10c50 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20  e than about 10 
10c60 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e  or 20 variables.
10c70 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65    But some extre
10c80 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a  me users want.**
10c90 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65   to have prepare
10ca0 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  d statements wit
10cb0 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72  h over 32767 var
10cc0 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20  iables, and for 
10cd0 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69  them.** the opti
10ce0 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20  on is available 
10cf0 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  (at compile-time
10d00 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  )..*/.#if SQLITE
10d10 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
10d20 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65  MBER<=32767.type
10d30 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23  def i16 ynVar;.#
10d40 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74  else.typedef int
10d50 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a   ynVar;.#endif..
10d60 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20  /*.** Each node 
10d70 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
10d80 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72   in the parse tr
10d90 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  ee is an instanc
10da0 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
10db0 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78  ucture..**.** Ex
10dc0 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63  pr.op is the opc
10dd0 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72  ode. The integer
10de0 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f   parser token co
10df0 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a  des are reused.*
10e00 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72  * as opcodes her
10e10 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  e. For example, 
10e20 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e  the parser defin
10e30 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61  es TK_GE to be a
10e40 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64  n integer.** cod
10e50 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  e representing t
10e60 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72  he ">=" operator
10e70 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65  . This same inte
10e80 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73  ger code is reus
10e90 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65  ed.** to represe
10ea0 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74  nt the greater-t
10eb0 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20  han-or-equal-to 
10ec0 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20  operator in the 
10ed0 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72  expression.** tr
10ee0 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ee..**.** If the
10ef0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
10f00 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54  n SQL literal (T
10f10 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c  K_INTEGER, TK_FL
10f20 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a  OAT, TK_BLOB, .*
10f30 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c  * or TK_STRING),
10f40 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
10f50 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65   contains the te
10f60 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69  xt of the SQL li
10f70 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65  teral. If.** the
10f80 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
10f90 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41   variable (TK_VA
10fa0 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78  RIABLE), then Ex
10fb0 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
10fc0 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62  s the .** variab
10fd0 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79  le name. Finally
10fe0 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  , if the express
10ff0 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75  ion is an SQL fu
11000 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54  nction (TK_FUNCT
11010 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78  ION),.** then Ex
11020 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
11030 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
11040 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  e function..**.*
11050 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e  * Expr.pRight an
11060 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65  d Expr.pLeft are
11070 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
11080 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f  ght subexpressio
11090 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72  ns of a.** binar
110a0 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68  y operator. Eith
110b0 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62  er or both may b
110c0 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78  e NULL..**.** Ex
110d0 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20  pr.x.pList is a 
110e0 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74  list of argument
110f0 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  s if the express
11100 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75  ion is an SQL fu
11110 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53  nction,.** a CAS
11120 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20  E expression or 
11130 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e  an IN expression
11140 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c   of the form "<l
11150 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e  hs> IN (<y>, <z>
11160 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78  ...)"..** Expr.x
11170 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64  .pSelect is used
11180 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
11190 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65  on is a sub-sele
111a0 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73  ct or an express
111b0 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f  ion of.** the fo
111c0 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45  rm "<lhs> IN (SE
111d0 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74  LECT ...)". If t
111e0 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  he EP_xIsSelect 
111f0 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68  bit is set in th
11200 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20  e.** Expr.flags 
11210 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e  mask, then Expr.
11220 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
11230 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45  id. Otherwise, E
11240 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a  xpr.x.pList is .
11250 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20  ** valid..**.** 
11260 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  An expression of
11270 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20   the form ID or 
11280 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20  ID.ID refers to 
11290 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61  a column in a ta
112a0 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68  ble..** For such
112b0 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78   expressions, Ex
112c0 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20  pr.op is set to 
112d0 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78  TK_COLUMN and Ex
112e0 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20  pr.iTable is.** 
112f0 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73  the integer curs
11300 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56  or number of a V
11310 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  DBE cursor point
11320 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c  ing to that tabl
11330 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43  e and.** Expr.iC
11340 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c  olumn is the col
11350 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  umn number for t
11360 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75  he specific colu
11370 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65  mn.  If the.** e
11380 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65  xpression is use
11390 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e  d as a result in
113a0 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45   an aggregate SE
113b0 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a  LECT, then the.*
113c0 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20  * value is also 
113d0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78  stored in the Ex
113e0 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69  pr.iAgg column i
113f0 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  n the aggregate 
11400 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61  so that.** it ca
11410 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66  n be accessed af
11420 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74  ter all aggregat
11430 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e  es are computed.
11440 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
11450 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75  pression is an u
11460 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20  nbound variable 
11470 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69  marker (a questi
11480 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72  on mark .** char
11490 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65  acter '?' in the
114a0 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74   original SQL) t
114b0 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61  hen the Expr.iTa
114c0 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e  ble holds the in
114d0 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66  dex .** number f
114e0 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65  or that variable
114f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
11500 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
11510 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70  ubquery then Exp
11520 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  r.iColumn holds 
11530 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65  an integer.** re
11540 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f  gister number co
11550 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73  ntaining the res
11560 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75  ult of the subqu
11570 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ery.  If the.** 
11580 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61  subquery gives a
11590 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74   constant result
115a0 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  , then iTable is
115b0 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62   -1.  If the sub
115c0 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61  query.** gives a
115d0 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65   different answe
115e0 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74  r at different t
115f0 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74  imes during stat
11600 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67  ement processing
11610 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20  .** then iTable 
11620 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  is the address o
11630 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74  f a subroutine t
11640 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65  hat computes the
11650 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a   subquery..**.**
11660 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20   If the Expr is 
11670 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d  of type OP_Colum
11680 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  n, and the table
11690 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67   it is selecting
116a0 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69   from.** is a di
116b0 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20  sk table or the 
116c0 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74  "old.*" pseudo-t
116d0 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20  able, then pTab 
116e0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
116f0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
11700 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e  able definition.
11710 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f  .**.** ALLOCATIO
11720 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45  N NOTES:.**.** E
11730 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20  xpr objects can 
11740 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d  use a lot of mem
11750 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74  ory space in dat
11760 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54  abase schema.  T
11770 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65  o.** help reduce
11780 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d   memory requirem
11790 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20  ents, sometimes 
117a0 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77  an Expr object w
117b0 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61  ill be.** trunca
117c0 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64  ted.  And to red
117d0 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  uce the number o
117e0 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
117f0 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a  ions, sometimes.
11800 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45  ** two or more E
11810 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c  xpr objects will
11820 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
11830 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  single memory al
11840 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67  location,.** tog
11850 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e  ether with Expr.
11860 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a  zToken strings..
11870 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f  **.** If the EP_
11880 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54  Reduced and EP_T
11890 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61  okenOnly flags a
118a0 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61  re set when.** a
118b0 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73  n Expr object is
118c0 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65   truncated.  Whe
118d0 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  n EP_Reduced is 
118e0 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a  set, then all.**
118f0 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20   the child Expr 
11900 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45  objects in the E
11910 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78  xpr.pLeft and Ex
11920 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65  pr.pRight subtre
11930 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69  es.** are contai
11940 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73  ned within the s
11950 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ame memory alloc
11960 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f  ation.  Note, ho
11970 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74  wever, that.** t
11980 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45  he subtrees in E
11990 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45  xpr.x.pList or E
119a0 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72  xpr.x.pSelect ar
119b0 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74  e always separat
119c0 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  ely.** allocated
119d0 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
119e0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45  whether or not E
119f0 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
11a00 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
11a10 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
11a20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
11a30 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d  peration perform
11a40 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
11a50 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
11a60 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ty;         /* T
11a70 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74  he affinity of t
11a80 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69  he column or 0 i
11a90 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a  f not a column *
11aa0 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20  /.  u32 flags;  
11ab0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
11ac0 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50  rious flags.  EP
11ad0 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  _* See below */.
11ae0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68    union {.    ch
11af0 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20  ar *zToken;     
11b00 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61       /* Token va
11b10 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e  lue. Zero termin
11b20 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65  ated and dequote
11b30 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61  d */.    int iVa
11b40 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  lue;            
11b50 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  /* Non-negative 
11b60 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66  integer value if
11b70 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a   EP_IntValue */.
11b80 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20    } u;..  /* If 
11b90 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
11ba0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
11bb0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
11bc0 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
11bd0 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
11be0 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
11bf0 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
11c00 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
11c10 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
11c20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
11c30 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
11c40 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a  r malfunction. .
11c50 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
11c60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11c70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11c80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11c90 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72  *******/..  Expr
11ca0 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20   *pLeft;        
11cb0 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f     /* Left subno
11cc0 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52  de */.  Expr *pR
11cd0 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ight;          /
11ce0 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20  * Right subnode 
11cf0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
11d00 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
11d10 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e  ;     /* op = IN
11d20 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
11d30 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e  , CASE, FUNCTION
11d40 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20  , BETWEEN */.   
11d50 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
11d60 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53  ;     /* EP_xIsS
11d70 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49  elect and op = I
11d80 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
11d90 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f  T */.  } x;..  /
11da0 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
11db0 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
11dc0 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
11dd0 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
11de0 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
11df0 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
11e00 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
11e10 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
11e20 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
11e30 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
11e40 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
11e50 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
11e60 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
11e70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11e80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11e90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
11eb0 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
11ec0 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
11ed0 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
11ee0 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
11ef0 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
11f00 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
11f10 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
11f20 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
11f30 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
11f40 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
11f50 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
11f60 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
11f70 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
11f80 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
11f90 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
11fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fb0 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
11fc0 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
11fd0 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20  > old.          
11fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
11ff0 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20  * EP_Unlikely:  
12000 31 30 30 30 20 74 69 6d 65 73 20 6c 69 6b 65 6c  1000 times likel
12010 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72  ihood */.  ynVar
12020 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
12030 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
12040 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d  column index.  -
12050 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20  1 for rowid..   
12060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12070 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49        ** TK_VARI
12080 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e  ABLE: variable n
12090 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d  umber (always >=
120a0 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41   1). */.  i16 iA
120b0 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gg;             
120c0 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20   /* Which entry 
120d0 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f  in pAggInfo->aCo
120e0 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d  l[] or ->aFunc[]
120f0 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74   */.  i16 iRight
12100 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20  JoinTable;   /* 
12110 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20  If EP_FromJoin, 
12120 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20  the right table 
12130 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20  of the join */. 
12140 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20   u8 op2;        
12150 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45          /* TK_RE
12160 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c  GISTER: original
12170 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f   value of Expr.o
12180 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p.              
12190 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
121a0 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c  _COLUMN: the val
121b0 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f  ue of p5 for OP_
121c0 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  Column.         
121d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121e0 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  ** TK_AGG_FUNCTI
121f0 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74  ON: nesting dept
12200 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a  h */.  AggInfo *
12210 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a  pAggInfo;     /*
12220 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f   Used by TK_AGG_
12230 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47  COLUMN and TK_AG
12240 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20  G_FUNCTION */.  
12250 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
12260 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
12270 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78  for TK_COLUMN ex
12280 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b  pressions. */.};
12290 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
122a0 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65  owing are the me
122b0 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69  anings of bits i
122c0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
122d0 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
122e0 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20  ne EP_FromJoin  
122f0 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67  0x000001 /* Orig
12300 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20 6f 72 20  inated in ON or 
12310 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  USING clause of 
12320 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  a join */.#defin
12330 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20 30  e EP_Agg       0
12340 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61  x000002 /* Conta
12350 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
12360 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
12370 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ons */.#define E
12380 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78 30 30  P_Resolved  0x00
12390 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61 76 65  0004 /* IDs have
123a0 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74   been resolved t
123b0 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65  o COLUMNs */.#de
123c0 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20  fine EP_Error   
123d0 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 45 78    0x000008 /* Ex
123e0 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e  pression contain
123f0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72  s one or more er
12400 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rors */.#define 
12410 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30  EP_Distinct  0x0
12420 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61  00010 /* Aggrega
12430 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  te function with
12440 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
12450 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  d */.#define EP_
12460 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30 30  VarSelect 0x0000
12470 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73  20 /* pSelect is
12480 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74   correlated, not
12490 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65   constant */.#de
124a0 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65  fine EP_DblQuote
124b0 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f  d 0x000040 /* to
124c0 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e  ken.z was origin
124d0 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f  ally in "..." */
124e0 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69  .#define EP_Infi
124f0 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f  xFunc 0x000080 /
12500 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e  * True for an in
12510 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49  fix function: LI
12520 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f  KE, GLOB, etc */
12530 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c  .#define EP_Coll
12540 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20 2f  ate   0x000100 /
12550 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
12560 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65  a TK_COLLATE ope
12570 61 72 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  artor */.#define
12580 20 45 50 5f 46 69 78 65 64 44 65 73 74 20 30 78   EP_FixedDest 0x
12590 30 30 30 32 30 30 20 2f 2a 20 52 65 73 75 6c 74  000200 /* Result
125a0 20 6e 65 65 64 65 64 20 69 6e 20 61 20 73 70 65   needed in a spe
125b0 63 69 66 69 63 20 72 65 67 69 73 74 65 72 20 2a  cific register *
125c0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74  /.#define EP_Int
125d0 56 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20  Value  0x000400 
125e0 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
125f0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e   contained in u.
12600 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e  iValue */.#defin
12610 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30  e EP_xIsSelect 0
12620 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65  x000800 /* x.pSe
12630 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f  lect is valid (o
12640 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74  therwise x.pList
12650 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20   is) */.#define 
12660 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30  EP_Skip      0x0
12670 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45  01000 /* COLLATE
12680 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c  , AS, or UNLIKEL
12690 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  Y */.#define EP_
126a0 52 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30  Reduced   0x0020
126b0 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
126c0 74 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  t EXPR_REDUCEDSI
126d0 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
126e0 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65  .#define EP_Toke
126f0 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f  nOnly 0x004000 /
12700 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
12710 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
12720 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
12730 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63  define EP_Static
12740 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20      0x008000 /* 
12750 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e  Held in memory n
12760 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ot obtained from
12770 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65   malloc() */.#de
12780 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e  fine EP_MemToken
12790 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65    0x010000 /* Ne
127a0 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46  ed to sqlite3DbF
127b0 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65  ree() Expr.zToke
127c0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
127d0 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30  NoReduce  0x0200
127e0 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50  00 /* Cannot EXP
127f0 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73  RDUP_REDUCE this
12800 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65   Expr */.#define
12810 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78   EP_Unlikely  0x
12820 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65  040000 /* unlike
12830 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f  ly() or likeliho
12840 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  od() function */
12850 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ../*.** These ma
12860 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64  cros can be used
12870 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f   to test, set, o
12880 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20  r clear bits in 
12890 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61  the .** Expr.fla
128a0 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
128b0 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70  fine ExprHasProp
128c0 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28  erty(E,P)     ((
128d0 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21  (E)->flags&(P))!
128e0 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  =0).#define Expr
128f0 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45  HasAllProperty(E
12900 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67  ,P)  (((E)->flag
12910 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
12920 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70  fine ExprSetProp
12930 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45  erty(E,P)     (E
12940 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  )->flags|=(P).#d
12950 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50  efine ExprClearP
12960 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28  roperty(E,P)   (
12970 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  E)->flags&=~(P).
12980 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56  ./* The ExprSetV
12990 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63  VAProperty() mac
129a0 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56  ro is used for V
129b0 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
129c0 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20  idation,.** and 
129d0 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e  Accreditation on
129e0 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69  ly.  It works li
129f0 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ke ExprSetProper
12a00 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a  ty() during VVA.
12a10 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74  ** processes but
12a20 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20   is a no-op for 
12a30 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66  delivery..*/.#if
12a40 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
12a50 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
12a60 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
12a70 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28  )  (E)->flags|=(
12a80 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
12a90 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
12aa0 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66  erty(E,P).#endif
12ab0 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
12ac0 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
12ad0 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
12ae0 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f  required by a no
12af0 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74  rmal Expr .** st
12b00 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74  ruct, an Expr st
12b10 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
12b20 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65  _Reduced flag se
12b30 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20  t in Expr.flags 
12b40 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20  .** and an Expr 
12b50 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
12b60 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
12b70 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  g set..*/.#defin
12b80 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20  e EXPR_FULLSIZE 
12b90 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
12ba0 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20  (Expr)          
12bb0 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f   /* Full size */
12bc0 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45  .#define EXPR_RE
12bd0 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20  DUCEDSIZE       
12be0 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69   offsetof(Expr,i
12bf0 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f  Table)  /* Commo
12c00 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64  n features */.#d
12c10 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e  efine EXPR_TOKEN
12c20 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66  ONLYSIZE      of
12c30 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66  fsetof(Expr,pLef
12c40 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65  t)   /* Fewer fe
12c50 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  atures */../*.**
12c60 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
12c70 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72   the sqlite3Expr
12c80 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  Dup() function. 
12c90 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63  See the header c
12ca0 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65  omment .** above
12cb0 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
12cc0 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a  ) for details..*
12cd0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55  /.#define EXPRDU
12ce0 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20  P_REDUCE        
12cf0 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64   0x0001  /* Used
12d00 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78   reduced-size Ex
12d10 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a  pr nodes */../*.
12d20 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  ** A list of exp
12d30 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20  ressions.  Each 
12d40 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f  expression may o
12d50 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61  ptionally have a
12d60 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78  .** name.  An ex
12d70 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74  pr/name combinat
12d80 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20  ion can be used 
12d90 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c  in several ways,
12da0 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20   such.** as the 
12db0 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53  list of "expr AS
12dc0 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c   ID" fields foll
12dd0 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22  owing a "SELECT"
12de0 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69   or in the.** li
12df0 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72  st of "ID = expr
12e00 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50  " items in an UP
12e10 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66  DATE.  A list of
12e20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e   expressions can
12e30 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64  .** also be used
12e40 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
12e50 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20   to a function, 
12e60 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68  in which case th
12e70 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65  e a.zName.** fie
12e80 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  ld is not used..
12e90 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74  **.** By default
12ea0 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20   the Expr.zSpan 
12eb0 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75  field holds a hu
12ec0 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73  man-readable des
12ed0 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  cription of.** t
12ee0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  he expression th
12ef0 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68  at is used in th
12f00 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
12f10 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61  error messages a
12f20 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62  nd.** column lab
12f30 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61  els.  In this ca
12f40 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69  se, Expr.zSpan i
12f50 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20  s typically the 
12f60 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c  text of a.** col
12f70 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61  umn expression a
12f80 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61  s it exists in a
12f90 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
12fa0 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a  t.  However, if.
12fb0 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61  ** the bSpanIsTa
12fc0 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  b flag is set, t
12fd0 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65  hen zSpan is ove
12fe0 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20  rloaded to mean 
12ff0 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74  the name.** of t
13000 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
13010 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41   in the form: DA
13020 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c  TABASE.TABLE.COL
13030 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72  UMN.  This later
13040 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64  .** form is used
13050 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75   for name resolu
13060 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64  tion with nested
13070 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a   FROM clauses..*
13080 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  /.struct ExprLis
13090 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b  t {.  int nExpr;
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
130b0 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73  Number of expres
130c0 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73  sions on the lis
130d0 74 20 2a 2f 0a 20 20 69 6e 74 20 69 45 43 75 72  t */.  int iECur
130e0 73 6f 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  sor;          /*
130f0 20 56 44 42 45 20 43 75 72 73 6f 72 20 61 73 73   VDBE Cursor ass
13100 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
13110 73 20 45 78 70 72 4c 69 73 74 20 2a 2f 0a 20 20  s ExprList */.  
13120 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f  struct ExprList_
13130 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61  item { /* For ea
13140 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
13150 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20   the list */.   
13160 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
13170 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
13180 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
13190 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ons */.    char 
131a0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
131b0 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f     /* Token asso
131c0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
131d0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
131e0 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20     char *zSpan; 
131f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72             /* Or
13200 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
13210 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  he expression */
13220 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65  .    u8 sortOrde
13230 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
13240 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20  1 for DESC or 0 
13250 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75  for ASC */.    u
13260 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b  nsigned done :1;
13270 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67         /* A flag
13280 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65   to indicate whe
13290 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  n processing is 
132a0 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20  finished */.    
132b0 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73  unsigned bSpanIs
132c0 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e  Tab :1; /* zSpan
132d0 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e   holds DB.TABLE.
132e0 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 31  COLUMN */.    u1
132f0 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20  6 iOrderByCol;  
13300 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44        /* For ORD
13310 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75  ER BY, column nu
13320 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73  mber in result s
13330 65 74 20 2a 2f 0a 20 20 20 20 75 31 36 20 69 41  et */.    u16 iA
13340 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
13350 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20    /* Index into 
13360 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66  Parse.aAlias[] f
13370 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20  or zName */.  } 
13380 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *a;             
13390 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20       /* Alloc a 
133a0 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65  power of two gre
133b0 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f  ater or equal to
133c0 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   nExpr */.};../*
133d0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
133e0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
133f0 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  e is used by the
13400 20 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72   parser to recor
13410 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61  d both.** the pa
13420 72 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20  rse tree for an 
13430 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74  expression and t
13440 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74  he span of input
13450 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20   text for an.** 
13460 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73  expression..*/.s
13470 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b  truct ExprSpan {
13480 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20  .  Expr *pExpr; 
13490 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
134a0 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65  expression parse
134b0 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74   tree */.  const
134c0 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20   char *zStart;  
134d0 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61 63   /* First charac
134e0 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78  ter of input tex
134f0 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  t */.  const cha
13500 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20  r *zEnd;     /* 
13510 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20 70 61  One character pa
13520 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e  st the end of in
13530 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a  put text */.};..
13540 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
13550 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
13560 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73  ure can hold a s
13570 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64  imple list of id
13580 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75  entifiers,.** su
13590 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22  ch as the list "
135a0 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f  a,b,c" in the fo
135b0 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e  llowing statemen
135c0 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49  ts:.**.**      I
135d0 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
135e0 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a  ,c) VALUES ...;.
135f0 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49  **      CREATE I
13600 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c  NDEX idx ON t(a,
13610 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52  b,c);.**      CR
13620 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69  EATE TRIGGER tri
13630 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  g BEFORE UPDATE 
13640 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b  ON t(a,b,c) ...;
13650 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73  .**.** The IdLis
13660 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73  t.a.idx field is
13670 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49   used when the I
13680 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73  dList represents
13690 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20   the list of.** 
136a0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74  column names aft
136b0 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  er a table name 
136c0 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  in an INSERT sta
136d0 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20  tement.  In the 
136e0 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20  statement.**.** 
136f0 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
13700 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a  t(a,b,c) ....**.
13710 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65  ** If "a" is the
13720 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   k-th column of 
13730 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20  table "t", then 
13740 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d  IdList.a[0].idx=
13750 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64  =k..*/.struct Id
13760 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20  List {.  struct 
13770 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  IdList_item {.  
13780 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
13790 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
137a0 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f  he identifier */
137b0 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20  .    int idx;   
137c0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
137d0 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43  in some Table.aC
137e0 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  ol[] of a column
137f0 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a   named zName */.
13800 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49    } *a;.  int nI
13810 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
13820 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69  mber of identifi
13830 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ers on the list 
13840 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
13850 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70   bitmask datatyp
13860 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  e defined below 
13870 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69  is used for vari
13880 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ous optimization
13890 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e  s..**.** Changin
138a0 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34  g this from a 64
138b0 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74  -bit to a 32-bit
138c0 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65   type limits the
138d0 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61   number of.** ta
138e0 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74  bles in a join t
138f0 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20  o 32 instead of 
13900 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f  64.  But it also
13910 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a   reduces the siz
13920 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72  e.** of the libr
13930 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73  ary by 738 bytes
13940 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70   on ix86..*/.typ
13950 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
13960 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  ;../*.** The num
13970 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61  ber of bits in a
13980 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22   Bitmask.  "BMS"
13990 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20   means "BitMask 
139a0 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Size"..*/.#defin
139b0 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69  e BMS  ((int)(si
139c0 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29  zeof(Bitmask)*8)
139d0 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69  )../*.** A bit i
139e0 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23  n a Bitmask.*/.#
139f0 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e  define MASKBIT(n
13a00 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31  )   (((Bitmask)1
13a10 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54  )<<(n))../*.** T
13a20 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
13a30 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73  ucture describes
13a40 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
13a50 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
13a60 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20  tement..** Each 
13a70 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
13a80 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  y in the FROM cl
13a90 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61  ause is a separa
13aa0 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a  te element of.**
13ab0 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d   the SrcList.a[]
13ac0 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69   array..**.** Wi
13ad0 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20  th the addition 
13ae0 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  of multiple data
13af0 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68  base support, th
13b00 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
13b10 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73  cture.** can als
13b20 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73  o be used to des
13b30 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c  cribe a particul
13b40 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73  ar table such as
13b50 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a   the table that.
13b60 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62  ** is modified b
13b70 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c  y an INSERT, DEL
13b80 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73  ETE, or UPDATE s
13b90 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74  tatement.  In st
13ba0 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73  andard SQL,.** s
13bb0 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74  uch a table must
13bc0 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d   be a simple nam
13bd0 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53  e: ID.  But in S
13be0 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65  QLite, the table
13bf0 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69   can.** now be i
13c00 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64  dentified by a d
13c10 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20  atabase name, a 
13c20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61  dot, then the ta
13c30 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e  ble name: ID.ID.
13c40 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74  .**.** The joint
13c50 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73  ype starts out s
13c60 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20  howing the join 
13c70 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65  type between the
13c80 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a   current table.*
13c90 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74  * and the next t
13ca0 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74  able on the list
13cb0 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75  .  The parser bu
13cc0 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68  ilds the list th
13cd0 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73  is way..** But s
13ce0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
13cf0 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74  ftJoinType() lat
13d00 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f  er shifts the jo
13d10 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20  intypes so that 
13d20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65  each.** jointype
13d30 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a   expresses the j
13d40 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20  oin between the 
13d50 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
13d60 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a  evious table..**
13d70 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73  .** In the colUs
13d80 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69  ed field, the hi
13d90 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69  gh-order bit (bi
13da0 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20  t 63) is set if 
13db0 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e  the table.** con
13dc0 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20  tains more than 
13dd0 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74  63 columns and t
13de0 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65  he 64-th or late
13df0 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  r column is used
13e00 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c  ..*/.struct SrcL
13e10 69 73 74 20 7b 0a 20 20 75 38 20 6e 53 72 63 3b  ist {.  u8 nSrc;
13e20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13e30 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73  r of tables or s
13e40 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65  ubqueries in the
13e50 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
13e60 20 20 75 38 20 6e 41 6c 6c 6f 63 3b 20 20 20 20    u8 nAlloc;    
13e70 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
13e80 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64  ntries allocated
13e90 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f   in a[] below */
13ea0 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  .  struct SrcLis
13eb0 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68  t_item {.    Sch
13ec0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f  ema *pSchema;  /
13ed0 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63  * Schema to whic
13ee0 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66  h this item is f
13ef0 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  ixed */.    char
13f00 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a   *zDatabase;  /*
13f10 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
13f20 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74  e holding this t
13f30 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
13f40 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
13f50 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
13f60 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
13f70 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54  zAlias;     /* T
13f80 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61  he "B" part of a
13f90 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65   "A AS B" phrase
13fa0 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20  .  zName is the 
13fb0 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  "A" */.    Table
13fc0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20   *pTab;      /* 
13fd0 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72  An SQL table cor
13fe0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e  responding to zN
13ff0 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ame */.    Selec
14000 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20  t *pSelect;  /* 
14010 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  A SELECT stateme
14020 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65  nt used in place
14030 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   of a table name
14040 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72   */.    int addr
14050 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64  FillSub;  /* Add
14060 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69  ress of subrouti
14070 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61  ne to manifest a
14080 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20   subquery */.   
14090 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20   int regReturn; 
140a0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
140b0 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64  olding return ad
140c0 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c  dress of addrFil
140d0 6c 53 75 62 20 2a 2f 0a 20 20 20 20 75 38 20 6a  lSub */.    u8 j
140e0 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a  ointype;      /*
140f0 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65   Type of join be
14100 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c 65 20  tween this able 
14110 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
14120 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
14130 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20   notIndexed :1; 
14140 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
14150 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44  ere is a NOT IND
14160 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20  EXED clause */. 
14170 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f     unsigned isCo
14180 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a  rrelated :1;  /*
14190 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65   True if sub-que
141a0 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ry is correlated
141b0 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
141c0 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31   viaCoroutine :1
141d0 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65  ;  /* Implemente
141e0 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e  d as a co-routin
141f0 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e */.#ifndef SQL
14200 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
14210 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49  .    u8 iSelectI
14220 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65  d;     /* If pSe
14230 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20  lect!=0, the id 
14240 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63  of the sub-selec
14250 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64  t in EQP */.#end
14260 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73  if.    int iCurs
14270 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  or;      /* The 
14280 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
14290 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  er used to acces
142a0 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
142b0 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20      Expr *pOn;  
142c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20        /* The ON 
142d0 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
142e0 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a   */.    IdList *
142f0 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65  pUsing;   /* The
14300 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
14310 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42   a join */.    B
14320 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20  itmask colUsed; 
14330 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29   /* Bit N (1<<N)
14340 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e   set if column N
14350 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64   of pTab is used
14360 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 49   */.    char *zI
14370 6e 64 65 78 3b 20 20 20 20 20 2f 2a 20 49 64 65  ndex;     /* Ide
14380 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e  ntifier from "IN
14390 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78  DEXED BY <zIndex
143a0 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  >" clause */.   
143b0 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20   Index *pIndex; 
143c0 20 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75     /* Index stru
143d0 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64  cture correspond
143e0 69 6e 67 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69  ing to zIndex, i
143f0 66 20 61 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31  f any */.  } a[1
14400 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ];             /
14410 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
14420 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20  each identifier 
14430 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
14440 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74  ;../*.** Permitt
14450 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  ed values of the
14460 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74   SrcList.a.joint
14470 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65  ype field.*/.#de
14480 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20  fine JT_INNER   
14490 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41    0x0001    /* A
144a0 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72  ny kind of inner
144b0 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a   or cross join *
144c0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f  /.#define JT_CRO
144d0 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20  SS     0x0002   
144e0 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65   /* Explicit use
144f0 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65   of the CROSS ke
14500 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
14510 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78   JT_NATURAL   0x
14520 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20  0004    /* True 
14530 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20  for a "natural" 
14540 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
14550 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30  JT_LEFT      0x0
14560 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  008    /* Left o
14570 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
14580 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20  fine JT_RIGHT   
14590 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52    0x0010    /* R
145a0 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  ight outer join 
145b0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55  */.#define JT_OU
145c0 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20  TER     0x0020  
145d0 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22    /* The "OUTER"
145e0 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73   keyword is pres
145f0 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ent */.#define J
14600 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30  T_ERROR     0x00
14610 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e  40    /* unknown
14620 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20   or unsupported 
14630 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f  join type */.../
14640 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f  *.** Flags appro
14650 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77  priate for the w
14660 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65  ctrlFlags parame
14670 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68  ter of sqlite3Wh
14680 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e  ereBegin().** an
14690 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e  d the WhereInfo.
146a0 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65  wctrlFlags membe
146b0 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  r..*/.#define WH
146c0 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
146d0 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e  AL   0x0000 /* N
146e0 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  o-op */.#define 
146f0 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49  WHERE_ORDERBY_MI
14700 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a  N      0x0001 /*
14710 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
14720 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66  sing for min() f
14730 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
14740 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58  HERE_ORDERBY_MAX
14750 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20        0x0002 /* 
14760 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
14770 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
14780 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
14790 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
147a0 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57  RED  0x0004 /* W
147b0 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61  ant to do one-pa
147c0 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  ss UPDATE/DELETE
147d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
147e0 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20  E_DUPLICATES_OK 
147f0 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20     0x0008 /* Ok 
14800 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20  to return a row 
14810 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a  more than once *
14820 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14830 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20  OMIT_OPEN_CLOSE 
14840 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65   0x0010 /* Table
14850 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72   cursors are alr
14860 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  eady open */.#de
14870 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45  fine WHERE_FORCE
14880 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78 30 30  _TABLE      0x00
14890 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65  20 /* Do not use
148a0 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73   an index-only s
148b0 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65  earch */.#define
148c0 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f   WHERE_ONETABLE_
148d0 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f  ONLY    0x0040 /
148e0 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20  * Only code the 
148f0 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61  1st table in pTa
14900 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65  bList */.#define
14910 20 57 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20   WHERE_AND_ONLY 
14920 20 20 20 20 20 20 20 20 30 78 30 30 38 30 20 2f          0x0080 /
14930 2a 20 44 6f 6e 27 74 20 75 73 65 20 69 6e 64 69  * Don't use indi
14940 63 65 73 20 66 6f 72 20 4f 52 20 74 65 72 6d 73  ces for OR terms
14950 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
14960 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20  E_GROUPBY       
14970 20 20 20 30 78 30 31 30 30 20 2f 2a 20 70 4f 72     0x0100 /* pOr
14980 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20  derBy is really 
14990 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64  a GROUP BY */.#d
149a0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
149b0 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30  INCTBY       0x0
149c0 32 30 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20  200 /* pOrderby 
149d0 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54  is really a DIST
149e0 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23  INCT clause */.#
149f0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e  define WHERE_WAN
14a00 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78  T_DISTINCT    0x
14a10 30 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70  0400 /* All outp
14a20 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64  ut needs to be d
14a30 69 73 74 69 6e 63 74 20 2a 2f 0a 0a 2f 2a 20 41  istinct */../* A
14a40 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
14a50 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
14a60 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
14a70 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ().*/.#define WH
14a80 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f  ERE_DISTINCT_NOO
14a90 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53  P      0  /* DIS
14aa0 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f  TINCT keyword no
14ab0 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  t used */.#defin
14ac0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
14ad0 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a  _UNIQUE    1  /*
14ae0 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a   No duplicates *
14af0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14b00 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44  DISTINCT_ORDERED
14b10 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70     2  /* All dup
14b20 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61  licates are adja
14b30 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cent */.#define 
14b40 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
14b50 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44  NORDERED 3  /* D
14b60 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63  uplicates are sc
14b70 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  attered */../*.*
14b80 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  * A NameContext 
14b90 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78  defines a contex
14ba0 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65  t in which to re
14bb0 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20  solve table and 
14bc0 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e  column.** names.
14bd0 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f    The context co
14be0 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74  nsists of a list
14bf0 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20   of tables (the 
14c00 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20  pSrcList) field 
14c10 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66  and.** a list of
14c20 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
14c30 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65  n (pEList).  The
14c40 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
14c50 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65  n list may.** be
14c60 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63   NULL.  The pSrc
14c70 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
14c80 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
14c90 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a  of a SELECT or.*
14ca0 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  * to the table b
14cb0 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
14cc0 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41   by INSERT, UPDA
14cd0 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20  TE, or DELETE.  
14ce0 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f  The.** pEList co
14cf0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
14d00 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61   result set of a
14d10 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e   SELECT and is N
14d20 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72  ULL for.** other
14d30 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
14d40 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20  ** NameContexts 
14d50 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20  can be nested.  
14d60 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e  When resolving n
14d70 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d  ames, the inner-
14d80 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74  most .** context
14d90 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72   is searched fir
14da0 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68  st.  If no match
14db0 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
14dc0 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e  ext outer.** con
14dd0 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e  text is checked.
14de0 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74    If there is st
14df0 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68  ill no match, th
14e00 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a  e next context.*
14e10 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54  * is checked.  T
14e20 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74  his process cont
14e30 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68  inues until eith
14e40 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  er a match is fo
14e50 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f  und.** or all co
14e60 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b  ntexts are check
14e70 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20  .  When a match 
14e80 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52  is found, the nR
14e90 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20  ef member of.** 
14ea0 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74  the context cont
14eb0 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68  aining the match
14ec0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
14ed0 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62   .**.** Each sub
14ee0 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77  query gets a new
14ef0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54   NameContext.  T
14f00 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70  he pNext field p
14f10 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20  oints to the.** 
14f20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74  NameContext in t
14f30 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e  he parent query.
14f40 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65    Thus the proce
14f50 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74  ss of scanning t
14f60 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
14f70 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  t list correspon
14f80 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20  ds to searching 
14f90 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69  through successi
14fa0 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75  vely outer.** su
14fb0 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67  bqueries looking
14fc0 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f   for a match..*/
14fd0 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74  .struct NameCont
14fe0 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  ext {.  Parse *p
14ff0 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20  Parse;       /* 
15000 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20  The parser */.  
15010 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
15020 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  t;   /* One or m
15030 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20  ore tables used 
15040 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73  to resolve names
15050 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
15060 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70  pEList;    /* Op
15070 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72  tional list of r
15080 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e  esult-set column
15090 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a  s */.  AggInfo *
150a0 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49  pAggInfo;   /* I
150b0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
150c0 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74   aggregates at t
150d0 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e  his level */.  N
150e0 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78  ameContext *pNex
150f0 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65  t;  /* Next oute
15100 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20  r name context. 
15110 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d   NULL for outerm
15120 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  ost */.  int nRe
15130 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
15140 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73   Number of names
15150 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69   resolved by thi
15160 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69  s context */.  i
15170 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
15180 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15190 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65   errors encounte
151a0 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76  red while resolv
151b0 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75  ing names */.  u
151c0 38 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  8 ncFlags;      
151d0 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d      /* Zero or m
151e0 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64  ore NC_* flags d
151f0 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a  efined below */.
15200 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
15210 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
15220 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63   NameContext, nc
15230 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  Flags field..*/.
15240 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77  #define NC_Allow
15250 41 67 67 20 20 30 78 30 31 20 20 20 20 2f 2a 20  Agg  0x01    /* 
15260 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
15270 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  ons are allowed 
15280 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
15290 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30  NC_HasAgg    0x0
152a0 32 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  2    /* One or m
152b0 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
152c0 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a  nctions seen */.
152d0 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65  #define NC_IsChe
152e0 63 6b 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20  ck   0x04    /* 
152f0 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
15300 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45  g names in a CHE
15310 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  CK constraint */
15320 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67  .#define NC_InAg
15330 67 46 75 6e 63 20 30 78 30 38 20 20 20 20 2f 2a  gFunc 0x08    /*
15340 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69   True if analyzi
15350 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  ng arguments to 
15360 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23  an agg func */.#
15370 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64  define NC_PartId
15380 78 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 54  x   0x10    /* T
15390 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
153a0 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
153b0 20 57 48 45 52 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   WHERE */../*.**
153c0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
153d0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
153e0 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
153f0 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   all information
15400 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65  .** needed to ge
15410 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20  nerate code for 
15420 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
15430 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
15440 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74   nLimit is set t
15450 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73  o -1 if there is
15460 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65   no LIMIT clause
15470 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65  .  nOffset is se
15480 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68  t to 0..** If th
15490 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63  ere is a LIMIT c
154a0 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65  lause, the parse
154b0 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f  r sets nLimit to
154c0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
154d0 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e  e.** limit and n
154e0 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61  Offset to the va
154f0 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65  lue of the offse
15500 74 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65  t (or 0 if there
15510 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65   is not.** offse
15520 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f  t).  But later o
15530 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f  n, nLimit and nO
15540 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65  ffset become the
15550 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
15560 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45  s.** in the VDBE
15570 20 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65   that record the
15580 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65   limit and offse
15590 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a  t counters..**.*
155a0 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d  * addrOpenEphm[]
155b0 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e   entries contain
155c0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
155d0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
155e0 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65   opcodes..** The
155f0 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73  se addresses mus
15600 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74  t be stored so t
15610 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61  hat we can go ba
15620 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a  ck and fill in.*
15630 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f  * the P4_KEYINFO
15640 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65   and P2 paramete
15650 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68  rs later.  Neith
15660 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e  er the KeyInfo n
15670 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  or.** the number
15680 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50   of columns in P
15690 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65  2 can be compute
156a0 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  d at the same ti
156b0 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f  me.** as the OP_
156c0 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63  OpenEphm instruc
156d0 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65  tion is coded be
156e0 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f  cause not.** eno
156f0 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ugh information 
15700 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75  about the compou
15710 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77  nd query is know
15720 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e  n at that point.
15730 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  .** The KeyInfo 
15740 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e  for addrOpenTran
15750 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74  [0] and [1] cont
15760 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ains collating s
15770 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20  equences.** for 
15780 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20  the result set. 
15790 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
157a0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
157b0 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
157c0 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73  ing.** sequences
157d0 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42   for the ORDER B
157e0 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72  Y clause..*/.str
157f0 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45  uct Select {.  E
15800 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
15810 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65        /* The fie
15820 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  lds of the resul
15830 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  t */.  u8 op;   
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15850 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f   One of: TK_UNIO
15860 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45  N TK_ALL TK_INTE
15870 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20  RSECT TK_EXCEPT 
15880 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61 67  */.  u16 selFlag
15890 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  s;          /* V
158a0 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75  arious SF_* valu
158b0 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d  es */.  int iLim
158c0 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f  it, iOffset;   /
158d0 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
158e0 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54  rs holding LIMIT
158f0 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65   & OFFSET counte
15900 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  rs */.  int addr
15910 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b 20 20 20 2f  OpenEphm[3];   /
15920 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f  * OP_OpenEphem o
15930 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74  pcodes related t
15940 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f  o this select */
15950 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74 52 6f  .  u64 nSelectRo
15960 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  w;        /* Est
15970 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
15980 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a   result rows */.
15990 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b    SrcList *pSrc;
159a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
159b0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
159c0 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
159d0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
159e0 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20  HERE clause */. 
159f0 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
15a00 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47  pBy;    /* The G
15a10 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a  ROUP BY clause *
15a20 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e  /.  Expr *pHavin
15a30 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  g;         /* Th
15a40 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
15a50 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
15a60 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54  OrderBy;    /* T
15a70 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
15a80 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  se */.  Select *
15a90 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f  pPrior;        /
15aa0 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69  * Prior select i
15ab0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  n a compound sel
15ac0 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  ect statement */
15ad0 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74  .  Select *pNext
15ae0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
15af0 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20  t select to the 
15b00 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  left in a compou
15b10 6e 64 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nd */.  Select *
15b20 70 52 69 67 68 74 6d 6f 73 74 3b 20 20 20 20 2f  pRightmost;    /
15b30 2a 20 52 69 67 68 74 2d 6d 6f 73 74 20 73 65 6c  * Right-most sel
15b40 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
15b50 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
15b60 6e 74 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c  nt */.  Expr *pL
15b70 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f  imit;          /
15b80 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  * LIMIT expressi
15b90 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
15ba0 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78  ot used. */.  Ex
15bb0 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20  pr *pOffset;    
15bc0 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65       /* OFFSET e
15bd0 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
15be0 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
15bf0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
15c00 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
15c10 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e  Select.selFlags.
15c20 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69    The "SF" prefi
15c30 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  x stands for.** 
15c40 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a  "Select Flag"..*
15c50 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73  /.#define SF_Dis
15c60 74 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30  tinct        0x0
15c70 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73  001  /* Output s
15c80 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43  hould be DISTINC
15c90 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  T */.#define SF_
15ca0 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20  Resolved        
15cb0 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74  0x0002  /* Ident
15cc0 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e  ifiers have been
15cd0 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65   resolved */.#de
15ce0 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74  fine SF_Aggregat
15cf0 65 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20  e       0x0004  
15d00 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72  /* Contains aggr
15d10 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
15d20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73  */.#define SF_Us
15d30 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78  esEphemeral   0x
15d40 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68  0008  /* Uses th
15d50 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  e OpenEphemeral 
15d60 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  opcode */.#defin
15d70 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20  e SF_Expanded   
15d80 20 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20       0x0010  /* 
15d90 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
15da0 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20  and() called on 
15db0 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  this */.#define 
15dc0 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20  SF_HasTypeInfo  
15dd0 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52     0x0020  /* FR
15de0 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61  OM subqueries ha
15df0 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74  ve Table metadat
15e00 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  a */.#define SF_
15e10 55 73 65 53 6f 72 74 65 72 20 20 20 20 20 20 20  UseSorter       
15e20 30 78 30 30 34 30 20 20 2f 2a 20 53 6f 72 74 20  0x0040  /* Sort 
15e30 75 73 69 6e 67 20 61 20 73 6f 72 74 65 72 20 2a  using a sorter *
15e40 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c  /.#define SF_Val
15e50 75 65 73 20 20 20 20 20 20 20 20 20 20 30 78 30  ues          0x0
15e60 30 38 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69  080  /* Synthesi
15e70 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20  zed from VALUES 
15e80 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
15e90 65 20 53 46 5f 4d 61 74 65 72 69 61 6c 69 7a 65  e SF_Materialize
15ea0 20 20 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20       0x0100  /* 
15eb0 46 6f 72 63 65 20 6d 61 74 65 72 69 61 6c 69 7a  Force materializ
15ec0 61 74 69 6f 6e 20 6f 66 20 76 69 65 77 73 20 2a  ation of views *
15ed0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73  /.#define SF_Nes
15ee0 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30  tedFrom      0x0
15ef0 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  200  /* Part of 
15f00 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
15f10 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23  FROM clause */.#
15f20 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43  define SF_MaybeC
15f30 6f 6e 76 65 72 74 20 20 20 20 30 78 30 34 30 30  onvert    0x0400
15f40 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72    /* Need conver
15f50 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
15f60 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 0a  oSubquery() */..
15f70 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  ./*.** The resul
15f80 74 73 20 6f 66 20 61 20 73 65 6c 65 63 74 20 63  ts of a select c
15f90 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65  an be distribute
15fa0 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
15fb0 73 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52 54 22  s.  The.** "SRT"
15fc0 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53   prefix means "S
15fd0 45 4c 45 43 54 20 52 65 73 75 6c 74 20 54 79 70  ELECT Result Typ
15fe0 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  e"..*/.#define S
15ff0 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20  RT_Union        
16000 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
16010 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  lt as keys in an
16020 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
16030 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20  e SRT_Except    
16040 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20     2  /* Remove 
16050 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e  result from a UN
16060 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  ION index */.#de
16070 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20  fine SRT_Exists 
16080 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72        3  /* Stor
16090 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c  e 1 if the resul
160a0 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a  t is not empty *
160b0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
160c0 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a  scard      4  /*
160d0 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65   Do not save the
160e0 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72   results anywher
160f0 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44  e */../* The ORD
16100 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
16110 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20  ignored for all 
16120 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a  of the above */.
16130 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c  #define Ignorabl
16140 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d  eOrderby(X) ((X-
16150 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73  >eDest)<=SRT_Dis
16160 63 61 72 64 29 0a 0a 23 64 65 66 69 6e 65 20 53  card)..#define S
16170 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20  RT_Output       
16180 35 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63  5  /* Output eac
16190 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  h row of result 
161a0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d  */.#define SRT_M
161b0 65 6d 20 20 20 20 20 20 20 20 20 20 36 20 20 2f  em          6  /
161c0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
161d0 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  n a memory cell 
161e0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53  */.#define SRT_S
161f0 65 74 20 20 20 20 20 20 20 20 20 20 37 20 20 2f  et          7  /
16200 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20  * Store results 
16210 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
16220 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
16230 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 20  RT_Table        
16240 38 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  8  /* Store resu
16250 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
16260 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
16270 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  id */.#define SR
16280 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 20 39  T_EphemTab     9
16290 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e    /* Create tran
162a0 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74  sient tab and st
162b0 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62  ore like SRT_Tab
162c0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  le */.#define SR
162d0 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 30  T_Coroutine   10
162e0 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20    /* Generate a 
162f0 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65  single row of re
16300 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  sult */../*.** A
16310 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
16320 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69  is object descri
16330 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74  bes where to put
16340 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20   of the results 
16350 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73  of.** a SELECT s
16360 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  tatement..*/.str
16370 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b  uct SelectDest {
16380 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20  .  u8 eDest;    
16390 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64       /* How to d
163a0 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65  ispose of the re
163b0 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52  sults.  On of SR
163c0 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20  T_* above. */.  
163d0 63 68 61 72 20 61 66 66 53 64 73 74 3b 20 20 20  char affSdst;   
163e0 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73    /* Affinity us
163f0 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53  ed when eDest==S
16400 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20  RT_Set */.  int 
16410 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 2f 2a  iSDParm;      /*
16420 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65   A parameter use
16430 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64  d by the eDest d
16440 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a  isposal method *
16450 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20  /.  int iSdst;  
16460 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
16470 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73  gister where res
16480 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e  ults are written
16490 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b   */.  int nSdst;
164a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
164b0 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  r of registers a
164c0 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b 0a 0a  llocated */.};..
164d0 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64  /*.** During cod
164e0 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
164f0 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
16500 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20  do inserts into 
16510 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a  AUTOINCREMENT .*
16520 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f  * tables, the fo
16530 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74  llowing informat
16540 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20  ion is attached 
16550 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61  to the Table.u.a
16560 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e  utoInc.p.** poin
16570 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f  ter of each auto
16580 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20  increment table 
16590 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73  to record some s
165a0 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ide information 
165b0 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65  that.** the code
165c0 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73   generator needs
165d0 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65  .  We have to ke
165e0 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74  ep per-table aut
165f0 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e  oincrement.** in
16600 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73  formation in cas
16610 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f  e inserts are do
16620 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  wn within trigge
16630 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f  rs.  Triggers do
16640 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79   not.** normally
16650 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69   coordinate thei
16660 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75  r activities, bu
16670 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20  t we do need to 
16680 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a  coordinate the.*
16690 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61  * loading and sa
166a0 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72  ving of autoincr
166b0 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ement informatio
166c0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  n..*/.struct Aut
166d0 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74  oincInfo {.  Aut
166e0 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b  oincInfo *pNext;
166f0 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20     /* Next info 
16700 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20  block in a list 
16710 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20  of them all */. 
16720 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
16730 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
16740 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  this info block 
16750 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69  refers to */.  i
16760 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
16770 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
16780 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
16790 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
167a0 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74  ng pTab */.  int
167b0 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20   regCtr;        
167c0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
167d0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68  ister holding th
167e0 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20  e rowid counter 
167f0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a  */.};../*.** Siz
16800 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e of the column 
16810 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  cache.*/.#ifndef
16820 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
16830 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  HE.# define SQLI
16840 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30  TE_N_COLCACHE 10
16850 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
16860 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74  t least one inst
16870 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
16880 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
16890 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
168a0 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20  ach .** trigger 
168b0 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65  that may be fire
168c0 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20  d while parsing 
168d0 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  an INSERT, UPDAT
168e0 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73  E or DELETE.** s
168f0 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75  tatement. All su
16900 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73  ch objects are s
16910 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e  tored in the lin
16920 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
16930 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69  at.** Parse.pTri
16940 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65  ggerPrg and dele
16950 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65  ted once stateme
16960 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68  nt compilation h
16970 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c  as been.** compl
16980 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64  eted..**.** A Vd
16990 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  be sub-program t
169a0 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
169b0 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e  he body and WHEN
169c0 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67   clause of trigg
169d0 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  er.** TriggerPrg
169e0 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d  .pTrigger, assum
169f0 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e  ing a default ON
16a00 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
16a10 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72   of.** TriggerPr
16a20 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f  g.orconf, is sto
16a30 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67  red in the Trigg
16a40 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76  erPrg.pProgram v
16a50 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  ariable..** The 
16a60 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
16a70 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e  g list never con
16a80 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65  tains two entrie
16a90 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a  s with the same.
16aa0 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f  ** values for bo
16ab0 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20  th pTrigger and 
16ac0 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  orconf..**.** Th
16ad0 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
16ae0 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c  lmask[0] variabl
16af0 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61  e is set to a ma
16b00 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
16b10 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20  mns.** accessed 
16b20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72  (or set to 0 for
16b30 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20   triggers fired 
16b40 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49  as a result of I
16b50 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d  NSERT .** statem
16b60 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79  ents). Similarly
16b70 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  , the TriggerPrg
16b80 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72  .aColmask[1] var
16b90 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a  iable is set to.
16ba0 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77  ** a mask of new
16bb0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20  .* columns used 
16bc0 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  by the program..
16bd0 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
16be0 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72  rPrg {.  Trigger
16bf0 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20   *pTrigger;     
16c00 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73   /* Trigger this
16c10 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64   program was cod
16c20 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69  ed from */.  Tri
16c30 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20  ggerPrg *pNext; 
16c40 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74       /* Next ent
16c50 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69  ry in Parse.pTri
16c60 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a  ggerPrg list */.
16c70 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
16c80 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f  rogram;   /* Pro
16c90 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  gram implementin
16ca0 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e  g pTrigger/orcon
16cb0 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e  f */.  int orcon
16cc0 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  f;             /
16cd0 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
16ce0 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a  FLICT policy */.
16cf0 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32    u32 aColmask[2
16d00 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ];        /* Mas
16d10 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77  ks of old.*, new
16d20 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73  .* columns acces
16d30 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  sed */.};../*.**
16d40 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74   The yDbMask dat
16d50 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69  atype for the bi
16d60 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74  tmask of all att
16d70 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
16d80 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
16d90 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
16da0 20 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 33   typedef sqlite3
16db0 5f 75 69 6e 74 36 34 20 79 44 62 4d 61 73 6b 3b  _uint64 yDbMask;
16dc0 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
16dd0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44   unsigned int yD
16de0 62 4d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f  bMask;.#endif../
16df0 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73  *.** An SQL pars
16e00 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63  er context.  A c
16e10 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75  opy of this stru
16e20 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
16e30 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70  through.** the p
16e40 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69  arser and down i
16e50 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73  nto all the pars
16e60 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e  er action routin
16e70 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
16e80 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e   carry around in
16e90 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
16ea0 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20  s global to the 
16eb0 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a  entire parse..**
16ec0 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72  .** The structur
16ed0 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74  e is divided int
16ee0 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68  o two parts.  Wh
16ef0 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  en the parser an
16f00 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61  d code.** genera
16f10 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76  te call themselv
16f20 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20  es recursively, 
16f30 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f  the first part o
16f40 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a  f the structure.
16f50 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ** is constant b
16f60 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  ut the second pa
16f70 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74  rt is reset at t
16f80 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64  he beginning and
16f90 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20   end of.** each 
16fa0 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  recursion..**.**
16fb0 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20   The nTableLock 
16fc0 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76  and aTableLock v
16fd0 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c  ariables are onl
16fe0 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68  y used if the sh
16ff0 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66  ared-cache .** f
17000 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
17010 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64  d (if sqlite3Tsd
17020 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74  ()->useSharedDat
17030 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79  a is true). They
17040 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
17050 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66  store the set of
17060 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71   table-locks req
17070 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61  uired by the sta
17080 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20  tement being.** 
17090 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69  compiled. Functi
170a0 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  on sqlite3TableL
170b0 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f  ock() is used to
170c0 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20   add entries to 
170d0 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a  the.** list..*/.
170e0 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20  struct Parse {. 
170f0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
17100 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69        /* The mai
17110 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63  n database struc
17120 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ture */.  char *
17130 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f  zErrMsg;       /
17140 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  * An error messa
17150 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56  ge */.  Vdbe *pV
17160 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dbe;         /* 
17170 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78  An engine for ex
17180 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65  ecuting database
17190 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69   bytecode */.  i
171a0 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
171b0 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f      /* Return co
171c0 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f  de from executio
171d0 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d  n */.  u8 colNam
171e0 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54  esSet;      /* T
171f0 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c  RUE after OP_Col
17200 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e  umnName has been
17210 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65   issued to pVdbe
17220 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63   */.  u8 checkSc
17230 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61  hema;      /* Ca
17240 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b  uses schema cook
17250 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61  ie check after a
17260 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20  n error */.  u8 
17270 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20  nested;         
17280 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
17290 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74  ested calls to t
172a0 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67  he parser/code g
172b0 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38  enerator */.  u8
172c0 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20   nTempReg;      
172d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
172e0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
172f0 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b  ers in aTempReg[
17300 5d 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 49  ] */.  u8 nTempI
17310 6e 55 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 4e  nUse;       /* N
17320 75 6d 62 65 72 20 6f 66 20 61 54 65 6d 70 52 65  umber of aTempRe
17330 67 5b 5d 20 63 75 72 72 65 6e 74 6c 79 20 63 68  g[] currently ch
17340 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 75  ecked out */.  u
17350 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20 20  8 nColCache;    
17360 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17370 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
17380 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 75 38 20  Cache[] */.  u8 
17390 69 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20  iColCache;      
173a0 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
173b0 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 74  in aColCache[] t
173c0 6f 20 72 65 70 6c 61 63 65 20 2a 2f 0a 20 20 75  o replace */.  u
173d0 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20  8 isMultiWrite; 
173e0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
173f0 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64  tatement may mod
17400 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69  ify/insert multi
17410 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38  ple rows */.  u8
17420 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20   mayAbort;      
17430 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
17440 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f  atement may thro
17450 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
17460 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73  tion */.  u8 has
17470 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f  Compound;      /
17480 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65  * Need to invoke
17490 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
174a0 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
174b0 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d  () */.  int aTem
174c0 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20  pReg[8];     /* 
174d0 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72  Holding area for
174e0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
174f0 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ters */.  int nR
17500 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
17510 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65  * Size of the te
17520 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
17530 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
17540 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  iRangeReg;      
17550 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74   /* First regist
17560 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  er in temporary 
17570 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
17580 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
17590 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
175a0 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65  er of errors see
175b0 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b  n */.  int nTab;
175c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
175d0 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75  umber of previou
175e0 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44  sly allocated VD
175f0 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20  BE cursors */.  
17600 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
17610 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17620 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
17630 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
17640 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20  int nSet;       
17650 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17660 66 20 73 65 74 73 20 75 73 65 64 20 73 6f 20 66  f sets used so f
17670 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63  ar */.  int nOnc
17680 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
17690 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63  Number of OP_Onc
176a0 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73  e instructions s
176b0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 63  o far */.  int c
176c0 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20  kBase;          
176d0 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
176e0 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20   of data during 
176f0 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
17700 73 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 74  s */.  int iPart
17710 49 64 78 54 61 62 3b 20 20 20 20 20 2f 2a 20 54  IdxTab;     /* T
17720 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  able correspondi
17730 6e 67 20 74 6f 20 61 20 70 61 72 74 69 61 6c 20  ng to a partial 
17740 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69  index */.  int i
17750 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20  CacheLevel;     
17760 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69  /* ColCache vali
17770 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65  d when aColCache
17780 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68  [].iLevel<=iCach
17790 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20  eLevel */.  int 
177a0 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20  iCacheCnt;      
177b0 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64   /* Counter used
177c0 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f   to generate aCo
177d0 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c  lCache[].lru val
177e0 75 65 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ues */.  struct 
177f0 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20  yColCache {.    
17800 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
17810 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
17820 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
17830 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
17840 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
17850 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  le column number
17860 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52   */.    u8 tempR
17870 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  eg;           /*
17880 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20   iReg is a temp 
17890 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65  register that ne
178a0 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20  eds to be freed 
178b0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65  */.    int iLeve
178c0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
178d0 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f  Nesting level */
178e0 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20  .    int iReg;  
178f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
17900 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20  g with value of 
17910 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d  this column. 0 m
17920 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20  eans none. */.  
17930 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20    int lru;      
17940 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74          /* Least
17950 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65   recently used e
17960 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61  ntry has the sma
17970 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20  llest value */. 
17980 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c   } aColCache[SQL
17990 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b  ITE_N_COLCACHE];
179a0 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63    /* One for eac
179b0 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65  h column cache e
179c0 6e 74 72 79 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ntry */.  yDbMas
179d0 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f  k writeMask;   /
179e0 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20  * Start a write 
179f0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
17a00 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a  hese databases *
17a10 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b  /.  yDbMask cook
17a20 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d  ieMask;  /* Bitm
17a30 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65  ask of schema ve
17a40 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73  rified databases
17a50 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65   */.  int cookie
17a60 47 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20 41 64  Goto;      /* Ad
17a70 64 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f 74 6f  dress of OP_Goto
17a80 20 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72 69 66   to cookie verif
17a90 69 65 72 20 73 75 62 72 6f 75 74 69 6e 65 20 2a  ier subroutine *
17aa0 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61  /.  int cookieVa
17ab0 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41  lue[SQLITE_MAX_A
17ac0 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20  TTACHED+2];  /* 
17ad0 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65  Values of cookie
17ae0 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20  s to verify */. 
17af0 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20   int regRowid;  
17b00 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
17b10 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20  r holding rowid 
17b20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  of CREATE TABLE 
17b30 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72  entry */.  int r
17b40 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20  egRoot;         
17b50 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
17b60 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  ing root page nu
17b70 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a  mber for new obj
17b80 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  ects */.  int nM
17b90 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f  axArg;         /
17ba0 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65  * Max args passe
17bb0 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69  d to user functi
17bc0 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61  on by sub-progra
17bd0 6d 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e  m */.  Token con
17be0 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e  straintName;/* N
17bf0 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74  ame of the const
17c00 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20  raint currently 
17c10 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a  being parsed */.
17c20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
17c30 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
17c40 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63  .  int nTableLoc
17c50 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  k;        /* Num
17c60 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20  ber of locks in 
17c70 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20  aTableLock */.  
17c80 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c  TableLock *aTabl
17c90 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72  eLock; /* Requir
17ca0 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66  ed table locks f
17cb0 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
17cc0 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  mode */.#endif. 
17cd0 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41   AutoincInfo *pA
17ce0 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  inc;  /* Informa
17cf0 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49  tion about AUTOI
17d00 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72  NCREMENT counter
17d10 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72  s */..  /* Infor
17d20 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c  mation used whil
17d30 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72  e coding trigger
17d40 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20   programs. */.  
17d50 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c  Parse *pToplevel
17d60 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74  ;    /* Parse st
17d70 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e  ructure for main
17d80 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c   program (or NUL
17d90 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  L) */.  Table *p
17da0 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20  TriggerTab;  /* 
17db0 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61  Table triggers a
17dc0 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66  re being coded f
17dd0 6f 72 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65  or */.  u32 nQue
17de0 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20  ryLoop;      /* 
17df0 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74  Est number of it
17e00 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75  erations of a qu
17e10 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29  ery (10*log2(N))
17e20 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73   */.  u32 oldmas
17e30 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
17e40 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
17e50 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
17e60 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b  /.  u32 newmask;
17e70 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
17e80 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
17e90 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a  s referenced */.
17ea0 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b    u8 eTriggerOp;
17eb0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44         /* TK_UPD
17ec0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f  ATE, TK_INSERT o
17ed0 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20  r TK_DELETE */. 
17ee0 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20   u8 eOrconf;    
17ef0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
17f00 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
17f10 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20  icy for trigger 
17f20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69  steps */.  u8 di
17f30 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20  sableTriggers;  
17f40 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62  /* True to disab
17f50 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a  le triggers */..
17f60 20 20 2f 2a 20 41 62 6f 76 65 20 69 73 20 63 6f    /* Above is co
17f70 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72  nstant between r
17f80 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f  ecursions.  Belo
17f90 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72  w is reset befor
17fa0 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a  e and after.  **
17fb0 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 20   each recursion 
17fc0 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20  */..  int nVar; 
17fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fe0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27  /* Number of '?'
17ff0 20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20   variables seen 
18000 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61  in the SQL so fa
18010 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72  r */.  int nzVar
18020 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18030 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76   /* Number of av
18040 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e  ailable slots in
18050 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38   azVar[] */.  u8
18060 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20   explain;       
18070 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
18080 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66  if the EXPLAIN f
18090 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20  lag is found on 
180a0 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66  the query */.#if
180b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
180c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
180d0 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20  u8 declareVtab; 
180e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
180f0 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69  e if inside sqli
18100 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
18110 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61  () */.  int nVta
18120 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20  bLock;          
18130 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
18140 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f  irtual tables to
18150 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a   lock */.#endif.
18160 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20    int nAlias;   
18170 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
18180 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64  umber of aliased
18190 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75   result set colu
181a0 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  mns */.  int nHe
181b0 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
181c0 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
181d0 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20   tree height of 
181e0 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65  current sub-sele
181f0 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ct */.#ifndef SQ
18200 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
18210 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49  N.  int iSelectI
18220 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
18230 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73   ID of current s
18240 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49  elect for EXPLAI
18250 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e  N output */.  in
18260 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b  t iNextSelectId;
18270 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
18280 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74  available select
18290 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20   ID for EXPLAIN 
182a0 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66  output */.#endif
182b0 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b  .  char **azVar;
182c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
182d0 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65  Pointers to name
182e0 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20  s of parameters 
182f0 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72  */.  Vdbe *pRepr
18300 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f  epare;         /
18310 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65  * VM being repre
18320 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65  pared (sqlite3Re
18330 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20  prepare()) */.  
18340 69 6e 74 20 2a 61 41 6c 69 61 73 3b 20 20 20 20  int *aAlias;    
18350 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
18360 69 73 74 65 72 20 75 73 65 64 20 74 6f 20 68 6f  ister used to ho
18370 6c 64 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c  ld aliased resul
18380 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  t */.  const cha
18390 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20  r *zTail;       
183a0 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74   /* All SQL text
183b0 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73   past the last s
183c0 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20  emicolon parsed 
183d0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77  */.  Table *pNew
183e0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f  Table;         /
183f0 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20  * A table being 
18400 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43  constructed by C
18410 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
18420 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72   Trigger *pNewTr
18430 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72  igger;     /* Tr
18440 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73  igger under cons
18450 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54  truct by a CREAT
18460 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63  E TRIGGER */.  c
18470 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
18480 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20  Context; /* The 
18490 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f  6th parameter to
184a0 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62   db->xAuth callb
184b0 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  acks */.  Token 
184c0 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20  sNameToken;     
184d0 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74      /* Token wit
184e0 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63  h unqualified sc
184f0 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65  hema object name
18500 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73   */.  Token sLas
18510 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  tToken;         
18520 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65  /* The last toke
18530 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e  n parsed */.#ifn
18540 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
18550 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54  VIRTUALTABLE.  T
18560 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20  oken sArg;      
18570 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70           /* Comp
18580 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d  lete text of a m
18590 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a  odule argument *
185a0 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74  /.  Table **apVt
185b0 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a  abLock;       /*
185c0 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74   Pointer to virt
185d0 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69  ual tables needi
185e0 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65  ng locking */.#e
185f0 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a  ndif.  Table *pZ
18600 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20  ombieTab;       
18610 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c   /* List of Tabl
18620 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c  e objects to del
18630 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67  ete after code g
18640 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  en */.  TriggerP
18650 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b  rg *pTriggerPrg;
18660 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74    /* Linked list
18670 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65   of coded trigge
18680 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  rs */.};../*.** 
18690 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63  Return true if c
186a0 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20  urrently inside 
186b0 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  an sqlite3_decla
186c0 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a  re_vtab() call..
186d0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
186e0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
186f0 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  LE.  #define IN_
18700 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23  DECLARE_VTAB 0.#
18710 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49  else.  #define I
18720 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28  N_DECLARE_VTAB (
18730 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56  pParse->declareV
18740 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  tab).#endif../*.
18750 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
18760 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
18770 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65  structure can be
18780 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73   declared on a s
18790 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a  tack and used.**
187a0 20 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72   to save the Par
187b0 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
187c0 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74  value so that it
187d0 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64   can be restored
187e0 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63   later..*/.struc
187f0 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a  t AuthContext {.
18800 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
18810 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a  uthContext;   /*
18820 20 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65   Put saved Parse
18830 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65  .zAuthContext he
18840 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  re */.  Parse *p
18850 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
18860 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65      /* The Parse
18870 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b   structure */.};
18880 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64  ../*.** Bitfield
18890 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61   flags for P5 va
188a0 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f  lue in various o
188b0 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  pcodes..*/.#defi
188c0 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  ne OPFLAG_NCHANG
188d0 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  E       0x01    
188e0 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  /* Set to update
188f0 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a   db->nChange */.
18900 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
18910 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30  ASTROWID     0x0
18920 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  2    /* Set to u
18930 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f  pdate db->lastRo
18940 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  wid */.#define O
18950 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20  PFLAG_ISUPDATE  
18960 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54      0x04    /* T
18970 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73  his OP_Insert is
18980 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a   an sql UPDATE *
18990 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
189a0 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30  _APPEND        0
189b0 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69  x08    /* This i
189c0 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
189d0 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66  n append */.#def
189e0 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  ine OPFLAG_USESE
189f0 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20  EKRESULT 0x10   
18a00 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64   /* Try to avoid
18a10 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65   a seek in Btree
18a20 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66  Insert() */.#def
18a30 69 6e 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52  ine OPFLAG_CLEAR
18a40 43 41 43 48 45 20 20 20 20 30 78 32 30 20 20 20  CACHE    0x20   
18a50 20 2f 2a 20 43 6c 65 61 72 20 70 73 65 75 64 6f   /* Clear pseudo
18a60 2d 74 61 62 6c 65 20 63 61 63 68 65 20 69 6e 20  -table cache in 
18a70 4f 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65  OP_Column */.#de
18a80 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  fine OPFLAG_LENG
18a90 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20  THARG     0x40  
18aa0 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
18ab0 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e  nly used for len
18ac0 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  gth() */.#define
18ad0 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
18ae0 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a  G     0x80    /*
18af0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20   OP_Column only 
18b00 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28  used for typeof(
18b10 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
18b20 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20  LAG_BULKCSR     
18b30 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
18b40 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f  Open** used to o
18b50 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20  pen bulk cursor 
18b60 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
18b70 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20  G_P2ISREG       
18b80 30 78 30 32 20 20 20 20 2f 2a 20 50 32 20 74 6f  0x02    /* P2 to
18b90 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20   OP_Open** is a 
18ba0 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
18bb0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
18bc0 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20  G_PERMUTE       
18bd0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
18be0 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70  mpare: use the p
18bf0 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f  ermutation */../
18c00 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65  *. * Each trigge
18c10 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
18c20 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
18c30 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e   is stored as an
18c40 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20   instance of. * 
18c50 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20  struct Trigger. 
18c60 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20  . *. * Pointers 
18c70 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  to instances of 
18c80 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61  struct Trigger a
18c90 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f  re stored in two
18ca0 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20   ways.. * 1. In 
18cb0 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68  the "trigHash" h
18cc0 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20  ash table (part 
18cd0 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20  of the sqlite3* 
18ce0 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20  that represents 
18cf0 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62  the . *    datab
18d00 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77  ase). This allow
18d10 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74  s Trigger struct
18d20 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69  ures to be retri
18d30 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a  eved by name.. *
18d40 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73   2. All triggers
18d50 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
18d60 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
18d70 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69  form a linked li
18d80 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a  st, using the. *
18d90 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72      pNext member
18da0 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
18db0 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  er. A pointer to
18dc0 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
18dd0 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20  nt of the. *    
18de0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73  linked list is s
18df0 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54  tored as the "pT
18e00 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f  rigger" member o
18e10 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
18e20 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61  . *    struct Ta
18e30 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ble.. *. * The "
18e40 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
18e50 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  r points to the 
18e60 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
18e70 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20   a linked list. 
18e80 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  * containing the
18e90 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
18ea0 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
18eb0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
18ec0 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  .. */.struct Tri
18ed0 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a  gger {.  char *z
18ee0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
18ef0 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20   /* The name of 
18f00 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20  the trigger     
18f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61     */.  char *ta
18f30 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
18f40 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20  /* The table or 
18f50 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68  view to which th
18f60 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65  e trigger applie
18f70 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  s */.  u8 op;   
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18f90 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
18fa0 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
18fb0 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20  K_INSERT        
18fc0 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20   */.  u8 tr_tm; 
18fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18fe0 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f   One of TRIGGER_
18ff0 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f  BEFORE, TRIGGER_
19000 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20  AFTER */.  Expr 
19010 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20  *pWhen;         
19020 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63     /* The WHEN c
19030 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70  lause of the exp
19040 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20  ression (may be 
19050 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73  NULL) */.  IdLis
19060 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20  t *pColumns;    
19070 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73     /* If this is
19080 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63   an UPDATE OF <c
19090 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67  olumn-list> trig
190a0 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
190b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190c0 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69    the <column-li
190d0 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65  st> is stored he
190e0 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
190f0 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
19100 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
19110 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
19120 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54   */.  Schema *pT
19130 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  abSchema;     /*
19140 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
19150 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  ng the table */.
19160 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
19170 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e  tep_list; /* Lin
19180 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65  k list of trigge
19190 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20  r program steps 
191a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
191b0 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b   Trigger *pNext;
191c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
191d0 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61   trigger associa
191e0 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
191f0 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
19200 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74  A trigger is eit
19210 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20  her a BEFORE or 
19220 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72  an AFTER trigger
19230 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
19240 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
19250 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a  termine which. .
19260 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61  **.** If there a
19270 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67  re multiple trig
19280 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20  gers, you might 
19290 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61  of some BEFORE a
192a0 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a  nd some AFTER..*
192b0 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c  * In that cases,
192c0 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62   the constants b
192d0 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64  elow can be ORed
192e0 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64   together..*/.#d
192f0 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45  efine TRIGGER_BE
19300 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20  FORE  1.#define 
19310 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20  TRIGGER_AFTER   
19320 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74  2../*. * An inst
19330 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54  ance of struct T
19340 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73  riggerStep is us
19350 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69  ed to store a si
19360 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65  ngle SQL stateme
19370 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20  nt. * that is a 
19380 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65  part of a trigge
19390 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20  r-program. . *. 
193a0 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  * Instances of s
193b0 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
193c0 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  p are stored in 
193d0 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20  a singly linked 
193e0 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20  list (linked. * 
193f0 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74  using the "pNext
19400 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65  " member) refere
19410 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65  nced by the "ste
19420 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f  p_list" member o
19430 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69  f the . * associ
19440 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67  ated struct Trig
19450 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68  ger instance. Th
19460 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
19470 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  of the linked li
19480 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72  st is. * the fir
19490 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74  st step of the t
194a0 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
194b0 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20   * . * The "op" 
194c0 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73  member indicates
194d0 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
194e0 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e   a "DELETE", "IN
194f0 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20  SERT", "UPDATE" 
19500 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73  or. * "SELECT" s
19510 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65  tatement. The me
19520 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74  anings of the ot
19530 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64  her members is d
19540 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
19550 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f   . * value of "o
19560 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20  p" as follows:. 
19570 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49  *. * (op == TK_I
19580 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66  NSERT). * orconf
19590 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68      -> stores th
195a0 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
195b0 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65  gorithm. * pSele
195c0 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  ct   -> If this 
195d0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
195e0 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  O ... SELECT ...
195f0 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
19600 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
19610 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70   this stores a p
19620 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45  ointer to the SE
19630 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
19640 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
19650 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
19660 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
19670 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
19680 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
19690 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20  insert into.. * 
196a0 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20  pExprList -> If 
196b0 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
196c0 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45  T INTO ... VALUE
196d0 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  S ... statement,
196e0 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
196f0 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
19700 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69  s values to be i
19710 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69  nserted. Otherwi
19720 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c  se NULL.. * pIdL
19730 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ist   -> If this
19740 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
19750 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d  TO ... (<column-
19760 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e  names>) VALUES .
19770 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20  .. . *          
19780 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74      statement, t
19790 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20  hen this stores 
197a0 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  the column-names
197b0 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20   to be. *       
197c0 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20         inserted 
197d0 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  into.. *. * (op 
197e0 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a  == TK_DELETE). *
197f0 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
19800 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
19810 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  e quoted name of
19820 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65   the table to de
19830 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57  lete from.. * pW
19840 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
19850 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
19860 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
19870 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
19880 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
19890 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
198a0 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20  se NULL.. * . * 
198b0 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45  (op == TK_UPDATE
198c0 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d  ). * target    -
198d0 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e  > A token holdin
198e0 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d  g the quoted nam
198f0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
19900 6f 20 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66  o update rows of
19910 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
19920 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
19930 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  se of the UPDATE
19940 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
19950 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
19960 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
19970 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
19980 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
19990 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f  A list of the co
199a0 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20  lumns to update 
199b0 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69  and the expressi
199c0 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a  ons to update. *
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
199e0 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74  em to. See sqlit
199f0 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d  e3Update() docum
19a00 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68  entation of "pCh
19a10 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20  anges". *       
19a20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e         argument.
19a30 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20  . * . */.struct 
19a40 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20  TriggerStep {.  
19a50 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
19a60 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
19a70 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
19a80 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20  ATE, TK_INSERT, 
19a90 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75  TK_SELECT */.  u
19aa0 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  8 orconf;       
19ab0 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61      /* OE_Rollba
19ac0 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69  ck etc. */.  Tri
19ad0 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20  gger *pTrig;    
19ae0 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72    /* The trigger
19af0 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20   that this step 
19b00 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a  is a part of */.
19b10 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
19b20 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t;     /* SELECT
19b30 20 73 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53   statment or RHS
19b40 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   of INSERT INTO 
19b50 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f  .. SELECT ... */
19b60 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b  .  Token target;
19b70 20 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65          /* Targe
19b80 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45  t table for DELE
19b90 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45  TE, UPDATE, INSE
19ba0 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  RT */.  Expr *pW
19bb0 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  here;        /* 
19bc0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
19bd0 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55   for DELETE or U
19be0 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20  PDATE steps */. 
19bf0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72   ExprList *pExpr
19c00 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61  List; /* SET cla
19c10 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20  use for UPDATE. 
19c20 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 66   VALUES clause f
19c30 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 49  or INSERT */.  I
19c40 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20  dList *pIdList; 
19c50 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61      /* Column na
19c60 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a  mes for INSERT *
19c70 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
19c80 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
19c90 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73   in the link-lis
19ca0 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  t */.  TriggerSt
19cb0 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c  ep *pLast;  /* L
19cc0 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c  ast element in l
19cd0 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20  ink-list. Valid 
19ce0 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c  for 1st elem onl
19cf0 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  y */.};../*.** T
19d00 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
19d10 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
19d20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  information used
19d30 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69   by the sqliteFi
19d40 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  x....** routines
19d50 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68   as they walk th
19d60 65 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20  e parse tree to 
19d70 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65  make database re
19d80 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c  ferences.** expl
19d90 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64  icit.  .*/.typed
19da0 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65  ef struct DbFixe
19db0 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63  r DbFixer;.struc
19dc0 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61  t DbFixer {.  Pa
19dd0 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
19de0 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67    /* The parsing
19df0 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72   context.  Error
19e00 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65   messages writte
19e10 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65  n here */.  Sche
19e20 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
19e30 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20  /* Fix items to 
19e40 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20  this schema */. 
19e50 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20   int bVarOnly;  
19e60 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f       /* Check fo
19e70 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72  r variable refer
19e80 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  ences only */.  
19e90 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
19ea0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
19eb0 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65   all objects are
19ec0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
19ed0 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
19ee0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
19ef0 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20  pe;  /* Type of 
19f00 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
19f10 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
19f20 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e  essages */.  con
19f30 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b  st Token *pName;
19f40 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
19f50 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
19f60 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
19f70 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ges */.};../*.**
19f80 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65   An objected use
19f90 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20  d to accumulate 
19fa0 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73 74  the text of a st
19fb0 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a  ring where we.**
19fc0 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72   do not necessar
19fd0 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67  ily know how big
19fe0 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c   the string will
19ff0 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a   be in the end..
1a000 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63 63  */.struct StrAcc
1a010 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  um {.  sqlite3 *
1a020 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  db;         /* O
1a030 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65  ptional database
1a040 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20   for lookaside. 
1a050 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a   Can be NULL */.
1a060 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20    char *zBase;  
1a070 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73 65         /* A base
1a080 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
1a090 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a  t from malloc. *
1a0a0 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b  /.  char *zText;
1a0b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1a0c0 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64  string collected
1a0d0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1a0e0 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20    nChar;        
1a0f0 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74    /* Length of t
1a100 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72  he string so far
1a110 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f   */.  int  nAllo
1a120 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d  c;         /* Am
1a130 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c  ount of space al
1a140 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74  located in zText
1a150 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c   */.  int  mxAll
1a160 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  oc;        /* Ma
1a170 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74  ximum allowed st
1a180 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ring length */. 
1a190 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b   u8   useMalloc;
1a1a0 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65        /* 0: none
1a1b0 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44 62 4d  ,  1: sqlite3DbM
1a1c0 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69 74  alloc,  2: sqlit
1a1d0 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75  e3_malloc */.  u
1a1e0 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20  8   accError;   
1a1f0 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f      /* STRACCUM_
1a200 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55  NOMEM or STRACCU
1a210 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23  M_TOOBIG */.};.#
1a220 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
1a230 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e  NOMEM   1.#defin
1a240 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  e STRACCUM_TOOBI
1a250 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f  G  2../*.** A po
1a260 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
1a270 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
1a280 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69  to communicate i
1a290 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72  nformation.** fr
1a2a0 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61  om sqlite3Init a
1a2b0 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  nd OP_ParseSchem
1a2c0 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74  a into the sqlit
1a2d0 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a  e3InitCallback..
1a2e0 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1a2f0 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  t {.  sqlite3 *d
1a300 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
1a310 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20   database being 
1a320 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1a330 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
1a340 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65  ;    /* Error me
1a350 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72  ssage stored her
1a360 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  e */.  int iDb; 
1a370 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20             /* 0 
1a380 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73  for main databas
1a390 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20  e.  1 for TEMP, 
1a3a0 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64  2.. for ATTACHed
1a3b0 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
1a3c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
1a3d0 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20  ult code stored 
1a3e0 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61  here */.} InitDa
1a3f0 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63  ta;../*.** Struc
1a400 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ture containing 
1a410 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61  global configura
1a420 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68  tion data for th
1a430 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
1a440 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ..**.** This str
1a450 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74  ucture also cont
1a460 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20  ains some state 
1a470 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1a480 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
1a490 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65  nfig {.  int bMe
1a4a0 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20  mstat;          
1a4b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1a4c0 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d  ue to enable mem
1a4d0 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20  ory status */.  
1a4e0 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20  int bCoreMutex; 
1a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a500 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
1a510 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e  ble core mutexin
1a520 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c  g */.  int bFull
1a530 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
1a540 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1a550 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20   to enable full 
1a560 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
1a570 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20  t bOpenUri;     
1a580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a590 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72  /* True to inter
1a5a0 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61  pret filenames a
1a5b0 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20  s URIs */.  int 
1a5c0 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20  bUseCis;        
1a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a5e0 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e   Use covering in
1a5f0 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73  dices for full-s
1a600 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  cans */.  int mx
1a610 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  Strlen;         
1a620 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
1a630 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65  aximum string le
1a640 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  ngth */.  int sz
1a650 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
1a660 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1a670 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
1a680 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a   buffer size */.
1a690 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65    int nLookaside
1a6a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a6b0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
1a6c0 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
1a6d0 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74  count */.  sqlit
1a6e0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d  e3_mem_methods m
1a6f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1a700 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79  Low-level memory
1a710 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65   allocation inte
1a720 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
1a730 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
1a740 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20   mutex;      /* 
1a750 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20  Low-level mutex 
1a760 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
1a770 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65  qlite3_pcache_me
1a780 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20  thods2 pcache2; 
1a790 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61   /* Low-level pa
1a7a0 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61  ge-cache interfa
1a7b0 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48  ce */.  void *pH
1a7c0 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
1a7d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61            /* Hea
1a7e0 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20  p storage space 
1a7f0 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20  */.  int nHeap; 
1a800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a810 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1a820 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69  f pHeap[] */.  i
1a830 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b  nt mnReq, mxReq;
1a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a850 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20   /* Min and max 
1a860 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69  heap requests si
1a870 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  zes */.  sqlite3
1a880 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20  _int64 szMmap;  
1a890 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d             /* mm
1a8a0 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f  ap() space per o
1a8b0 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71  pen file */.  sq
1a8c0 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d  lite3_int64 mxMm
1a8d0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1a8e0 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65  /* Maximum value
1a8f0 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20   for szMmap */. 
1a900 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b   void *pScratch;
1a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a920 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65     /* Scratch me
1a930 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  mory */.  int sz
1a940 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
1a950 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1a960 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72 61  ize of each scra
1a970 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20  tch buffer */.  
1a980 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20  int nScratch;   
1a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1a9b0 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20 2a  cratch buffers *
1a9c0 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b  /.  void *pPage;
1a9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9e0 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61        /* Page ca
1a9f0 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  che memory */.  
1aa00 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20  int szPage;     
1aa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
1aa30 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b  h page in pPage[
1aa40 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65  ] */.  int nPage
1aa50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1aa60 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1aa70 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70  er of pages in p
1aa80 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
1aa90 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20  mxParserStack;  
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1aab0 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f   maximum depth o
1aac0 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61  f the parser sta
1aad0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72  ck */.  int shar
1aae0 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20  edCacheEnabled; 
1aaf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75            /* tru
1ab00 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68  e if shared-cach
1ab10 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a  e mode enabled *
1ab20 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65  /.  /* The above
1ab30 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61   might be initia
1ab40 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72  lized to non-zer
1ab50 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  o.  The followin
1ab60 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73  g need to always
1ab70 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20  .  ** initially 
1ab80 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72  be zero, however
1ab90 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69  . */.  int isIni
1aba0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1abb0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1abc0 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a   after initializ
1abd0 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68  ation has finish
1abe0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72  ed */.  int inPr
1abf0 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20  ogress;         
1ac00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1ac10 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69  e while initiali
1ac20 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65  zation in progre
1ac30 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75  ss */.  int isMu
1ac40 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20  texInit;        
1ac50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1ac60 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20  e after mutexes 
1ac70 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  are initialized 
1ac80 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f  */.  int isMallo
1ac90 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  cInit;          
1aca0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1acb0 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
1acc0 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1acd0 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74  int isPCacheInit
1ace0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1acf0 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1ad00 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
1ad10 6c 69 7a 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74  lized */.  sqlit
1ad20 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d  e3_mutex *pInitM
1ad30 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20  utex;        /* 
1ad40 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71  Mutex used by sq
1ad50 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
1ad60 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  () */.  int nRef
1ad70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
1ad80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1ad90 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20  ber of users of 
1ada0 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20  pInitMutex */.  
1adb0 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69  void (*xLog)(voi
1adc0 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
1add0 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e  r*); /* Function
1ade0 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a   for logging */.
1adf0 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b    void *pLogArg;
1ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae10 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
1ae20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67  argument to xLog
1ae30 28 29 20 2a 2f 0a 20 20 69 6e 74 20 62 4c 6f 63  () */.  int bLoc
1ae40 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20  altimeFault;    
1ae50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1ae60 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74  e to fail localt
1ae70 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23  ime() calls */.#
1ae80 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1ae90 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69  BLE_SQLLOG.  voi
1aea0 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64  d(*xSqllog)(void
1aeb0 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
1aec0 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20   char*, int);.  
1aed0 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67  void *pSqllogArg
1aee0 3b 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  ;.#endif.};../*.
1aef0 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74  ** Context point
1af00 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74  er passed down t
1af10 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d  hrough the tree-
1af20 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  walk..*/.struct 
1af30 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28  Walker {.  int (
1af40 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28  *xExprCallback)(
1af50 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
1af60 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
1af70 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73   for expressions
1af80 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c   */.  int (*xSel
1af90 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  ectCallback)(Wal
1afa0 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20  ker*,Select*);  
1afb0 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
1afc0 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72  SELECTs */.  Par
1afd0 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aff0 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72         /* Parser
1b000 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20   context.  */.  
1b010 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b  int walkerDepth;
1b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b030 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b040 62 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65  ber of subquerie
1b050 73 20 2a 2f 0a 20 20 75 38 20 62 53 65 6c 65 63  s */.  u8 bSelec
1b060 74 44 65 70 74 68 46 69 72 73 74 3b 20 20 20 20  tDepthFirst;    
1b070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b080 20 2f 2a 20 44 6f 20 73 75 62 71 75 65 72 69 65   /* Do subquerie
1b090 73 20 66 69 72 73 74 20 2a 2f 0a 20 20 75 6e 69  s first */.  uni
1b0a0 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  on {            
1b0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0c0 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20         /* Extra 
1b0d0 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63  data for callbac
1b0e0 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e  k */.    NameCon
1b0f0 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20  text *pNC;      
1b100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b110 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f      /* Naming co
1b120 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74  ntext */.    int
1b130 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
1b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b150 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
1b160 65 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  er value */.    
1b170 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
1b180 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1b190 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52             /* FR
1b1a0 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  OM clause */.   
1b1b0 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74   struct SrcCount
1b1c0 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20   *pSrcCount;    
1b1d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1b1e0 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72  ounting column r
1b1f0 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d  eferences */.  }
1b200 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61   u;.};../* Forwa
1b210 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  rd declarations 
1b220 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  */.int sqlite3Wa
1b230 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  lkExpr(Walker*, 
1b240 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
1b250 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28  te3WalkExprList(
1b260 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73  Walker*, ExprLis
1b270 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1b280 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65  WalkSelect(Walke
1b290 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
1b2a0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
1b2b0 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  ectExpr(Walker*,
1b2c0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
1b2d0 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
1b2e0 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65  From(Walker*, Se
1b2f0 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52  lect*);../*.** R
1b300 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
1b310 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77  the parse-tree w
1b320 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65  alking primitive
1b330 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63  s and their.** c
1b340 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65  allbacks..*/.#de
1b350 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75  fine WRC_Continu
1b360 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74  e    0   /* Cont
1b370 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63  inue down into c
1b380 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69  hildren */.#defi
1b390 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20  ne WRC_Prune    
1b3a0 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63     1   /* Omit c
1b3b0 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74  hildren but cont
1b3c0 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62  inue walking sib
1b3d0 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65  lings */.#define
1b3e0 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20   WRC_Abort      
1b3f0 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20   2   /* Abandon 
1b400 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f  the tree walk */
1b410 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67  ../*.** Assuming
1b420 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74   zIn points to t
1b430 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
1b440 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74   a UTF-8 charact
1b450 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a  er,.** advance z
1b460 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  In to point to t
1b470 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
1b480 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20   the next UTF-8 
1b490 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64  character..*/.#d
1b4a0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49  efine SQLITE_SKI
1b4b0 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20  P_UTF8(zIn) {   
1b4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4d0 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28       \.  if( (*(
1b4e0 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b  zIn++))>=0xc0 ){
1b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
1b510 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e      while( (*zIn
1b520 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29   & 0xc0)==0x80 )
1b530 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20  { zIn++; }      
1b540 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20         \.  }    
1b550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b580 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  \.}../*.** The S
1b590 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63  QLITE_*_BKPT mac
1b5a0 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75  ros are substitu
1b5b0 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f  tes for the erro
1b5c0 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20  r codes with.** 
1b5d0 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75  the same name bu
1b5e0 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42  t without the _B
1b5f0 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65  KPT suffix.  The
1b600 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65  se macros invoke
1b610 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61  .** routines tha
1b620 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e  t report the lin
1b630 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63  e-number on whic
1b640 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67  h the error orig
1b650 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  inated.** using 
1b660 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20  sqlite3_log().  
1b670 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73  The routines als
1b680 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
1b690 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20  enient place.** 
1b6a0 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65  to set a debugge
1b6b0 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f  r breakpoint..*/
1b6c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72  .int sqlite3Corr
1b6d0 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  uptError(int);.i
1b6e0 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  nt sqlite3Misuse
1b6f0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20  Error(int);.int 
1b700 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
1b710 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69  rror(int);.#defi
1b720 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
1b730 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f  T_BKPT sqlite3Co
1b740 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e  rruptError(__LIN
1b750 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
1b760 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20  ITE_MISUSE_BKPT 
1b770 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72  sqlite3MisuseErr
1b780 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
1b790 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54  fine SQLITE_CANT
1b7a0 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65  OPEN_BKPT sqlite
1b7b0 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f  3CantopenError(_
1b7c0 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a  _LINE__).../*.**
1b7d0 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20   FTS4 is really 
1b7e0 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72  an extension for
1b7f0 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e   FTS3.  It is en
1b800 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a  abled using the.
1b810 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
1b820 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75  _FTS3 macro.  Bu
1b830 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  t to avoid confu
1b840 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 61 6c 6c  sion we also all
1b850 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45  .** the SQLITE_E
1b860 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f  NABLE_FTS4 macro
1b870 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20   to serve as an 
1b880 61 6c 69 73 73 65 20 66 6f 72 20 53 51 4c 49 54  alisse for SQLIT
1b890 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a  E_ENABLE_FTS3..*
1b8a0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
1b8b0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
1b8c0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
1b8d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1b8e0 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1b8f0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 65  E_ENABLE_FTS3.#e
1b900 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
1b910 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69  ctype.h header i
1b920 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e  s needed for non
1b930 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20  -ASCII systems. 
1b940 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e   It is also.** n
1b950 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68  eeded by FTS3 wh
1b960 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75  en FTS3 is inclu
1b970 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67  ded in the amalg
1b980 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  amation..*/.#if 
1b990 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1b9a0 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20  ASCII) || \.    
1b9b0 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
1b9c0 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20  ENABLE_FTS3) && 
1b9d0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
1b9e0 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20  MALGAMATION)).# 
1b9f0 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
1ba00 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  >.#endif../*.** 
1ba10 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
1ba20 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73  cros mimic the s
1ba30 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20  tandard library 
1ba40 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65  functions touppe
1ba50 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28  r(),.** isspace(
1ba60 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73  ), isalnum(), is
1ba70 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64  digit() and isxd
1ba80 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69  igit(), respecti
1ba90 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c  vely. The.** sql
1baa0 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c  ite versions onl
1bab0 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49  y work for ASCII
1bac0 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67   characters, reg
1bad0 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c  ardless of local
1bae0 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
1baf0 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69  ITE_ASCII.# defi
1bb00 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
1bb10 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c  r(x)  ((x)&~(sql
1bb20 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1bb30 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1bb40 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65  &0x20)).# define
1bb50 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
1bb60 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
1bb70 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1bb80 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a  char)(x)]&0x01).
1bb90 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1bba0 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71  Isalnum(x)   (sq
1bbb0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1bbc0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1bbd0 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65  ]&0x06).# define
1bbe0 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
1bbf0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
1bc00 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1bc10 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a  char)(x)]&0x02).
1bc20 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1bc30 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71  Isdigit(x)   (sq
1bc40 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1bc50 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1bc60 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65  ]&0x04).# define
1bc70 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
1bc80 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79  (x)  (sqlite3Cty
1bc90 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1bca0 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a  char)(x)]&0x08).
1bcb0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1bcc0 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71  Tolower(x)   (sq
1bcd0 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
1bce0 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r[(unsigned char
1bcf0 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64  )(x)]).#else.# d
1bd00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
1bd10 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65  pper(x)   touppe
1bd20 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
1bd30 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1bd40 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
1bd50 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69     isspace((unsi
1bd60 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1bd70 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1bd80 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c  salnum(x)   isal
1bd90 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68  num((unsigned ch
1bda0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1bdb0 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
1bdc0 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e  x)   isalpha((un
1bdd0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1bde0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1bdf0 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73  3Isdigit(x)   is
1be00 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
1be10 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1be20 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
1be30 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28  it(x)  isxdigit(
1be40 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1be50 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1be60 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
1be70 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e   tolower((unsign
1be80 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e  ed char)(x)).#en
1be90 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72  dif../*.** Inter
1bea0 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f  nal function pro
1beb0 74 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69  totypes.*/.#defi
1bec0 6e 65 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  ne sqlite3StrICm
1bed0 70 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d  p sqlite3_stricm
1bee0 70 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  p.int sqlite3Str
1bef0 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72  len30(const char
1bf00 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  *);.#define sqli
1bf10 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69  te3StrNICmp sqli
1bf20 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e  te3_strnicmp..in
1bf30 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49  t sqlite3MallocI
1bf40 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  nit(void);.void 
1bf50 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64  sqlite3MallocEnd
1bf60 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71  (void);.void *sq
1bf70 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e 74 29  lite3Malloc(int)
1bf80 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d  ;.void *sqlite3M
1bf90 61 6c 6c 6f 63 5a 65 72 6f 28 69 6e 74 29 3b 0a  allocZero(int);.
1bfa0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
1bfb0 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65  allocZero(sqlite
1bfc0 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  3*, int);.void *
1bfd0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
1bfe0 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  aw(sqlite3*, int
1bff0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1c000 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33  DbStrDup(sqlite3
1c010 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
1c020 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
1c030 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  trNDup(sqlite3*,
1c040 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
1c050 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1c060 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 69  Realloc(void*, i
1c070 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1c080 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65  e3DbReallocOrFre
1c090 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  e(sqlite3 *, voi
1c0a0 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  d *, int);.void 
1c0b0 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
1c0c0 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  c(sqlite3 *, voi
1c0d0 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  d *, int);.void 
1c0e0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71  sqlite3DbFree(sq
1c0f0 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
1c100 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
1c110 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e  cSize(void*);.in
1c120 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  t sqlite3DbMallo
1c130 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20  cSize(sqlite3*, 
1c140 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
1c150 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c  lite3ScratchMall
1c160 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
1c170 6c 69 74 65 33 53 63 72 61 74 63 68 46 72 65 65  lite3ScratchFree
1c180 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73  (void*);.void *s
1c190 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63  qlite3PageMalloc
1c1a0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
1c1b0 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64  te3PageFree(void
1c1c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1c1d0 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f  MemSetDefault(vo
1c1e0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1c1f0 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f  3BenignMallocHoo
1c200 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ks(void (*)(void
1c210 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ), void (*)(void
1c220 29 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 48  ));.int sqlite3H
1c230 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f  eapNearlyFull(vo
1c240 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73  id);../*.** On s
1c250 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c  ystems with ampl
1c260 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e  e stack space an
1c270 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61  d that support a
1c280 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a  lloca(), make.**
1c290 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29   use of alloca()
1c2a0 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65   to obtain space
1c2b0 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d   for large autom
1c2c0 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42  atic objects.  B
1c2d0 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62  y default,.** ob
1c2e0 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20  tain space from 
1c2f0 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20  malloc()..**.** 
1c300 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75  The alloca() rou
1c310 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72  tine never retur
1c320 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77  ns NULL.  This w
1c330 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70  ill cause code p
1c340 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61  aths.** that dea
1c350 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74  l with sqlite3St
1c360 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75  ackAlloc() failu
1c370 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63  res to be unreac
1c380 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  hable..*/.#ifdef
1c390 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f   SQLITE_USE_ALLO
1c3a0 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  CA.# define sqli
1c3b0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
1c3c0 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e  (D,N)   alloca(N
1c3d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1c3e0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
1c3f0 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c  (D,N)  memset(al
1c400 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23  loca(N), 0, N).#
1c410 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
1c420 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20  tackFree(D,P)   
1c430 20 20 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66      .#else.# def
1c440 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1c450 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
1c460 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
1c470 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  aw(D,N).# define
1c480 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
1c490 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c  ocZero(D,N)  sql
1c4a0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
1c4b0 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
1c4c0 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
1c4d0 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74  D,P)       sqlit
1c4e0 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65  e3DbFree(D,P).#e
1c4f0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
1c500 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
1c510 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S3.const sqlite3
1c520 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
1c530 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
1c540 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s3(void);.#endif
1c550 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1c560 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f  NABLE_MEMSYS5.co
1c570 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
1c580 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
1c590 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f  MemGetMemsys5(vo
1c5a0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  id);.#endif...#i
1c5b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54  fndef SQLITE_MUT
1c5c0 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65  EX_OMIT.  sqlite
1c5d0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
1c5e0 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65  const *sqlite3De
1c5f0 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29  faultMutex(void)
1c600 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
1c610 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
1c620 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65  *sqlite3NoopMute
1c630 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
1c640 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
1c650 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29  3MutexAlloc(int)
1c660 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
1c670 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a  utexInit(void);.
1c680 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
1c690 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e  exEnd(void);.#en
1c6a0 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
1c6b0 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29  StatusValue(int)
1c6c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
1c6d0 61 74 75 73 41 64 64 28 69 6e 74 2c 20 69 6e 74  atusAdd(int, int
1c6e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1c6f0 74 61 74 75 73 53 65 74 28 69 6e 74 2c 20 69 6e  tatusSet(int, in
1c700 74 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  t);..#ifndef SQL
1c710 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
1c720 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71  G_POINT.  int sq
1c730 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c  lite3IsNaN(doubl
1c740 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
1c750 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ne sqlite3IsNaN(
1c760 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f  X)  0.#endif..vo
1c770 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e  id sqlite3VXPrin
1c780 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 69 6e  tf(StrAccum*, in
1c790 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
1c7a0 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 6e 64 65  va_list);.#ifnde
1c7b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
1c7c0 41 43 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ACE.void sqlite3
1c7d0 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
1c7e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
1c7f0 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 63 68 61  ...);.#endif.cha
1c800 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74  r *sqlite3MPrint
1c810 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
1c820 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
1c830 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69  ar *sqlite3VMPri
1c840 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
1c850 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
1c860 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  t);.char *sqlite
1c870 33 4d 41 70 70 65 6e 64 66 28 73 71 6c 69 74 65  3MAppendf(sqlite
1c880 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  3*,char*,const c
1c890 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64  har*,...);.#if d
1c8a0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
1c8b0 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  ST) || defined(S
1c8c0 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76  QLITE_DEBUG).  v
1c8d0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67  oid sqlite3Debug
1c8e0 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
1c8f0 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66  r*, ...);.#endif
1c900 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1c910 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64  ITE_TEST).  void
1c920 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78   *sqlite3TestTex
1c930 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61  tToPtr(const cha
1c940 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  r*);.#endif../* 
1c950 4f 75 74 70 75 74 20 66 6f 72 6d 61 74 74 69 6e  Output formattin
1c960 67 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 53  g for SQLITE_TES
1c970 54 43 54 52 4c 5f 45 58 50 4c 41 49 4e 20 2a 2f  TCTRL_EXPLAIN */
1c980 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1c990 49 54 45 5f 45 4e 41 42 4c 45 5f 54 52 45 45 5f  ITE_ENABLE_TREE_
1c9a0 45 58 50 4c 41 49 4e 29 0a 20 20 76 6f 69 64 20  EXPLAIN).  void 
1c9b0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42 65  sqlite3ExplainBe
1c9c0 67 69 6e 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f  gin(Vdbe*);.  vo
1c9d0 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1c9e0 6e 50 72 69 6e 74 66 28 56 64 62 65 2a 2c 20 63  nPrintf(Vdbe*, c
1c9f0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
1ca00 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1ca10 45 78 70 6c 61 69 6e 4e 4c 28 56 64 62 65 2a 29  ExplainNL(Vdbe*)
1ca20 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1ca30 45 78 70 6c 61 69 6e 50 75 73 68 28 56 64 62 65  ExplainPush(Vdbe
1ca40 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1ca50 65 33 45 78 70 6c 61 69 6e 50 6f 70 28 56 64 62  e3ExplainPop(Vdb
1ca60 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
1ca70 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68  te3ExplainFinish
1ca80 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
1ca90 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53 65  sqlite3ExplainSe
1caa0 6c 65 63 74 28 56 64 62 65 2a 2c 20 53 65 6c 65  lect(Vdbe*, Sele
1cab0 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ct*);.  void sql
1cac0 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 28  ite3ExplainExpr(
1cad0 56 64 62 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 20  Vdbe*, Expr*);. 
1cae0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1caf0 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 56 64 62  lainExprList(Vdb
1cb00 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  e*, ExprList*);.
1cb10 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71    const char *sq
1cb20 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61  lite3VdbeExplana
1cb30 74 69 6f 6e 28 56 64 62 65 2a 29 3b 0a 23 65 6c  tion(Vdbe*);.#el
1cb40 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1cb50 74 65 33 45 78 70 6c 61 69 6e 42 65 67 69 6e 28  te3ExplainBegin(
1cb60 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  X).# define sqli
1cb70 74 65 33 45 78 70 6c 61 69 6e 53 65 6c 65 63 74  te3ExplainSelect
1cb80 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
1cb90 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70  qlite3ExplainExp
1cba0 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
1cbb0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78  sqlite3ExplainEx
1cbc0 70 72 4c 69 73 74 28 41 2c 42 29 0a 23 20 64 65  prList(A,B).# de
1cbd0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
1cbe0 61 69 6e 46 69 6e 69 73 68 28 58 29 0a 23 20 64  ainFinish(X).# d
1cbf0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
1cc00 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 58 29 20  eExplanation(X) 
1cc10 30 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20  0.#endif...void 
1cc20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
1cc30 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65  (char **, sqlite
1cc40 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  3*, const char*,
1cc50 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
1cc60 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73  te3ErrorMsg(Pars
1cc70 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
1cc80 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74   ...);.int sqlit
1cc90 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29  e3Dequote(char*)
1cca0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  ;.int sqlite3Key
1ccb0 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75  wordCode(const u
1ccc0 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69  nsigned char*, i
1ccd0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1cce0 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a  RunParser(Parse*
1ccf0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
1cd00 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  har **);.void sq
1cd10 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e  lite3FinishCodin
1cd20 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  g(Parse*);.int s
1cd30 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67  qlite3GetTempReg
1cd40 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1cd50 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
1cd60 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29  pReg(Parse*,int)
1cd70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
1cd80 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
1cd90 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1cda0 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61  te3ReleaseTempRa
1cdb0 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  nge(Parse*,int,i
1cdc0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1cdd0 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63  3ClearTempRegCac
1cde0 68 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72  he(Parse*);.Expr
1cdf0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c   *sqlite3ExprAll
1ce00 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
1ce10 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74  const Token*,int
1ce20 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1ce30 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Expr(sqlite3*,in
1ce40 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
1ce50 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1ce60 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73  AttachSubtrees(s
1ce70 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78  qlite3*,Expr*,Ex
1ce80 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  pr*,Expr*);.Expr
1ce90 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50   *sqlite3PExpr(P
1cea0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  arse*, int, Expr
1ceb0 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  *, Expr*, const 
1cec0 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73  Token*);.Expr *s
1ced0 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71  qlite3ExprAnd(sq
1cee0 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78  lite3*,Expr*, Ex
1cef0 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
1cf00 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  te3ExprFunction(
1cf10 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
1cf20 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
1cf30 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67  sqlite3ExprAssig
1cf40 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65  nVarNumber(Parse
1cf50 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
1cf60 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74  sqlite3ExprDelet
1cf70 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
1cf80 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
1cf90 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
1cfa0 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  end(Parse*,ExprL
1cfb0 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  ist*,Expr*);.voi
1cfc0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
1cfd0 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c  tSetName(Parse*,
1cfe0 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a  ExprList*,Token*
1cff0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1d000 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70  te3ExprListSetSp
1d010 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  an(Parse*,ExprLi
1d020 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a  st*,ExprSpan*);.
1d030 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1d040 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
1d050 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  e3*, ExprList*);
1d060 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
1d070 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a  (sqlite3*, char*
1d080 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
1d090 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64  nitCallback(void
1d0a0 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20  *, int, char**, 
1d0b0 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
1d0c0 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73  lite3Pragma(Pars
1d0d0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
1d0e0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
1d0f0 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41  id sqlite3ResetA
1d100 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
1d110 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b  ction(sqlite3*);
1d120 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
1d130 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69  etOneSchema(sqli
1d140 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
1d150 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44  sqlite3CollapseD
1d160 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c  atabaseArray(sql
1d170 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
1d180 69 74 65 33 42 65 67 69 6e 50 61 72 73 65 28 50  ite3BeginParse(P
1d190 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
1d1a0 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e   sqlite3CommitIn
1d1b0 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71  ternalChanges(sq
1d1c0 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c 65 20 2a  lite3*);.Table *
1d1d0 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74  sqlite3ResultSet
1d1e0 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  OfSelect(Parse*,
1d1f0 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73  Select*);.void s
1d200 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72  qlite3OpenMaster
1d210 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69  Table(Parse *, i
1d220 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1d230 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73  3StartTable(Pars
1d240 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
1d250 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
1d260 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1d270 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  ddColumn(Parse*,
1d280 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1d290 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28  lite3AddNotNull(
1d2a0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
1d2b0 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69  id sqlite3AddPri
1d2c0 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20  maryKey(Parse*, 
1d2d0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
1d2e0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1d2f0 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43  sqlite3AddCheckC
1d300 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
1d310 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
1d320 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54  qlite3AddColumnT
1d330 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ype(Parse*,Token
1d340 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d350 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28  AddDefaultValue(
1d360 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a  Parse*,ExprSpan*
1d370 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1d380 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61  ddCollateType(Pa
1d390 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
1d3a0 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61  oid sqlite3EndTa
1d3b0 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
1d3c0 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a  *,Token*,Select*
1d3d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61  );.int sqlite3Pa
1d3e0 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61  rseUri(const cha
1d3f0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  r*,const char*,u
1d400 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20  nsigned int*,.  
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d420 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c    sqlite3_vfs**,
1d430 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b  char**,char **);
1d440 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44  .Btree *sqlite3D
1d450 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c  bNameToBtree(sql
1d460 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1d470 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
1d480 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29  odeOnce(Parse *)
1d490 3b 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74  ;..Bitvec *sqlit
1d4a0 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75  e3BitvecCreate(u
1d4b0 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
1d4c0 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65  BitvecTest(Bitve
1d4d0 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71  c*, u32);.int sq
1d4e0 6c 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42  lite3BitvecSet(B
1d4f0 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f  itvec*, u32);.vo
1d500 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
1d510 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75  Clear(Bitvec*, u
1d520 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  32, void*);.void
1d530 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65   sqlite3BitvecDe
1d540 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a  stroy(Bitvec*);.
1d550 75 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65  u32 sqlite3Bitve
1d560 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a  cSize(Bitvec*);.
1d570 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
1d580 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74  cBuiltinTest(int
1d590 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65 74 20  ,int*);..RowSet 
1d5a0 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e  *sqlite3RowSetIn
1d5b0 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  it(sqlite3*, voi
1d5c0 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  d*, unsigned int
1d5d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1d5e0 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65  owSetClear(RowSe
1d5f0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1d600 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f  3RowSetInsert(Ro
1d610 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74  wSet*, i64);.int
1d620 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
1d630 73 74 28 52 6f 77 53 65 74 2a 2c 20 75 38 20 69  st(RowSet*, u8 i
1d640 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74  Batch, i64);.int
1d650 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
1d660 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a  xt(RowSet*, i64*
1d670 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
1d680 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65  CreateView(Parse
1d690 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
1d6a0 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69  Token*,Select*,i
1d6b0 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  nt,int);..#if !d
1d6c0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1d6d0 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66  IT_VIEW) || !def
1d6e0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1d6f0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20  _VIRTUALTABLE). 
1d700 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77   int sqlite3View
1d710 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50  GetColumnNames(P
1d720 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  arse*,Table*);.#
1d730 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
1d740 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
1d750 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23  mnNames(A,B) 0.#
1d760 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
1d770 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72  te3DropTable(Par
1d780 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
1d790 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1d7a0 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61  qlite3CodeDropTa
1d7b0 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ble(Parse*, Tabl
1d7c0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
1d7d0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
1d7e0 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
1d7f0 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65   Table*);.#ifnde
1d800 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
1d810 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f  TOINCREMENT.  vo
1d820 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
1d830 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72  crementBegin(Par
1d840 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76  se *pParse);.  v
1d850 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
1d860 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73  ncrementEnd(Pars
1d870 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73  e *pParse);.#els
1d880 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1d890 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
1d8a0 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
1d8b0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
1d8c0 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64  ementEnd(X).#end
1d8d0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  if.int sqlite3Co
1d8e0 64 65 43 6f 72 6f 75 74 69 6e 65 28 50 61 72 73  deCoroutine(Pars
1d8f0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c  e*, Select*, Sel
1d900 65 63 74 44 65 73 74 2a 29 3b 0a 76 6f 69 64 20  ectDest*);.void 
1d910 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61  sqlite3Insert(Pa
1d920 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1d930 45 78 70 72 4c 69 73 74 2a 2c 20 53 65 6c 65 63  ExprList*, Selec
1d940 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74  t*, IdList*, int
1d950 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1d960 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71  ArrayAllocate(sq
1d970 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74  lite3*,void*,int
1d980 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c  ,int*,int*);.IdL
1d990 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
1d9a0 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
1d9b0 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65  *, IdList*, Toke
1d9c0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
1d9d0 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69  IdListIndex(IdLi
1d9e0 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  st*,const char*)
1d9f0 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
1da00 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65  e3SrcListEnlarge
1da10 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
1da20 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
1da30 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
1da40 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71  SrcListAppend(sq
1da50 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
1da60 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
1da70 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
1da80 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
1da90 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c  FromTerm(Parse*,
1daa0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
1dab0 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  *, Token*,.     
1dac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dae0 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a   Token*, Select*
1daf0 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a  , Expr*, IdList*
1db00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1db10 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28  rcListIndexedBy(
1db20 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
1db30 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e   *, Token *);.in
1db40 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
1db50 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
1db60 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
1db70 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
1db80 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
1db90 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
1dba0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
1dbb0 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
1dbc0 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
1dbd0 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
1dbe0 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
1dbf0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
1dc00 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
1dc10 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
1dc20 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
1dc30 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
1dc40 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28  ite3CreateIndex(
1dc50 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
1dc60 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ken*,SrcList*,Ex
1dc70 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65  prList*,int,Toke
1dc80 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
1dc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
1dca0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
1dcb0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
1dcc0 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72  Index(Parse*, Sr
1dcd0 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  cList*, int);.in
1dce0 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28  t sqlite3Select(
1dcf0 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
1dd00 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53   SelectDest*);.S
1dd10 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
1dd20 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45  lectNew(Parse*,E
1dd30 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  xprList*,SrcList
1dd40 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
1dd50 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
1dd70 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
1dd80 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  Expr*,Expr*);.vo
1dd90 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
1dda0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
1ddb0 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65   Select*);.Table
1ddc0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
1ddd0 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53  Lookup(Parse*, S
1dde0 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
1ddf0 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28  lite3IsReadOnly(
1de00 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
1de10 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1de20 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73  e3OpenTable(Pars
1de30 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e  e*, int iCur, in
1de40 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69  t iDb, Table*, i
1de50 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  nt);.#if defined
1de60 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  (SQLITE_ENABLE_U
1de70 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
1de80 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
1de90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
1dea0 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69  UERY).Expr *sqli
1deb0 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61  te3LimitWhere(Pa
1dec0 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
1ded0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
1dee0 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29  pr*,Expr*,char*)
1def0 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
1df00 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28  lite3DeleteFrom(
1df10 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1df20 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
1df30 71 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72  qlite3Update(Par
1df40 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
1df50 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
1df60 20 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f   int);.WhereInfo
1df70 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65   *sqlite3WhereBe
1df80 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  gin(Parse*,SrcLi
1df90 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
1dfa0 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31  st*,ExprList*,u1
1dfb0 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  6,int);.void sql
1dfc0 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65  ite3WhereEnd(Whe
1dfd0 72 65 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71  reInfo*);.u64 sq
1dfe0 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74  lite3WhereOutput
1dff0 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e  RowCount(WhereIn
1e000 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
1e010 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
1e020 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
1e030 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
1e040 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66  Ordered(WhereInf
1e050 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
1e060 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62  WhereContinueLab
1e070 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
1e080 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
1e090 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65  BreakLabel(Where
1e0a0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
1e0b0 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73  te3WhereOkOnePas
1e0c0 73 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  s(WhereInfo*);.i
1e0d0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1e0e0 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73  deGetColumn(Pars
1e0f0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1e100 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
1e110 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1e120 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54  CodeGetColumnOfT
1e130 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c  able(Vdbe*, Tabl
1e140 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1e150 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e160 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72  ExprCodeMove(Par
1e170 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
1e180 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1e190 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28  3ExprCacheStore(
1e1a0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
1e1b0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1e1c0 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73  ite3ExprCachePus
1e1d0 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  h(Parse*);.void 
1e1e0 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
1e1f0 50 6f 70 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  Pop(Parse*, int)
1e200 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1e210 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61  prCacheRemove(Pa
1e220 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
1e230 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1e240 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73  rCacheClear(Pars
1e250 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1e260 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69  3ExprCacheAffini
1e270 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c  tyChange(Parse*,
1e280 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
1e290 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28  sqlite3ExprCode(
1e2a0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
1e2b0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1e2c0 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72  ExprCodeTemp(Par
1e2d0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a  se*, Expr*, int*
1e2e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1e2f0 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72  prCodeTarget(Par
1e300 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
1e310 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1e320 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
1e330 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1e340 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e350 78 70 72 43 6f 64 65 43 6f 6e 73 74 61 6e 74 73  xprCodeConstants
1e360 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
1e370 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1e380 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
1e390 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
1e3a0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1e3b0 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75  sqlite3ExprIfTru
1e3c0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
1e3d0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1e3e0 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
1e3f0 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  lse(Parse*, Expr
1e400 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61  *, int, int);.Ta
1e410 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  ble *sqlite3Find
1e420 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63  Table(sqlite3*,c
1e430 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
1e440 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20  t char*);.Table 
1e450 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
1e460 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69  ble(Parse*,int i
1e470 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72  sView,const char
1e480 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
1e490 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
1e4a0 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50  ocateTableItem(P
1e4b0 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77  arse*,int isView
1e4c0 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f  ,struct SrcList_
1e4d0 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a  item *);.Index *
1e4e0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78  sqlite3FindIndex
1e4f0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1e500 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
1e510 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1e520 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
1e530 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69  Table(sqlite3*,i
1e540 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1e550 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
1e560 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
1e570 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  x(sqlite3*,int,c
1e580 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
1e590 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28  d sqlite3Vacuum(
1e5a0 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
1e5b0 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68  ite3RunVacuum(ch
1e5c0 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b  ar**, sqlite3*);
1e5d0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61  .char *sqlite3Na
1e5e0 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69  meFromToken(sqli
1e5f0 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
1e600 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1e610 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70  mpare(Expr*, Exp
1e620 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
1e630 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d  lite3ExprListCom
1e640 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20  pare(ExprList*, 
1e650 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
1e660 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1e670 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78 70 72  ImpliesExpr(Expr
1e680 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
1e690 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1e6a0 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65  AnalyzeAggregate
1e6b0 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
1e6c0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
1e6d0 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
1e6e0 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65  ggList(NameConte
1e6f0 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  xt*,ExprList*);.
1e700 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74  int sqlite3Funct
1e710 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45  ionUsesThisSrc(E
1e720 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xpr*, SrcList*);
1e730 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65  .Vdbe *sqlite3Ge
1e740 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 76  tVdbe(Parse*);.v
1e750 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53  oid sqlite3PrngS
1e760 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  aveState(void);.
1e770 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
1e780 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69  RestoreState(voi
1e790 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
1e7a0 50 72 6e 67 52 65 73 65 74 53 74 61 74 65 28 76  PrngResetState(v
1e7b0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
1e7c0 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71  e3RollbackAll(sq
1e7d0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
1e7e0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
1e7f0 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a  ifySchema(Parse*
1e800 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1e810 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61  ite3CodeVerifyNa
1e820 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a  medSchema(Parse*
1e830 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44  , const char *zD
1e840 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  b);.void sqlite3
1e850 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
1e860 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
1e870 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
1e880 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  tTransaction(Par
1e890 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
1e8a0 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61  e3RollbackTransa
1e8b0 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76  ction(Parse*);.v
1e8c0 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70  oid sqlite3Savep
1e8d0 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  oint(Parse*, int
1e8e0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
1e8f0 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
1e900 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a  points(sqlite3 *
1e910 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c  );.void sqlite3L
1e920 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73  eaveMutexAndClos
1e930 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a  eZombie(sqlite3*
1e940 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1e950 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
1e960 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1e970 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
1e980 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
1e990 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
1e9a0 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
1e9b0 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
1e9c0 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67  lite3ExprIsInteg
1e9d0 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  er(Expr*, int*);
1e9e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1e9f0 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20  CanBeNull(const 
1ea00 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
1ea10 69 74 65 33 45 78 70 72 43 6f 64 65 49 73 4e 75  ite3ExprCodeIsNu
1ea20 6c 6c 4a 75 6d 70 28 56 64 62 65 2a 2c 20 63 6f  llJump(Vdbe*, co
1ea30 6e 73 74 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  nst Expr*, int, 
1ea40 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1ea50 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69  3ExprNeedsNoAffi
1ea60 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74  nityChange(const
1ea70 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69   Expr*, char);.i
1ea80 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69  nt sqlite3IsRowi
1ea90 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  d(const char*);.
1eaa0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
1eab0 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61  rateRowDelete(Pa
1eac0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
1ead0 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 54 72 69  t, int, int, Tri
1eae0 67 67 65 72 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f  gger *, int);.vo
1eaf0 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
1eb00 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65  teRowIndexDelete
1eb10 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
1eb20 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74   int, int*);.int
1eb30 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
1eb40 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c  IndexKey(Parse*,
1eb50 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
1eb60 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 76  t, int, int*);.v
1eb70 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
1eb80 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65  ateConstraintChe
1eb90 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  cks(Parse*,Table
1eba0 2a 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20  *,int,int,.     
1ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebd0 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
1ebe0 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64  ,int,int*);.void
1ebf0 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65   sqlite3Complete
1ec00 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a  Insertion(Parse*
1ec10 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1ec20 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20 69  nt, int*, int, i
1ec30 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1ec40 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
1ec50 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
1ec60 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1ec70 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1ec80 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
1ec90 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
1eca0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1ecb0 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
1ecc0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1ecd0 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
1ece0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1ecf0 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
1ed00 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
1ed10 2c 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 45  , char*, int);.E
1ed20 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
1ed30 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
1ed40 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73  r*,int);.ExprLis
1ed50 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
1ed60 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  stDup(sqlite3*,E
1ed70 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53  xprList*,int);.S
1ed80 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
1ed90 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  rcListDup(sqlite
1eda0 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29  3*,SrcList*,int)
1edb0 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
1edc0 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74  3IdListDup(sqlit
1edd0 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65  e3*,IdList*);.Se
1ede0 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
1edf0 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  ectDup(sqlite3*,
1ee00 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f  Select*,int);.vo
1ee10 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65  id sqlite3FuncDe
1ee20 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48  fInsert(FuncDefH
1ee30 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b  ash*, FuncDef*);
1ee40 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
1ee50 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71  3FindFunction(sq
1ee60 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1ee70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38  r*,int,int,u8,u8
1ee80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1ee90 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75  egisterBuiltinFu
1eea0 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
1eeb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1eec0 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46  egisterDateTimeF
1eed0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
1eee0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
1eef0 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69  sterGlobalFuncti
1ef00 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ons(void);.int s
1ef10 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
1ef20 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  kOk(sqlite3*);.i
1ef30 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
1ef40 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
1ef50 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
1ef60 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69  lite3ChangeCooki
1ef70 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  e(Parse*, int);.
1ef80 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1ef90 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
1efa0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1efb0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
1efc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74  .void sqlite3Mat
1efd0 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72  erializeView(Par
1efe0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
1eff0 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66  r*, int);.#endif
1f000 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
1f010 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
1f020 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
1f030 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  nTrigger(Parse*,
1f040 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69   Token*,Token*,i
1f050 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53  nt,int,IdList*,S
1f060 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  rcList*,.       
1f070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f080 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69      Expr*,int, i
1f090 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
1f0a0 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72  te3FinishTrigger
1f0b0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
1f0c0 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
1f0d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
1f0e0 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
1f0f0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
1f100 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1f110 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50  DropTriggerPtr(P
1f120 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29  arse*, Trigger*)
1f130 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
1f140 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
1f150 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
1f160 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
1f170 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a  *, int *pMask);.
1f180 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
1f190 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61  e3TriggerList(Pa
1f1a0 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  rse *, Table *);
1f1b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
1f1c0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61  odeRowTrigger(Pa
1f1d0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  rse*, Trigger *,
1f1e0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
1f1f0 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20   int, Table *,. 
1f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f210 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
1f220 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
1f230 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
1f240 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61  TriggerDirect(Pa
1f250 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a  rse *, Trigger *
1f260 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
1f270 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
1f280 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67  d sqliteViewTrig
1f290 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62  gers(Parse*, Tab
1f2a0 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  le*, Expr*, int,
1f2b0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76   ExprList*);.  v
1f2c0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
1f2d0 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c  eTriggerStep(sql
1f2e0 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74  ite3*, TriggerSt
1f2f0 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ep*);.  TriggerS
1f300 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
1f310 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71  gerSelectStep(sq
1f320 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b  lite3*,Select*);
1f330 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1f340 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e  sqlite3TriggerIn
1f350 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33  sertStep(sqlite3
1f360 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  *,Token*, IdList
1f370 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f390 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 4c             ExprL
1f3a0 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 75 38 29  ist*,Select*,u8)
1f3b0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
1f3c0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55  *sqlite3TriggerU
1f3d0 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65  pdateStep(sqlite
1f3e0 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  3*,Token*,ExprLi
1f3f0 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b  st*, Expr*, u8);
1f400 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1f410 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65  sqlite3TriggerDe
1f420 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  leteStep(sqlite3
1f430 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29  *,Token*, Expr*)
1f440 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1f450 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
1f460 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a  lite3*, Trigger*
1f470 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1f480 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
1f490 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
1f4a0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
1f4b0 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
1f4c0 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50  TriggerColmask(P
1f4d0 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45  arse*,Trigger*,E
1f4e0 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74  xprList*,int,int
1f4f0 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20  ,Table*,int);.# 
1f500 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
1f510 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  rseToplevel(p) (
1f520 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f  (p)->pToplevel ?
1f530 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20   (p)->pToplevel 
1f540 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64  : (p)).#else.# d
1f550 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
1f560 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
1f570 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
1f580 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
1f590 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
1f5a0 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
1f5b0 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
1f5c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
1f5d0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
1f5e0 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
1f5f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
1f600 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
1f610 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
1f620 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
1f630 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
1f640 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
1f650 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f660 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
1f670 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
1f680 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
1f690 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
1f6a0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
1f6b0 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
1f6c0 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
1f6d0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
1f6e0 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
1f6f0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
1f700 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
1f710 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
1f720 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
1f730 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
1f740 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
1f750 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
1f760 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
1f770 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
1f780 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
1f790 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
1f7a0 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
1f7b0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
1f7c0 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
1f7d0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
1f7e0 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
1f7f0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
1f800 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
1f810 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
1f820 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
1f830 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
1f840 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
1f850 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
1f860 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
1f870 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
1f880 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
1f890 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
1f8a0 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
1f8b0 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
1f8c0 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
1f8d0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1f8e0 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
1f8f0 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
1f900 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
1f910 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
1f920 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
1f930 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
1f940 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
1f950 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
1f960 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
1f970 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
1f980 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
1f990 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
1f9a0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
1f9b0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1f9c0 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
1f9d0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
1f9e0 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
1f9f0 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
1fa00 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
1fa10 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
1fa20 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
1fa30 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
1fa40 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
1fa50 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
1fa60 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
1fa70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
1fa80 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
1fa90 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
1faa0 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
1fab0 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
1fac0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1fad0 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
1fae0 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
1faf0 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
1fb00 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
1fb10 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
1fb20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
1fb30 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
1fb40 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
1fb50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
1fb60 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
1fb70 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
1fb80 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
1fb90 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
1fba0 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69  nChar);.int sqli
1fbb0 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
1fbc0 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
1fbd0 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
1fbe0 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
1fbf0 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 0a  d(const u8**);..
1fc00 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74  /*.** Routines t
1fc10 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  o read and write
1fc20 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
1fc30 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73   integers.  Thes
1fc40 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
1fc50 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c  defined locally,
1fc60 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20   but now we use 
1fc70 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69  the varint routi
1fc80 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e  nes in the util.
1fc90 63 0a 2a 2a 20 66 69 6c 65 2e 20 20 43 6f 64 65  c.** file.  Code
1fca0 20 73 68 6f 75 6c 64 20 75 73 65 20 74 68 65 20   should use the 
1fcb0 4d 41 43 52 4f 20 66 6f 72 6d 73 20 62 65 6c 6f  MACRO forms belo
1fcc0 77 2c 20 61 73 20 74 68 65 20 56 61 72 69 6e 74  w, as the Varint
1fcd0 33 32 20 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 61  32 versions.** a
1fce0 72 65 20 63 6f 64 65 64 20 74 6f 20 61 73 73 75  re coded to assu
1fcf0 6d 65 20 74 68 65 20 73 69 6e 67 6c 65 20 62 79  me the single by
1fd00 74 65 20 63 61 73 65 20 69 73 20 61 6c 72 65 61  te case is alrea
1fd10 64 79 20 68 61 6e 64 6c 65 64 20 28 77 68 69 63  dy handled (whic
1fd20 68 20 0a 2a 2a 20 74 68 65 20 4d 41 43 52 4f 20  h .** the MACRO 
1fd30 66 6f 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69  form does)..*/.i
1fd40 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
1fd50 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
1fd60 72 2a 2c 20 75 36 34 29 3b 0a 69 6e 74 20 73 71  r*, u64);.int sq
1fd70 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32  lite3PutVarint32
1fd80 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
1fd90 20 75 33 32 29 3b 0a 75 38 20 73 71 6c 69 74 65   u32);.u8 sqlite
1fda0 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74  3GetVarint(const
1fdb0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
1fdc0 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c  , u64 *);.u8 sql
1fdd0 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
1fde0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
1fdf0 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69  har *, u32 *);.i
1fe00 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
1fe10 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a  Len(u64 v);../*.
1fe20 2a 2a 20 54 68 65 20 68 65 61 64 65 72 20 6f 66  ** The header of
1fe30 20 61 20 72 65 63 6f 72 64 20 63 6f 6e 73 69 73   a record consis
1fe40 74 73 20 6f 66 20 61 20 73 65 71 75 65 6e 63 65  ts of a sequence
1fe50 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
1fe60 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68   integers..** Th
1fe70 65 73 65 20 69 6e 74 65 67 65 72 73 20 61 72 65  ese integers are
1fe80 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 73   almost always s
1fe90 6d 61 6c 6c 20 61 6e 64 20 61 72 65 20 65 6e 63  mall and are enc
1fea0 6f 64 65 64 20 61 73 20 61 20 73 69 6e 67 6c 65  oded as a single
1feb0 20 62 79 74 65 2e 0a 2a 2a 20 54 68 65 20 66 6f   byte..** The fo
1fec0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 74  llowing macros t
1fed0 61 6b 65 20 61 64 76 61 6e 74 61 67 65 20 74 68  ake advantage th
1fee0 69 73 20 66 61 63 74 20 74 6f 20 70 72 6f 76 69  is fact to provi
1fef0 64 65 20 61 20 66 61 73 74 20 65 6e 63 6f 64 65  de a fast encode
1ff00 0a 2a 2a 20 61 6e 64 20 64 65 63 6f 64 65 20 6f  .** and decode o
1ff10 66 20 74 68 65 20 69 6e 74 65 67 65 72 73 20 69  f the integers i
1ff20 6e 20 61 20 72 65 63 6f 72 64 20 68 65 61 64 65  n a record heade
1ff30 72 2e 20 20 49 74 20 69 73 20 66 61 73 74 65 72  r.  It is faster
1ff40 20 66 6f 72 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a   for the common.
1ff50 2a 2a 20 63 61 73 65 20 77 68 65 72 65 20 74 68  ** case where th
1ff60 65 20 69 6e 74 65 67 65 72 20 69 73 20 61 20 73  e integer is a s
1ff70 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 49 74 20  ingle byte.  It 
1ff80 69 73 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77  is a little slow
1ff90 65 72 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 69  er when the.** i
1ffa0 6e 74 65 67 65 72 20 69 73 20 74 77 6f 20 6f 72  nteger is two or
1ffb0 20 6d 6f 72 65 20 62 79 74 65 73 2e 20 20 42 75   more bytes.  Bu
1ffc0 74 20 6f 76 65 72 61 6c 6c 20 69 74 20 69 73 20  t overall it is 
1ffd0 66 61 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  faster..**.** Th
1ffe0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72  e following expr
1fff0 65 73 73 69 6f 6e 73 20 61 72 65 20 65 71 75 69  essions are equi
20000 76 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20  valent:.**.**   
20010 20 20 78 20 3d 20 73 71 6c 69 74 65 33 47 65 74    x = sqlite3Get
20020 56 61 72 69 6e 74 33 32 28 20 41 2c 20 26 42 20  Varint32( A, &B 
20030 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71  );.**     x = sq
20040 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32  lite3PutVarint32
20050 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20  ( A, B );.**.** 
20060 20 20 20 20 78 20 3d 20 67 65 74 56 61 72 69 6e      x = getVarin
20070 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 20  t32( A, B );.** 
20080 20 20 20 20 78 20 3d 20 70 75 74 56 61 72 69 6e      x = putVarin
20090 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a  t32( A, B );.**.
200a0 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  */.#define getVa
200b0 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
200c0 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29   (u8)((*(A)<(u8)
200d0 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29  0x80)?((B)=(u32)
200e0 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47  *(A)),1:sqlite3G
200f0 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28  etVarint32((A),(
20100 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65  u32 *)&(B))).#de
20110 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32  fine putVarint32
20120 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
20130 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30  ((u32)(B)<(u32)0
20140 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69  x80)?(*(A)=(unsi
20150 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31  gned char)(B)),1
20160 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56  :\.  sqlite3PutV
20170 61 72 69 6e 74 33 32 28 28 41 29 2c 28 42 29 29  arint32((A),(B))
20180 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  ).#define getVar
20190 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65  int    sqlite3Ge
201a0 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20  tVarint.#define 
201b0 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  putVarint    sql
201c0 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a  ite3PutVarint...
201d0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
201e0 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
201f0 53 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65  Str(Vdbe *, Inde
20200 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  x *);.void sqlit
20210 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 53  e3TableAffinityS
20220 74 72 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  tr(Vdbe *, Table
20230 20 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65   *);.char sqlite
20240 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79  3CompareAffinity
20250 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
20260 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71  ar aff2);.int sq
20270 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
20280 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72  tyOk(Expr *pExpr
20290 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e  , char idx_affin
202a0 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ity);.char sqlit
202b0 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45  e3ExprAffinity(E
202c0 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
202d0 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63   sqlite3Atoi64(c
202e0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
202f0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64  , int, u8);.void
20300 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71   sqlite3Error(sq
20310 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
20320 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76  st char*,...);.v
20330 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
20340 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20  oBlob(sqlite3*, 
20350 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
20360 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65  nt n);.u8 sqlite
20370 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29  3HexToInt(int h)
20380 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f  ;.int sqlite3Two
20390 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  PartName(Parse *
203a0 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
203b0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a   *, Token **);..
203c0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
203d0 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
203e0 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
203f0 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e  ) || \.    defin
20400 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 5f  ed(SQLITE_DEBUG_
20410 4f 53 5f 54 52 41 43 45 29 0a 63 6f 6e 73 74 20  OS_TRACE).const 
20420 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
20430 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69  Name(int);.#endi
20440 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  f..const char *s
20450 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74  qlite3ErrStr(int
20460 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
20470 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a  adSchema(Parse *
20480 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71  pParse);.CollSeq
20490 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c   *sqlite3FindCol
204a0 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38  lSeq(sqlite3*,u8
204b0 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72   enc, const char
204c0 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20  *,int);.CollSeq 
204d0 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f  *sqlite3LocateCo
204e0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
204f0 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  rse, const char*
20500 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  zName);.CollSeq 
20510 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c  *sqlite3ExprColl
20520 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
20530 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
20540 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
20550 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65  prAddCollateToke
20560 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  n(Parse *pParse,
20570 20 45 78 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b   Expr*, Token*);
20580 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
20590 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69  prAddCollateStri
205a0 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ng(Parse*,Expr*,
205b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78  const char*);.Ex
205c0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53  pr *sqlite3ExprS
205d0 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a  kipCollate(Expr*
205e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
205f0 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  eckCollSeq(Parse
20600 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a   *, CollSeq *);.
20610 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
20620 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65  ObjectName(Parse
20630 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
20640 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
20650 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71  dbeSetChanges(sq
20660 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69  lite3 *, int);.i
20670 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  nt sqlite3AddInt
20680 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
20690 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  t sqlite3SubInt6
206a0 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
206b0 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34   sqlite3MulInt64
206c0 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
206d0 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28  sqlite3AbsInt32(
206e0 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  int);.#ifdef SQL
206f0 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e  ITE_ENABLE_8_3_N
20700 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65  AMES.void sqlite
20710 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e  3FileSuffix3(con
20720 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29  st char*, char*)
20730 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
20740 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
20750 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a  ix3(X,Y).#endif.
20760 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  u8 sqlite3GetBoo
20770 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  lean(const char 
20780 2a 7a 2c 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20  *z,int);..const 
20790 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c  void *sqlite3Val
207a0 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76  ueText(sqlite3_v
207b0 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  alue*, u8);.int 
207c0 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
207d0 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  s(sqlite3_value*
207e0 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
207f0 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73  te3ValueSetStr(s
20800 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69  qlite3_value*, i
20810 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  nt, const void *
20820 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20  ,u8, .          
20830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f                vo
20840 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
20850 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
20860 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
20870 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
20880 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
20890 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
208a0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
208b0 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
208c0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
208d0 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
208e0 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70  ite3ValueFromExp
208f0 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70  r(sqlite3 *, Exp
20900 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c  r *, u8, u8, sql
20910 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a  ite3_value **);.
20920 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
20930 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73  eApplyAffinity(s
20940 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20  qlite3_value *, 
20950 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66  u8, u8);.#ifndef
20960 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
20970 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73  TION.extern cons
20980 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
20990 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
209a0 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20  perty[];.extern 
209b0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
209c0 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72  har sqlite3Upper
209d0 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72  ToLower[];.exter
209e0 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
209f0 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79   char sqlite3Cty
20a00 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20  peMap[];.extern 
20a10 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69  const Token sqli
20a20 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a  te3IntTokens[];.
20a30 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
20a40 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  D struct Sqlite3
20a50 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
20a60 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c  nfig;.extern SQL
20a70 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48  ITE_WSD FuncDefH
20a80 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ash sqlite3Globa
20a90 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e  lFunctions;.#ifn
20aa0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
20ab0 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73  WSD.extern int s
20ac0 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74  qlite3PendingByt
20ad0 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  e;.#endif.#endif
20ae0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f  .void sqlite3Roo
20af0 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74  tPageMoved(sqlit
20b00 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
20b10 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20b20 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c  3Reindex(Parse*,
20b30 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
20b40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
20b50 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  terFunctions(voi
20b60 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
20b70 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65  AlterRenameTable
20b80 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
20b90 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
20ba0 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28  sqlite3GetToken(
20bb0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
20bc0 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76  har *, int *);.v
20bd0 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65  oid sqlite3Neste
20be0 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63  dParse(Parse*, c
20bf0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
20c00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
20c10 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
20c20 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29  ements(sqlite3*)
20c30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
20c40 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65  eSubselect(Parse
20c50 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c   *, Expr *, int,
20c60 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
20c70 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61  te3SelectPrep(Pa
20c80 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
20c90 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  ameContext*);.in
20ca0 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70  t sqlite3MatchSp
20cb0 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61  anName(const cha
20cc0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
20cd0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
20ce0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
20cf0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
20d00 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74  prNames(NameCont
20d10 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
20d20 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
20d30 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72  eSelectNames(Par
20d40 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
20d50 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
20d60 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
20d70 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61  SelfReference(Pa
20d80 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
20d90 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29  Expr*,ExprList*)
20da0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
20db0 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79  olveOrderGroupBy
20dc0 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
20dd0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
20de0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
20df0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
20e00 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62  ault(Vdbe *, Tab
20e10 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
20e20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
20e30 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d  erFinishAddColum
20e40 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  n(Parse *, Token
20e50 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
20e60 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f  3AlterBeginAddCo
20e70 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72  lumn(Parse *, Sr
20e80 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65  cList *);.CollSe
20e90 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c  q *sqlite3GetCol
20ea0 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c  lSeq(Parse*, u8,
20eb0 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73   CollSeq *, cons
20ec0 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73  t char*);.char s
20ed0 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79  qlite3AffinityTy
20ee0 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  pe(const char*, 
20ef0 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
20f00 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a  e3Analyze(Parse*
20f10 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
20f20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
20f30 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28  vokeBusyHandler(
20f40 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69  BusyHandler*);.i
20f50 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
20f60 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
20f70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
20f80 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65  indDbName(sqlite
20f90 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
20fa0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
20fb0 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69  nalysisLoad(sqli
20fc0 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76  te3*,int iDB);.v
20fd0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
20fe0 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71  eIndexSamples(sq
20ff0 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a  lite3*,Index*);.
21000 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61  void sqlite3Defa
21010 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a  ultRowEst(Index*
21020 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
21030 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74  egisterLikeFunct
21040 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ions(sqlite3*, i
21050 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
21060 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73  IsLikeFunction(s
21070 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
21080 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  t*,char*);.void 
21090 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69  sqlite3MinimumFi
210a0 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c  leFormat(Parse*,
210b0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
210c0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
210d0 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68  ear(void *);.Sch
210e0 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65  ema *sqlite3Sche
210f0 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c  maGet(sqlite3 *,
21100 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73   Btree *);.int s
21110 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e  qlite3SchemaToIn
21120 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  dex(sqlite3 *db,
21130 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49   Schema *);.KeyI
21140 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
21150 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  nfoAlloc(sqlite3
21160 2a 2c 69 6e 74 29 3b 0a 4b 65 79 49 6e 66 6f 20  *,int);.KeyInfo 
21170 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 4b 65 79  *sqlite3IndexKey
21180 69 6e 66 6f 28 50 61 72 73 65 20 2a 2c 20 49 6e  info(Parse *, In
21190 64 65 78 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  dex *);.int sqli
211a0 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71  te3CreateFunc(sq
211b0 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
211c0 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  har *, int, int,
211d0 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64   void *, .  void
211e0 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
211f0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
21200 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
21210 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
21220 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
21230 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
21240 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
21250 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75  _context*),.  Fu
21260 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
21270 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74  estructor.);.int
21280 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
21290 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
212a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
212b0 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50  enTempDatabase(P
212c0 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  arse *);..void s
212d0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
212e0 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 68  it(StrAccum*, ch
212f0 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  ar*, int, int);.
21300 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
21310 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63  ccumAppend(StrAc
21320 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
21330 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
21340 74 65 33 41 70 70 65 6e 64 53 70 61 63 65 28 53  te3AppendSpace(S
21350 74 72 41 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a 63  trAccum*,int);.c
21360 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
21370 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
21380 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
21390 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
213a0 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
213b0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
213c0 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
213d0 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
213e0 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
213f0 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
21400 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
21410 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
21420 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
21430 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
21440 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
21450 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
21460 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
21470 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
21480 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66  t u8 *);..#ifdef
21490 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
214a0 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f  TAT3_OR_STAT4.vo
214b0 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
214c0 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
214d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
214e0 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28  t4ProbeSetValue(
214f0 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
21500 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
21510 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a  xpr*,u8,int,int*
21520 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
21530 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e  tat4ProbeFree(Un
21540 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a  packedRecord*);.
21550 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
21560 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
21570 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74  he LEMON-generat
21580 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69  ed parser.*/.voi
21590 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72  d *sqlite3Parser
215a0 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 73  Alloc(void*(*)(s
215b0 69 7a 65 5f 74 29 29 3b 0a 76 6f 69 64 20 73 71  ize_t));.void sq
215c0 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28  lite3ParserFree(
215d0 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76  void*, void(*)(v
215e0 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
215f0 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a  ite3Parser(void*
21600 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61  , int, Token, Pa
21610 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59  rse*);.#ifdef YY
21620 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50  TRACKMAXSTACKDEP
21630 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TH.  int sqlite3
21640 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28  ParserStackPeak(
21650 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  void*);.#endif..
21660 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
21670 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73  LoadExtensions(s
21680 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65  qlite3*);.#ifnde
21690 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
216a0 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76  AD_EXTENSION.  v
216b0 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
216c0 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
216d0 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  e3*);.#else.# de
216e0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73  fine sqlite3Clos
216f0 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23  eExtensions(X).#
21700 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
21710 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
21720 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73  D_CACHE.  void s
21730 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
21740 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Parse *, int, in
21750 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61  t, u8, const cha
21760 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  r *);.#else.  #d
21770 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62  efine sqlite3Tab
21780 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a  leLock(v,w,x,y,z
21790 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
217a0 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69   SQLITE_TEST.  i
217b0 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f  nt sqlite3Utf8To
217c0 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  8(unsigned char*
217d0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
217e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
217f0 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
21800 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
21810 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69  Clear(Y).#  defi
21820 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  ne sqlite3VtabSy
21830 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f  nc(X,Y) SQLITE_O
21840 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
21850 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
21860 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
21870 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58  ite3VtabCommit(X
21880 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
21890 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
218a0 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71  ) 0.#  define sq
218b0 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29  lite3VtabLock(X)
218c0 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69   .#  define sqli
218d0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29  te3VtabUnlock(X)
218e0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
218f0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
21900 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
21910 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
21920 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49  nt(X, Y, Z) SQLI
21930 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
21940 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
21950 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a  (X,Y)  ((VTable*
21960 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69  )0).#else.   voi
21970 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  d sqlite3VtabCle
21980 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ar(sqlite3 *db, 
21990 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64  Table*);.   void
219a0 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63   sqlite3VtabDisc
219b0 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a  onnect(sqlite3 *
219c0 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20  db, Table *p);. 
219d0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
219e0 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64  bSync(sqlite3 *d
219f0 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e  b, Vdbe*);.   in
21a00 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  t sqlite3VtabRol
21a10 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64  lback(sqlite3 *d
21a20 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  b);.   int sqlit
21a30 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c  e3VtabCommit(sql
21a40 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f  ite3 *db);.   vo
21a50 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  id sqlite3VtabLo
21a60 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
21a70 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
21a80 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  bUnlock(VTable *
21a90 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
21aa0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
21ab0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69  (sqlite3*);.   i
21ac0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  nt sqlite3VtabSa
21ad0 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20  vepoint(sqlite3 
21ae0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  *, int, int);.  
21af0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
21b00 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64  bImportErrmsg(Vd
21b10 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61  be*, sqlite3_vta
21b20 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a  b*);.   VTable *
21b30 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
21b40 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
21b50 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  *);.#  define sq
21b60 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
21b70 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61  db) ((db)->nVTra
21b80 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56  ns>0 && (db)->aV
21b90 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66  Trans==0).#endif
21ba0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
21bb0 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61  bMakeWritable(Pa
21bc0 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f  rse*,Table*);.vo
21bd0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  id sqlite3VtabBe
21be0 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
21bf0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
21c00 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76   Token*, int);.v
21c10 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46  oid sqlite3VtabF
21c20 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65  inishParse(Parse
21c30 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
21c40 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49   sqlite3VtabArgI
21c50 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  nit(Parse*);.voi
21c60 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
21c70 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54  Extend(Parse*, T
21c80 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
21c90 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
21ca0 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  e(sqlite3*, int,
21cb0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
21cc0 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  har **);.int sql
21cd0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e  ite3VtabCallConn
21ce0 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ect(Parse*, Tabl
21cf0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
21d00 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
21d10 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
21d20 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
21d30 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  t sqlite3VtabBeg
21d40 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54  in(sqlite3 *, VT
21d50 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66  able *);.FuncDef
21d60 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65   *sqlite3VtabOve
21d70 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71  rloadFunction(sq
21d80 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a  lite3 *,FuncDef*
21d90 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72  , int nArg, Expr
21da0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21db0 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28  InvalidFunction(
21dc0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
21dd0 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
21de0 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69  ue**);.sqlite3_i
21df0 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74  nt64 sqlite3Stmt
21e00 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69  CurrentTime(sqli
21e10 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69  te3_context*);.i
21e20 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
21e30 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
21e40 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
21e50 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
21e60 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
21e70 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
21e80 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
21e90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
21ea0 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
21eb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
21ec0 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
21ed0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
21ee0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
21ef0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
21f00 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
21f10 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
21f20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
21f30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
21f40 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
21f50 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
21f60 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
21f70 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
21f80 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
21f90 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
21fa0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
21fb0 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
21fc0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
21fd0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
21fe0 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
21ff0 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
22000 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
22010 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c  .#endif../* Decl
22020 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e  arations for fun
22030 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63  ctions in fkey.c
22040 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61  . All of these a
22050 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a  re replaced by.*
22060 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69  * no-op macros i
22070 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  f OMIT_FOREIGN_K
22080 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49  EY is defined. I
22090 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66  n this case no f
220a0 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75  oreign.** key fu
220b0 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61  nctionality is a
220c0 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49  vailable. If OMI
220d0 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66  T_TRIGGER is def
220e0 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54  ined but.** OMIT
220f0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
22100 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f  not, only some o
22110 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20  f the functions 
22120 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a  are no-oped. In.
22130 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72  ** this case for
22140 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61  eign keys are pa
22150 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68  rsed, but no oth
22160 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  er functionality
22170 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64   is .** provided
22180 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66   (enforcement of
22190 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
221a0 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69  requires the tri
221b0 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d  ggers sub-system
221c0 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  )..*/.#if !defin
221d0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
221e0 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21  OREIGN_KEY) && !
221f0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
22200 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76  MIT_TRIGGER).  v
22210 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65  oid sqlite3FkChe
22220 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ck(Parse*, Table
22230 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
22240 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
22250 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
22260 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
22270 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  st *, Table*);. 
22280 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41   void sqlite3FkA
22290 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54  ctions(Parse*, T
222a0 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  able*, ExprList*
222b0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
222c0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
222d0 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65  FkRequired(Parse
222e0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c  *, Table*, int*,
222f0 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c   int);.  u32 sql
22300 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61  ite3FkOldmask(Pa
22310 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  rse*, Table*);. 
22320 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b   FKey *sqlite3Fk
22330 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65  References(Table
22340 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
22350 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63  fine sqlite3FkAc
22360 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c  tions(a,b,c,d,e,
22370 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
22380 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c  ite3FkCheck(a,b,
22390 63 2c 64 29 0a 20 20 23 64 65 66 69 6e 65 20 73  c,d).  #define s
223a0 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
223b0 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69  e(a,b,c).  #defi
223c0 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  ne sqlite3FkOldm
223d0 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20  ask(a,b)        
223e0 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
223f0 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
22400 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 20 30 0a 23  a,b,c,d,e,f) 0.#
22410 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
22420 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
22430 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c  N_KEY.  void sql
22440 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c  ite3FkDelete(sql
22450 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  ite3 *, Table*);
22460 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
22470 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73  LocateIndex(Pars
22480 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c  e*,Table*,FKey*,
22490 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a  Index**,int**);.
224a0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
224b0 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
224c0 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73  a,b).  #define s
224d0 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
224e0 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23  dex(a,b,c,d,e).#
224f0 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76  endif.../*.** Av
22500 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e  ailable fault in
22510 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64  jectors.  Should
22520 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67   be numbered beg
22530 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a  inning with 0..*
22540 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
22550 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d  _FAULTINJECTOR_M
22560 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66  ALLOC     0.#def
22570 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
22580 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20  INJECTOR_COUNT  
22590 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65      1../*.** The
225a0 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
225b0 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e  e code in fault.
225c0 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74  c used for ident
225d0 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a  ifying "benign".
225e0 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  ** malloc failur
225f0 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  es. This is only
22600 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49   present if SQLI
22610 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
22620 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64  TEST.** is not d
22630 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  efined..*/.#ifnd
22640 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
22650 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f  UILTIN_TEST.  vo
22660 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  id sqlite3BeginB
22670 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
22680 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
22690 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
226a0 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20  (void);.#else.  
226b0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42  #define sqlite3B
226c0 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
226d0 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  ().  #define sql
226e0 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
226f0 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 23 64  loc().#endif..#d
22700 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52  efine IN_INDEX_R
22710 4f 57 49 44 20 20 20 20 20 20 20 20 20 20 20 31  OWID           1
22720 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
22730 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 20  X_EPH           
22740 20 20 32 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49    2.#define IN_I
22750 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20  NDEX_INDEX_ASC  
22760 20 20 20 20 20 33 0a 23 64 65 66 69 6e 65 20 49       3.#define I
22770 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45  N_INDEX_INDEX_DE
22780 53 43 20 20 20 20 20 20 34 0a 69 6e 74 20 73 71  SC      4.int sq
22790 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
227a0 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
227b0 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66  , int*);..#ifdef
227c0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
227d0 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e  TOMIC_WRITE.  in
227e0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
227f0 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73  Open(sqlite3_vfs
22800 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
22810 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  , sqlite3_file *
22820 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69  , int, int);.  i
22830 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
22840 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66  lSize(sqlite3_vf
22850 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  s *);.  int sqli
22860 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65  te3JournalCreate
22870 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
22880 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
22890 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73 71 6c  ournalExists(sql
228a0 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23  ite3_file *p);.#
228b0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
228c0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
228d0 65 28 70 56 66 73 29 20 28 28 70 56 66 73 29 2d  e(pVfs) ((pVfs)-
228e0 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23 64 65  >szOsFile).  #de
228f0 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
22900 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31 0a 23  nalExists(p) 1.#
22910 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
22920 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65  te3MemJournalOpe
22930 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  n(sqlite3_file *
22940 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  );.int sqlite3Me
22950 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69  mJournalSize(voi
22960 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  d);.int sqlite3I
22970 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69  sMemJournal(sqli
22980 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69  te3_file *);..#i
22990 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
229a0 52 5f 44 45 50 54 48 3e 30 0a 20 20 76 6f 69 64  R_DEPTH>0.  void
229b0 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48   sqlite3ExprSetH
229c0 65 69 67 68 74 28 50 61 72 73 65 20 2a 70 50 61  eight(Parse *pPa
229d0 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20  rse, Expr *p);. 
229e0 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65   int sqlite3Sele
229f0 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c  ctExprHeight(Sel
22a00 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ect *);.  int sq
22a10 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
22a20 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  ight(Parse*, int
22a30 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
22a40 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  ne sqlite3ExprSe
22a50 74 48 65 69 67 68 74 28 78 2c 79 29 0a 20 20 23  tHeight(x,y).  #
22a60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
22a70 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78  lectExprHeight(x
22a80 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) 0.  #define sq
22a90 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
22aa0 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66  ight(x,y).#endif
22ab0 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74  ..u32 sqlite3Get
22ac0 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29  4byte(const u8*)
22ad0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75  ;.void sqlite3Pu
22ae0 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29  t4byte(u8*, u32)
22af0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
22b00 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e  _ENABLE_UNLOCK_N
22b10 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c  OTIFY.  void sql
22b20 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
22b30 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c  ocked(sqlite3 *,
22b40 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76   sqlite3 *);.  v
22b50 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
22b60 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71  ctionUnlocked(sq
22b70 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f  lite3 *db);.  vo
22b80 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
22b90 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74  tionClosed(sqlit
22ba0 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20  e3 *db);.#else. 
22bb0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22bc0 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
22bd0 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65  d(x,y).  #define
22be0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
22bf0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20  onUnlocked(x).  
22c00 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
22c10 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
22c20 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  x).#endif..#ifde
22c30 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
22c40 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72   void sqlite3Par
22c50 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20  serTrace(FILE*, 
22c60 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a  char *);.#endif.
22c70 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  ./*.** If the SQ
22c80 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52  LITE_ENABLE IOTR
22c90 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20  ACE exists then 
22ca0 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
22cb0 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f  ble.** sqlite3Io
22cc0 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74  Trace is a point
22cd0 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c  er to a printf-l
22ce0 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64  ike routine used
22cf0 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f   to.** print I/O
22d00 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65   tracing message
22d10 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  s. .*/.#ifdef SQ
22d20 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52  LITE_ENABLE_IOTR
22d30 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  ACE.# define IOT
22d40 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c  RACE(A)  if( sql
22d50 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73  ite3IoTrace ){ s
22d60 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b  qlite3IoTrace A;
22d70 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65   }.  void sqlite
22d80 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
22d90 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45  Vdbe*);.SQLITE_E
22da0 58 54 45 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c  XTERN void (*sql
22db0 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e  ite3IoTrace)(con
22dc0 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
22dd0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f  else.# define IO
22de0 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e  TRACE(A).# defin
22df0 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  e sqlite3VdbeIOT
22e00 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69  raceSql(X).#endi
22e10 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72  f../*.** These r
22e20 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69  outines are avai
22e30 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65  lable for the me
22e40 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d  m2.c debugging m
22e50 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
22e60 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61  ** only.  They a
22e70 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  re used to verif
22e80 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74  y that different
22e90 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f   "types" of memo
22ea0 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e  ry.** allocation
22eb0 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74  s are properly t
22ec0 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79  racked by the sy
22ed0 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  stem..**.** sqli
22ee0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
22ef0 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74  pe() sets the "t
22f00 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63  ype" of an alloc
22f10 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a  ation to one of.
22f20 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a  ** the MEMTYPE_*
22f30 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
22f40 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65  below.  The type
22f50 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61   must be a bitma
22f60 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e  sk with.** a sin
22f70 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  gle bit set..**.
22f80 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
22f90 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75  ugHasType() retu
22fa0 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  rns true if any 
22fb0 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
22fc0 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
22fd0 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
22fe0 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
22ff0 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
23000 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
23010 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  )..** sqlite3Mem
23020 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69  debugHasType() i
23030 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
23040 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
23050 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  () statements..*
23060 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
23070 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74  ebugNoType() ret
23080 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e  urns true if non
23090 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  e of the bits in
230a0 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
230b0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
230c0 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
230d0 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
230e0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
230f0 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  e()..**.** Perha
23100 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
23110 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
23120 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
23130 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
23140 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
23150 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66  E_LOOKASIDE.  If
23160 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69   an allocation i
23170 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  s MEMTYPE_LOOKAS
23180 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a  IDE, that means.
23190 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  ** it might have
231a0 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
231b0 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78  by lookaside, ex
231c0 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74  cept the allocat
231d0 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c  ion was.** too l
231e0 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64  arge or lookasid
231f0 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75  e was already fu
23200 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72  ll.  It is impor
23210 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a  tant to verify.*
23220 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f  * that allocatio
23230 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ns that might ha
23240 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65  ve been satisfie
23250 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61  d by lookaside a
23260 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64  re not.** passed
23270 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f   back to non-loo
23280 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
23290 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73  utines.  Asserts
232a0 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20   such as the.** 
232b0 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
232c0 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20  e placed on the 
232d0 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
232e0 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f  ee() routines to
232f0 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20   verify.** this 
23300 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a  constraint. .**.
23310 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69  ** All of this i
23320 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72  s no-op for a pr
23330 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20  oduction build. 
23340 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69   It only comes i
23350 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e  nto.** play when
23360 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44   the SQLITE_MEMD
23370 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  EBUG compile-tim
23380 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64  e option is used
23390 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
233a0 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f  TE_MEMDEBUG.  vo
233b0 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  id sqlite3Memdeb
233c0 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c  ugSetType(void*,
233d0 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
233e0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
233f0 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
23400 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
23410 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75  ugNoType(void*,u
23420 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  8);.#else.# defi
23430 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
23440 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20  ugSetType(X,Y)  
23450 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65  /* no-op */.# de
23460 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
23470 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29  ebugHasType(X,Y)
23480 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c    1.# define sql
23490 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
234a0 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64  pe(X,Y)   1.#end
234b0 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  if.#define MEMTY
234c0 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78  PE_HEAP       0x
234d0 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68  01  /* General h
234e0 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  eap allocations 
234f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
23500 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78  PE_LOOKASIDE  0x
23510 30 32 20 20 2f 2a 20 4d 69 67 68 74 20 68 61 76  02  /* Might hav
23520 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65  e been lookaside
23530 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23 64 65 66 69   memory */.#defi
23540 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54  ne MEMTYPE_SCRAT
23550 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53  CH    0x04  /* S
23560 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f  cratch allocatio
23570 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
23580 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20  MTYPE_PCACHE    
23590 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63   0x08  /* Page c
235a0 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ache allocations
235b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
235c0 59 50 45 5f 44 42 20 20 20 20 20 20 20 20 20 30  YPE_DB         0
235d0 78 31 30 20 20 2f 2a 20 55 73 65 73 20 73 71 6c  x10  /* Uses sql
235e0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e 6f  ite3DbMalloc, no
235f0 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 20  t sqlite_malloc 
23600 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53  */..#endif /* _S
23610 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a     QLITEINT_H_ */.