/ Hex Artifact Content
Login

Artifact f2e51444e15f7dd35c1ee139f95f43b0bccf3fb5:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74  .** Similar is t
0540: 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  rue for Mac OS X
0550: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
0560: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20  upported on Mac 
0570: 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72  OS X 9 and later
0580: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
0590: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
05a0: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f  # define _LARGE_
05b0: 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69  FILE       1.# i
05c0: 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53  fndef _FILE_OFFS
05d0: 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69  ET_BITS.#   defi
05e0: 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ne _FILE_OFFSET_
05f0: 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a  BITS 64.# endif.
0600: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0610: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0620: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75  dif../*.** Inclu
0630: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  de the configura
0640: 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70  tion header outp
0650: 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65  ut by 'configure
0660: 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67  ' if we're using
0670: 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66   the.** autoconf
0680: 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a  -based build.*/.
0690: 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c  #ifdef _HAVE_SQL
06a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e  ITE_CONFIG_H.#in
06b0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22  clude "config.h"
06c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
06d0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
06e0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
06f0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
0700: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
0710: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
0720: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
0730: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
0740: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
0750: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
0760: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
0770: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
0780: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
0790: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
07a0: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
07b0: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
07c0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
07d0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
07e0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
07f0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
0800: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
0810: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
0820: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
0830: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
0840: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
0850: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
0860: 2e 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f 47  .. */.#ifndef _G
0870: 4e 55 5f 53 4f 55 52 43 45 0a 23 20 64 65 66 69  NU_SOURCE.# defi
0880: 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ne _GNU_SOURCE.#
0890: 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
08a0: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
08b0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 42 53 44  && !defined(_BSD
08c0: 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e  _SOURCE).# defin
08d0: 65 20 5f 42 53 44 5f 53 4f 55 52 43 45 0a 23 65  e _BSD_SOURCE.#e
08e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
08f0: 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65 61  ude standard hea
0900: 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65 63  der files as nec
0910: 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66  essary.*/.#ifdef
0920: 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23   HAVE_STDINT_H.#
0930: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e  include <stdint.
0940: 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  h>.#endif.#ifdef
0950: 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f 48   HAVE_INTTYPES_H
0960: 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79  .#include <intty
0970: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  pes.h>.#endif../
0980: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
0990: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
09a0: 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74  ed to cast point
09b0: 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20  ers to integers 
09c0: 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20  and.** integers 
09d0: 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68  to pointers.  Th
09e0: 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69  e way you do thi
09f0: 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e  s varies from on
0a00: 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  e compiler.** to
0a10: 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65   the next, so we
0a20: 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20   have developed 
0a30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  the following se
0a40: 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65  t of #if stateme
0a50: 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61  nts.** to genera
0a60: 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d  te appropriate m
0a70: 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65  acros for a wide
0a80: 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c   range of compil
0a90: 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ers..**.** The c
0aa0: 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77 61  orrect "ANSI" wa
0ab0: 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20  y to do this is 
0ac0: 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70 74  to use the intpt
0ad0: 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55 6e  r_t type. .** Un
0ae0: 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68 61  fortunately, tha
0af0: 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f 74  t typedef is not
0b00: 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c   available on al
0b10: 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a  l compilers, or.
0b20: 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61 69  ** if it is avai
0b30: 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69 72  lable, it requir
0b40: 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f  es an #include o
0b50: 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64 65  f specific heade
0b60: 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79 20  rs.** that vary 
0b70: 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65  from one machine
0b80: 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a   to the next..**
0b90: 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36 30  .** Ticket #3860
0ba0: 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d  :  The llvm-gcc-
0bb0: 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f  4.2 compiler fro
0bc0: 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f  m Apple chokes o
0bd0: 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64 2a  n.** the ((void*
0be0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0bf0: 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75 74   construct.  But
0c00: 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20   MSVC chokes on 
0c10: 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a  ((void*)(X))..**
0c20: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 64   So we have to d
0c30: 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f 73  efine the macros
0c40: 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77 61   in different wa
0c50: 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ys depending on 
0c60: 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e  the.** compiler.
0c70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0c80: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0c90: 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65 20  )  /* This case 
0ca0: 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20  should work for 
0cb0: 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  GCC */.# define 
0cc0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
0cd0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 5f  R(X)  ((void*)(_
0ce0: 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29  _PTRDIFF_TYPE__)
0cf0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
0d00: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
0d10: 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54 52  X)  ((int)(__PTR
0d20: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
0d30: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
0d40: 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20 20  __GNUC__)       
0d50: 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d  /* Works for com
0d60: 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68 61  pilers other tha
0d70: 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69  n LLVM */.# defi
0d80: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
0d90: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
0da0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0dc0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
0dd0: 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29 58  ((int)(((char*)X
0de0: 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65 6c  )-(char*)0)).#el
0df0: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f  if defined(HAVE_
0e00: 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55  STDINT_H)   /* U
0e10: 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66 20  se this case if 
0e20: 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65 61  we have ANSI hea
0e30: 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  ders */.# define
0e40: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0e50: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0e60: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 20  intptr_t)(X)).# 
0e70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0e80: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0e90: 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29  nt)(intptr_t)(X)
0ea0: 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20 20  ).#else         
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ec0: 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61 20   /* Generates a 
0ed0: 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69 74  warning - but it
0ee0: 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f   always works */
0ef0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0f00: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
0f10: 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20 64  ((void*)(X)).# d
0f20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
0f30: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
0f40: 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  t)(X)).#endif../
0f50: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
0f60: 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f  THREADSAFE macro
0f70: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
0f80: 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a   as 0, 1, or 2..
0f90: 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78  ** 0 means mutex
0fa0: 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74  es are permanent
0fb0: 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74  ly disable and t
0fc0: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65  he library is ne
0fd0: 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66  ver.** threadsaf
0fe0: 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20  e.  1 means the 
0ff0: 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61  library is seria
1000: 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74  lized which is t
1010: 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65  he highest.** le
1020: 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66  vel of threadsaf
1030: 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68  ety.  2 means th
1040: 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c  e library is mul
1050: 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c  tithreaded - mul
1060: 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73  tiple.** threads
1070: 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20   can use SQLite 
1080: 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77  as long as no tw
1090: 6f 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f  o threads try to
10a0: 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a   use the same.**
10b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
10c0: 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65  tion at the same
10d0: 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64   time..**.** Old
10e0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
10f0: 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70  QLite used an op
1100: 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46  tional THREADSAF
1110: 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73  E macro..** We s
1120: 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20  upport that for 
1130: 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21  legacy..*/.#if !
1140: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1150: 48 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20  HREADSAFE).# if 
1160: 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41  defined(THREADSA
1170: 46 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  FE).#   define S
1180: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
1190: 20 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c   THREADSAFE.# el
11a0: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
11b0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
11c0: 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37  1 /* IMP: R-0727
11d0: 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64  2-22309 */.# end
11e0: 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  if.#endif../*.**
11f0: 20 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77   Powersafe overw
1200: 72 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65  rite is on by de
1210: 66 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20  fault.  But can 
1220: 62 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73  be turned off us
1230: 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c  ing.** the -DSQL
1240: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1250: 45 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e  ERWRITE=0 comman
1260: 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a  d-line option..*
1270: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1280: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1290: 52 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51  RITE.# define SQ
12a0: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
12b0: 56 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69  VERWRITE 1.#endi
12c0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  f../*.** The SQL
12d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
12e0: 54 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73 74  TATUS macro must
12f0: 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 65   be defined as e
1300: 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a  ither 0 or 1..**
1310: 20 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20 77   It determines w
1320: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
1330: 65 20 66 65 61 74 75 72 65 73 20 72 65 6c 61 74  e features relat
1340: 65 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54 45  ed to .** SQLITE
1350: 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55  _CONFIG_MEMSTATU
1360: 53 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  S are available 
1370: 62 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e 6f  by default or no
1380: 74 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63 61  t. This value ca
1390: 6e 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64 64  n.** be overridd
13a0: 65 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  en at runtime us
13b0: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
13c0: 63 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a 2f  config() API..*/
13d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
13e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
13f0: 53 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65  STATUS).# define
1400: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
1410: 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64  MEMSTATUS 1.#end
1420: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c  if../*.** Exactl
1430: 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
1440: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75  lowing macros mu
1450: 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e  st be defined in
1460: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65   order to.** spe
1470: 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72  cify which memor
1480: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62  y allocation sub
1490: 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a  system to use..*
14a0: 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  *.**     SQLITE_
14b0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20  SYSTEM_MALLOC   
14c0: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f         // Use no
14d0: 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c  rmal system mall
14e0: 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49  oc().**     SQLI
14f0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20  TE_WIN32_MALLOC 
1500: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1510: 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65   Win32 native he
1520: 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51  ap API.**     SQ
1530: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55              // U
1550: 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63 61  se a stub alloca
1560: 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73 20  tor that always 
1570: 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c  fails.**     SQL
1580: 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20  ITE_MEMDEBUG    
1590: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65             // De
15a0: 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20  bugging version 
15b0: 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63  of system malloc
15c0: 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64  ().**.** On Wind
15d0: 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c 49  ows, if the SQLI
15e0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f  TE_WIN32_MALLOC_
15f0: 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20 69  VALIDATE macro i
1600: 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74 68  s defined and th
1610: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d 61  e.** assert() ma
1620: 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c 20  cro is enabled, 
1630: 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74  each call into t
1640: 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  he Win32 native 
1650: 68 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a 2a  heap subsystem.*
1660: 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65 61  * will cause Hea
1670: 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65 20  pValidate to be 
1680: 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61 70  called.  If heap
1690: 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75   validation shou
16a0: 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61  ld fail, an.** a
16b0: 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65  ssertion will be
16c0: 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a   triggered..**.*
16d0: 2a 20 28 48 69 73 74 6f 72 69 63 61 6c 20 6e 6f  * (Historical no
16e0: 74 65 3a 20 20 54 68 65 72 65 20 75 73 65 64 20  te:  There used 
16f0: 74 6f 20 62 65 20 73 65 76 65 72 61 6c 20 6f 74  to be several ot
1700: 68 65 72 20 6f 70 74 69 6f 6e 73 2c 20 62 75 74  her options, but
1710: 20 77 65 27 76 65 0a 2a 2a 20 70 61 72 65 64 20   we've.** pared 
1720: 69 74 20 64 6f 77 6e 20 74 6f 20 6a 75 73 74 20  it down to just 
1730: 74 68 65 73 65 20 74 68 72 65 65 2e 29 0a 2a 2a  these three.).**
1740: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
1750: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
1760: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
1770: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1780: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
1790: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
17a0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
17b0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
17c0: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
17d0: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
17e0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
17f0: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
1800: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
1810: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
1820: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
1830: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
1840: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
1850: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
1860: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
1870: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
1880: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
1890: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
18a0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
18b0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
18c0: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
18d0: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
18e0: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
18f0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1900: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1910: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
1920: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
1930: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
1940: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
1950: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
1960: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
1970: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
1980: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
1990: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
19a0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
19b0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
19c0: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
19d0: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
19e0: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
19f0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1a00: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
1a10: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
1a20: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
1a30: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
1a40: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
1a50: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
1a60: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
1a70: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
1a80: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
1a90: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
1aa0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
1ab0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
1ac0: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
1ad0: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
1ae0: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
1af0: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
1b00: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
1b10: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
1b20: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
1b30: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
1b40: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
1b50: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
1b60: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
1b70: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
1b80: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
1b90: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
1ba0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
1bb0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
1bc0: 2f 2a 0a 2a 2a 20 54 68 65 20 54 43 4c 20 68 65  /*.** The TCL he
1bd0: 61 64 65 72 73 20 61 72 65 20 6f 6e 6c 79 20 6e  aders are only n
1be0: 65 65 64 65 64 20 77 68 65 6e 20 63 6f 6d 70 69  eeded when compi
1bf0: 6c 69 6e 67 20 74 68 65 20 54 43 4c 20 62 69 6e  ling the TCL bin
1c00: 64 69 6e 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  dings..*/.#if de
1c10: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 43 4c  fined(SQLITE_TCL
1c20: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 54 43 4c  ) || defined(TCL
1c30: 53 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 74  SH).# include <t
1c40: 63 6c 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  cl.h>.#endif../*
1c50: 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53  .** NDEBUG and S
1c60: 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20  QLITE_DEBUG are 
1c70: 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73  opposites.  It s
1c80: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20  hould always be 
1c90: 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  true that.** def
1ca0: 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64  ined(NDEBUG)==!d
1cb0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1cc0: 42 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69  BUG).  If this i
1cd0: 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
1ce0: 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74  true,.** make it
1cf0: 20 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e   true by definin
1d00: 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20  g or undefining 
1d10: 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65  NDEBUG..**.** Se
1d20: 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b  tting NDEBUG mak
1d30: 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c  es the code smal
1d40: 6c 65 72 20 61 6e 64 20 72 75 6e 20 66 61 73 74  ler and run fast
1d50: 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20  er by disabling 
1d60: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 61 73  the.** number as
1d70: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
1d80: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20  s in the code.  
1d90: 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64  So we want the d
1da0: 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a  efault action.**
1db0: 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55   to be for NDEBU
1dc0: 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20  G to be set and 
1dd0: 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64  NDEBUG to be und
1de0: 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53  efined only if S
1df0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69  QLITE_DEBUG.** i
1e00: 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45  s set.  Thus NDE
1e10: 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f  BUG becomes an o
1e20: 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61  pt-in rather tha
1e30: 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20  n an opt-out.** 
1e40: 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20  feature..*/.#if 
1e50: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
1e60: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1e70: 49 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65  ITE_DEBUG) .# de
1e80: 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65  fine NDEBUG 1.#e
1e90: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
1ea0: 28 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69  (NDEBUG) && defi
1eb0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
1ec0: 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47  ).# undef NDEBUG
1ed0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
1ee0: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
1ef0: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61  cro is used to a
1f00: 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74  id in coverage t
1f10: 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a  esting.  When .*
1f20: 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  * doing coverage
1f30: 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f   testing, the co
1f40: 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74  ndition inside t
1f50: 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a  he argument to.*
1f60: 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73  * testcase() mus
1f70: 74 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62  t be evaluated b
1f80: 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c  oth true and fal
1f90: 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  se in order to.*
1fa0: 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63  * get full branc
1fb0: 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65  h coverage.  The
1fc0: 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72   testcase() macr
1fd0: 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a  o is inserted.**
1fe0: 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20   to help ensure 
1ff0: 61 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f  adequate test co
2000: 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73  verage in places
2010: 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a   where simple.**
2020: 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73   condition/decis
2030: 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20  ion coverage is 
2040: 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72  inadequate.  For
2050: 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61   example, testca
2060: 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75  se().** can be u
2070: 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  sed to make sure
2080: 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73   boundary values
2090: 20 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f   are tested.  Fo
20a0: 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73  r.** bitmask tes
20b0: 74 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63  ts, testcase() c
20c0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61  an be used to ma
20d0: 6b 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74  ke sure each bit
20e0: 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61  .** is significa
20f0: 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c  nt and used at l
2100: 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73  east once.  On s
2110: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73  witch statements
2120: 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70  .** where multip
2130: 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74  le cases go to t
2140: 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66  he same block of
2150: 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28   code, testcase(
2160: 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20  ).** can insure 
2170: 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61  that all cases a
2180: 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a  re evaluated..**
2190: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
21a0: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a  E_COVERAGE_TEST.
21b0: 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
21c0: 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64  verage(int);.# d
21d0: 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58  efine testcase(X
21e0: 29 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69  )  if( X ){ sqli
21f0: 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49  te3Coverage(__LI
2200: 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23  NE__); }.#else.#
2210: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
2220: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2230: 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d  * The TESTONLY m
2240: 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20  acro is used to 
2250: 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65  enclose variable
2260: 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72   declarations or
2270: 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f  .** other bits o
2280: 66 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20  f code that are 
2290: 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72  needed to suppor
22a0: 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a  t the arguments.
22b0: 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61  ** within testca
22c0: 73 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28  se() and assert(
22d0: 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66  ) macros..*/.#if
22e0: 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47   !defined(NDEBUG
22f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
2300: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
2310: 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  T).# define TEST
2320: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
2330: 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e  .# define TESTON
2340: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
2350: 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65  .** Sometimes we
2360: 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d   need a small am
2370: 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63  ount of code suc
2380: 68 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20  h as a variable 
2390: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a  initialization.*
23a0: 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61  * to setup for a
23b0: 20 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20   later assert() 
23c0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64  statement.  We d
23d0: 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20  o not want this 
23e0: 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61  code to.** appea
23f0: 72 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20  r when assert() 
2400: 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68  is disabled.  Th
2410: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
2420: 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a  o is therefore.*
2430: 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69  * used to contai
2440: 6e 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64  n that setup cod
2450: 65 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63  e.  The "VVA" ac
2460: 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72  ronym stands for
2470: 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f  .** "Verificatio
2480: 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61  n, Validation, a
2490: 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e  nd Accreditation
24a0: 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  ".  In other wor
24b0: 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20  ds, the.** code 
24c0: 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28  within VVA_ONLY(
24d0: 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20  ) will only run 
24e0: 64 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74  during verificat
24f0: 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a  ion processes..*
2500: 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  /.#ifndef NDEBUG
2510: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
2520: 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23  LY(X)  X.#else.#
2530: 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59   define VVA_ONLY
2540: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2550: 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64  * The ALWAYS and
2560: 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75   NEVER macros su
2570: 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65  rround boolean e
2580: 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68  xpressions which
2590: 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65   .** are intende
25a0: 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74  d to always be t
25b0: 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65  rue or false, re
25c0: 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63  spectively.  Suc
25d0: 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73  h.** expressions
25e0: 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65   could be omitte
25f0: 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20  d from the code 
2600: 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74  completely.  But
2610: 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63   they.** are inc
2620: 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63  luded in a few c
2630: 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  ases in order to
2640: 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73   enhance the res
2650: 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51  ilience.** of SQ
2660: 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74  Lite to unexpect
2670: 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f  ed behavior - to
2680: 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22   make the code "
2690: 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a  self-healing".**
26a0: 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61   or "ductile" ra
26b0: 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20  ther than being 
26c0: 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72  "brittle" and cr
26d0: 61 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69  ashing at the fi
26e0: 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75  rst.** hint of u
26f0: 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f  nplanned behavio
2700: 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65  r..**.** In othe
2710: 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20  r words, ALWAYS 
2720: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64  and NEVER are ad
2730: 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76  ded for defensiv
2740: 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  e code..**.** Wh
2750: 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67  en doing coverag
2760: 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53  e testing ALWAYS
2770: 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68   and NEVER are h
2780: 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20  ard-coded to.** 
2790: 62 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  be true and fals
27a0: 65 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e  e so that the un
27b0: 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74  reachable code t
27c0: 68 65 6e 20 73 70 65 63 69 66 79 20 77 69 6c 6c  hen specify will
27d0: 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74  .** not be count
27e0: 65 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63  ed as untested c
27f0: 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ode..*/.#if defi
2800: 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52  ned(SQLITE_COVER
2810: 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69  AGE_TEST).# defi
2820: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
2830: 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e    (1).# define N
2840: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30  EVER(X)       (0
2850: 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
2860: 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  (NDEBUG).# defin
2870: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
2880: 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28   ((X)?1:(assert(
2890: 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0),0)).# define 
28a0: 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28  NEVER(X)       (
28b0: 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31  (X)?(assert(0),1
28c0: 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ):0).#else.# def
28d0: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
28e0: 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20     (X).# define 
28f0: 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28  NEVER(X)       (
2900: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2910: 20 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f   Return true (no
2920: 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69  n-zero) if the i
2930: 6e 70 75 74 20 69 73 20 61 20 69 6e 74 65 67 65  nput is a intege
2940: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
2950: 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e  rge.** to fit in
2960: 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20   32-bits.  This 
2970: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
2980: 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20  side of various 
2990: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61  testcase().** ma
29a0: 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74  cros to verify t
29b0: 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74  hat we have test
29c0: 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61  ed SQLite for la
29d0: 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74  rge-file support
29e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f  ..*/.#define IS_
29f0: 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58  BIG_INT(X)  (((X
2a00: 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66  )&~(i64)0xffffff
2a10: 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  ff)!=0)../*.** T
2a20: 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c  he macro unlikel
2a30: 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68  y() is a hint th
2a40: 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62  at surrounds a b
2a50: 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73  oolean.** expres
2a60: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75  sion that is usu
2a70: 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63  ally false.  Mac
2a80: 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72  ro likely() surr
2a90: 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65  ounds.** a boole
2aa0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
2ab0: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
2ac0: 75 65 2e 20 20 47 43 43 20 69 73 20 61 62 6c 65  ue.  GCC is able
2ad0: 20 74 6f 0a 2a 2a 20 75 73 65 20 74 68 65 73 65   to.** use these
2ae0: 20 68 69 6e 74 73 20 74 6f 20 67 65 6e 65 72 61   hints to genera
2af0: 74 65 20 62 65 74 74 65 72 20 63 6f 64 65 2c 20  te better code, 
2b00: 73 6f 6d 65 74 69 6d 65 73 2e 0a 2a 2f 0a 23 69  sometimes..*/.#i
2b10: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
2b20: 5f 5f 29 20 26 26 20 30 0a 23 20 64 65 66 69 6e  __) && 0.# defin
2b30: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 5f  e likely(X)    _
2b40: 5f 62 75 69 6c 74 69 6e 5f 65 78 70 65 63 74 28  _builtin_expect(
2b50: 28 58 29 2c 31 29 0a 23 20 64 65 66 69 6e 65 20  (X),1).# define 
2b60: 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 5f 5f 62  unlikely(X)  __b
2b70: 75 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28 58  uiltin_expect((X
2b80: 29 2c 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ),0).#else.# def
2b90: 69 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20  ine likely(X)   
2ba0: 20 21 21 28 58 29 0a 23 20 64 65 66 69 6e 65 20   !!(X).# define 
2bb0: 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 21 21 28  unlikely(X)  !!(
2bc0: 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c  X).#endif..#incl
2bd0: 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a  ude "sqlite3.h".
2be0: 23 69 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68  #include "hash.h
2bf0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73  ".#include "pars
2c00: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73  e.h".#include <s
2c10: 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  tdio.h>.#include
2c20: 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63   <stdlib.h>.#inc
2c30: 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a  lude <string.h>.
2c40: 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74  #include <assert
2c50: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
2c60: 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49  ddef.h>../*.** I
2c70: 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20  f compiling for 
2c80: 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61 74  a processor that
2c90: 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20   lacks floating 
2ca0: 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a  point support,.*
2cb0: 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e 74  * substitute int
2cc0: 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e  eger for floatin
2cd0: 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65  g-point.*/.#ifde
2ce0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
2cf0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64  OATING_POINT.# d
2d00: 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c  efine double sql
2d10: 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69  ite_int64.# defi
2d20: 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f  ne float sqlite_
2d30: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 4c  int64.# define L
2d40: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73  ONGDOUBLE_TYPE s
2d50: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69 66  qlite_int64.# if
2d60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f  ndef SQLITE_BIG_
2d70: 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20 53  DBL.#   define S
2d80: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 28  QLITE_BIG_DBL ((
2d90: 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 31  (sqlite3_int64)1
2da0: 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a 23  )<<50).# endif.#
2db0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f   define SQLITE_O
2dc0: 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e  MIT_DATETIME_FUN
2dd0: 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  CS 1.# define SQ
2de0: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20  LITE_OMIT_TRACE 
2df0: 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  1.# undef SQLITE
2e00: 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34  _MIXED_ENDIAN_64
2e10: 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65  BIT_FLOAT.# unde
2e20: 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53  f SQLITE_HAVE_IS
2e30: 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  NAN.#endif.#ifnd
2e40: 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ef SQLITE_BIG_DB
2e50: 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  L.# define SQLIT
2e60: 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39 29  E_BIG_DBL (1e99)
2e70: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
2e80: 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73 65  MIT_TEMPDB is se
2e90: 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54 45  t to 1 if SQLITE
2ea0: 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20  _OMIT_TEMPDB is 
2eb0: 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a  defined, or 0.**
2ec0: 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76 69   afterward. Havi
2ed0: 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61 6c  ng this macro al
2ee0: 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73 65  lows us to cause
2ef0: 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72 20   the C compiler 
2f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
2f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
2f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
2f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
2f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
2f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
2f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
2f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
2f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
2f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
2fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
2fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
2fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
2fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
2fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
2ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
3000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
3010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
3020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
3030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
3040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
3050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
3060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
3070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
3080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
3090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
30a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
30b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
30c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
30d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
30e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
30f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
3100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
3110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
3120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
3130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
3140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
3150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
3160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
3170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
3180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
3190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
31a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
31b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
31c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
31d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
31e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
31f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
3200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
3220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
3230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
3240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
3250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 20  _TEMP_STORE 1.# 
3280: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45  define SQLITE_TE
3290: 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20 20 2f  MP_STORE_xc 1  /
32a0: 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63  * Exclude from c
32b0: 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66  time.c */.#endif
32c0: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
32d0: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
32e0: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
32f0: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
3300: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
3310: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
3320: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
3330: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
3340: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
3350: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
3360: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
3370: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
3380: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
3390: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
33a0: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
33b0: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
33c0: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
33d0: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
33e0: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
33f0: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
3400: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
3410: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
3420: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
3430: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
3440: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
3450: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
3460: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
3470: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
3480: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
3490: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
34a0: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
34b0: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
34c0: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
34d0: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
34e0: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
34f0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
3500: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
3510: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
3520: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
3530: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
3540: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
3550: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
3560: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
3570: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
3580: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
3590: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
35a0: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
35b0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
35c0: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
35d0: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
35e0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
35f0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
3600: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
3610: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
3620: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
3630: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3640: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
3650: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
3660: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3670: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
3680: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
3690: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
36a0: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
36b0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
36c0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
36d0: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
36e0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
36f0: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
3700: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
3710: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
3720: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
3730: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
3740: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
3750: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
3760: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
3770: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
3780: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
3790: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
37a0: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
37b0: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
37c0: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
37d0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
37e0: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
37f0: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
3800: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
3810: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
3820: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
3830: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
3840: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
3850: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
3860: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
3870: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
3880: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
3890: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
38a0: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
38b0: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
38c0: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
38d0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
38e0: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
38f0: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
3900: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
3910: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3920: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
3930: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
3940: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
3950: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3960: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
3970: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
3980: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
3990: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
39a0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
39b0: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
39c0: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
39d0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
39e0: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
39f0: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
3a00: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
3a10: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
3a20: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
3a30: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
3a40: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
3a50: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
3a60: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
3a70: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
3a80: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
3a90: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
3aa0: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
3ab0: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
3ac0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
3ad0: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
3ae0: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
3af0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
3b00: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
3b10: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
3b20: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
3b30: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
3b40: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
3b50: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
3b60: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
3b70: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
3b80: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
3b90: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
3ba0: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
3bb0: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
3bc0: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
3bd0: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
3be0: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
3bf0: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
3c00: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
3c10: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
3c20: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
3c30: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
3c40: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
3c50: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
3c60: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
3c70: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
3c80: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
3c90: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
3ca0: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
3cb0: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
3cc0: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
3cd0: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
3ce0: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20   the machine is 
3cf0: 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e  big or little en
3d00: 64 69 61 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61 74  dian,.** evaluat
3d10: 65 64 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a  ed at runtime..*
3d20: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
3d30: 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e  AMALGAMATION.con
3d40: 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e  st int sqlite3on
3d50: 65 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74  e = 1;.#else.ext
3d60: 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71  ern const int sq
3d70: 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66  lite3one;.#endif
3d80: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 69 33 38  .#if defined(i38
3d90: 36 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  6) || defined(__
3da0: 69 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e  i386__) || defin
3db0: 65 64 28 5f 4d 5f 49 58 38 36 29 5c 0a 20 20 20  ed(_M_IX86)\.   
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dd0: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 64 65 66            || def
3de0: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c  ined(__x86_64) |
3df0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f  | defined(__x86_
3e00: 36 34 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53  64__).# define S
3e10: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
3e20: 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51     0.# define SQ
3e30: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
3e40: 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 1.# define SQL
3e50: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
3e60: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a   SQLITE_UTF16LE.
3e70: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
3e80: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
3e90: 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73     (*(char *)(&s
3ea0: 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23  qlite3one)==0).#
3eb0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c   define SQLITE_L
3ec0: 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63  ITTLEENDIAN (*(c
3ed0: 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f  har *)(&sqlite3o
3ee0: 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65  ne)==1).# define
3ef0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
3f00: 49 56 45 20 28 53 51 4c 49 54 45 5f 42 49 47 45  IVE (SQLITE_BIGE
3f10: 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46  NDIAN?SQLITE_UTF
3f20: 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31  16BE:SQLITE_UTF1
3f30: 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  6LE).#endif../*.
3f40: 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72  ** Constants for
3f50: 20 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64   the largest and
3f60: 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62   smallest possib
3f70: 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  le 64-bit signed
3f80: 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68   integers..** Th
3f90: 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64  ese macros are d
3fa0: 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20  esigned to work 
3fb0: 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74  correctly on bot
3fc0: 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d  h 32-bit and 64-
3fd0: 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73  bit.** compilers
3fe0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52  ..*/.#define LAR
3ff0: 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66  GEST_INT64  (0xf
4000: 66 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30  fffffff|(((i64)0
4010: 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29  x7fffffff)<<32))
4020: 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53  .#define SMALLES
4030: 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d  T_INT64 (((i64)-
4040: 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54  1) - LARGEST_INT
4050: 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e  64)../* .** Roun
4060: 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f  d up a number to
4070: 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72   the next larger
4080: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20   multiple of 8. 
4090: 20 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a   This is used.**
40a0: 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65   to force 8-byte
40b0: 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34   alignment on 64
40c0: 2d 62 69 74 20 61 72 63 68 69 74 65 63 74 75 72  -bit architectur
40d0: 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  es..*/.#define R
40e0: 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28 28 28  OUND8(x)     (((
40f0: 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a  x)+7)&~7)../*.**
4100: 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74   Round down to t
4110: 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69  he nearest multi
4120: 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66  ple of 8.*/.#def
4130: 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78  ine ROUNDDOWN8(x
4140: 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a  ) ((x)&~7)../*.*
4150: 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
4160: 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61  e pointer X is a
4170: 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62  ligned to an 8-b
4180: 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54  yte boundary.  T
4190: 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20  his.** macro is 
41a0: 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e  used only within
41b0: 20 61 73 73 65 72 74 28 29 20 74 6f 20 76 65 72   assert() to ver
41c0: 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 64  ify that the cod
41d0: 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c  e gets.** all al
41e0: 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74  ignment restrict
41f0: 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a  ions correct..**
4200: 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53  .** Except, if S
4210: 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49  QLITE_4_BYTE_ALI
4220: 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64  GNED_MALLOC is d
4230: 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65  efined, then the
4240: 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d  .** underlying m
4250: 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e  alloc() implemen
4260: 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72  tion might retur
4270: 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67  n us 4-byte alig
4280: 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e  ned.** pointers.
4290: 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20    In that case, 
42a0: 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79  only verify 4-by
42b0: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f  te alignment..*/
42c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34  .#ifdef SQLITE_4
42d0: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
42e0: 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49  LLOC.# define EI
42f0: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
4300: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
4310: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
4320: 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  )&3)==0).#else.#
4330: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
4340: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
4350: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
4360: 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d  - (char*)0)&7)==
4370: 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0).#endif../*.**
4380: 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e   Disable MMAP on
4390: 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65   platforms where
43a0: 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20   it is known to 
43b0: 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20  not work.*/.#if 
43c0: 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53  defined(__OpenBS
43d0: 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D__) || defined(
43e0: 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e  __QNXNTO__).# un
43f0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
4400: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
4410: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
4420: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
4430: 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d  ./*.** Default m
4440: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d  aximum size of m
4450: 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65  emory used by me
4460: 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20  mory-mapped I/O 
4470: 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69  in the VFS.*/.#i
4480: 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23  fdef __APPLE__.#
4490: 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74   include <Target
44a0: 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a  Conditionals.h>.
44b0: 23 20 69 66 20 54 41 52 47 45 54 5f 4f 53 5f 49  # if TARGET_OS_I
44c0: 50 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65 66 20  PHONE.#   undef 
44d0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
44e0: 53 49 5a 45 0a 23 20 20 20 64 65 66 69 6e 65 20  SIZE.#   define 
44f0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
4500: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
4510: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
4520: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
4530: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
4540: 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c  __linux__) \.  |
4550: 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32  | defined(_WIN32
4560: 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65  ) \.  || (define
4570: 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20  d(__APPLE__) && 
4580: 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f  defined(__MACH__
4590: 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  )) \.  || define
45a0: 64 28 5f 5f 73 75 6e 29 0a 23 20 20 20 64 65 66  d(__sun).#   def
45b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
45c0: 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30  MAP_SIZE 0x7fff0
45d0: 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31  000  /* 21474181
45e0: 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20  12 */.# else.#  
45f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4600: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
4610: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
4620: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
4630: 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65 78 63  SIZE_xc 1 /* exc
4640: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
4650: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  c */.#endif../*.
4660: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 4d  ** The default M
4670: 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f  MAP_SIZE is zero
4680: 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d   on all platform
4690: 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66 20  s.  Or, even if 
46a0: 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66 61  a larger.** defa
46b0: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
46c0: 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63 6f   specified at co
46d0: 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65  mpile-time, make
46e0: 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64 6f   sure that it do
46f0: 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64  es.** not exceed
4700: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61   the maximum mma
4710: 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64  p size..*/.#ifnd
4720: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
4730: 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65  T_MMAP_SIZE.# de
4740: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
4750: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  ULT_MMAP_SIZE 0.
4760: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4770: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
4780: 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75  E_xc 1  /* Exclu
4790: 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20  de from ctime.c 
47a0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51  */.#endif.#if SQ
47b0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
47c0: 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41  P_SIZE>SQLITE_MA
47d0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e  X_MMAP_SIZE.# un
47e0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
47f0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
4800: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
4810: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53  AULT_MMAP_SIZE S
4820: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4830: 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  IZE.#endif../*.*
4840: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
4850: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
4860: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
4870: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
4880: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
4890: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
48a0: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
48b0: 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  . .**.** The sql
48c0: 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20  ite.busyHandler 
48d0: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71  member of the sq
48e0: 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74  lite struct cont
48f0: 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a  ains the busy.**
4900: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68   callback for th
4910: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
4920: 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70  e. Each pager op
4930: 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c  ened via the sql
4940: 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73  ite.** handle is
4950: 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65   passed a pointe
4960: 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79  r to sqlite.busy
4970: 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73  Handler. The bus
4980: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
4990: 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74  lback is current
49a0: 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20  ly invoked only 
49b0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65  from within page
49c0: 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  r.c..*/.typedef 
49d0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
49e0: 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a  er BusyHandler;.
49f0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
4a00: 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75  er {.  int (*xFu
4a10: 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b  nc)(void *,int);
4a20: 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61    /* The busy ca
4a30: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
4a40: 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20   *pArg;         
4a50: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
4a60: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
4a70: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
4a80: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
4a90: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
4aa0: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
4ab0: 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f  sy call */.};../
4ac0: 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  *.** Name of the
4ad0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
4ae0: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73   table.  The mas
4af0: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
4b00: 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69  le.** is a speci
4b10: 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f  al table that ho
4b20: 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e  lds the names an
4b30: 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  d attributes of 
4b40: 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c  all.** user tabl
4b50: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a  es and indices..
4b60: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
4b70: 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71  R_NAME       "sq
4b80: 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65  lite_master".#de
4b90: 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52  fine TEMP_MASTER
4ba0: 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74  _NAME  "sqlite_t
4bb0: 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a  emp_master"../*.
4bc0: 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65  ** The root-page
4bd0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
4be0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a  atabase table..*
4bf0: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
4c00: 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f  _ROOT       1../
4c10: 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66  *.** The name of
4c20: 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c   the schema tabl
4c30: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
4c40: 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28  HEMA_TABLE(x)  (
4c50: 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26  (!OMIT_TEMPDB)&&
4c60: 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54  (x==1)?TEMP_MAST
4c70: 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e  ER_NAME:MASTER_N
4c80: 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f  AME)../*.** A co
4c90: 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20  nvenience macro 
4ca0: 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65  that returns the
4cb0: 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   number of eleme
4cc0: 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72  nts in.** an arr
4cd0: 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41  ay..*/.#define A
4ce0: 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28  rraySize(X)    (
4cf0: 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f  (int)(sizeof(X)/
4d00: 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a  sizeof(X[0])))..
4d10: 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20  /*.** Determine 
4d20: 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
4d30: 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  is a power of tw
4d40: 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  o.*/.#define IsP
4d50: 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28  owerOfTwo(X) (((
4d60: 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a  X)&((X)-1))==0).
4d70: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
4d80: 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20  wing value as a 
4d90: 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73  destructor means
4da0: 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44   to use sqlite3D
4db0: 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20  bFree()..** The 
4dc0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
4dd0: 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73  routine requires
4de0: 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20   two parameters 
4df0: 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a  instead of the .
4e00: 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72  ** one parameter
4e10: 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72   that destructor
4e20: 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e  s normally want.
4e30: 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20    So we have to 
4e40: 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68  introduce .** th
4e50: 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74  is magic value t
4e60: 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f  hat the code kno
4e70: 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66  ws to handle dif
4e80: 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a  ferently.  Any .
4e90: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
4ea0: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
4eb0: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
4ec0: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
4ed0: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
4ee0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
4ef0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
4f00: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
4f10: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
4f20: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
4f30: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
4f40: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
4f50: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
4f60: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
4f70: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
4f80: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
4f90: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
4fa0: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
4fb0: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
4fc0: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
4fd0: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
4fe0: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
4ff0: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
5000: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
5010: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
5020: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
5030: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
5040: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
5050: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
5060: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
5070: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
5080: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
5090: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
50a0: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
50b0: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
50c0: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
50d0: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
50e0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
50f0: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
5100: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
5110: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
5120: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
5130: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
5140: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
5150: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
5160: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
5170: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
5180: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
5190: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
51a0: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
51b0: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
51c0: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
51d0: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
51e0: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
51f0: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
5200: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
5210: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
5220: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
5230: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
5240: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
5250: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
5260: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
5270: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
5280: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
5290: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
52a0: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
52b0: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
52c0: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
52d0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
52e0: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
52f0: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
5300: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
5310: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
5320: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
5330: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
5340: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
5350: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
5360: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
5370: 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20  _WSD .  #define 
5380: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20  GLOBAL(t,v) v.  
5390: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47  #define sqlite3G
53a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69  lobalConfig sqli
53b0: 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66  te3Config.#endif
53c0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
53d0: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65  owing macros are
53e0: 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73   used to suppres
53f0: 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  s compiler warni
5400: 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61  ngs and to.** ma
5410: 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68  ke it clear to h
5420: 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65  uman readers whe
5430: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
5440: 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65  ameter is delibe
5450: 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20  rately .** left 
5460: 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68  unused within th
5470: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
5480: 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c  tion. This usual
5490: 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a  ly happens when.
54a0: 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73  ** a function is
54b0: 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75   called via a fu
54c0: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20  nction pointer. 
54d0: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20  For example the 
54e0: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
54f0: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
5500: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
5510: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
5520: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
5530: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
5540: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
5550: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
5560: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
5570: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
5580: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
5590: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
55a0: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
55b0: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
55c0: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
55d0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
55e0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
55f0: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
5600: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
5610: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
5620: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
5630: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
5640: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
5650: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
5660: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
5670: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
5680: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
5690: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
56a0: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
56b0: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
56c0: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
56d0: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
56e0: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
56f0: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
5700: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
5710: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
5720: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
5730: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
5740: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
5750: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
5760: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
5770: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
5780: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
5790: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
57a0: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
57b0: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
57c0: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
57d0: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
57e0: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
57f0: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
5800: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
5810: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
5820: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
5830: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
5840: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5850: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
5860: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
5870: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
5880: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
5890: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
58a0: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
58b0: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
58c0: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
58d0: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
58e0: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
58f0: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
5900: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
5910: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
5920: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
5930: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
5940: 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78  ruct ExprSpan Ex
5950: 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20  prSpan;.typedef 
5960: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
5970: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5980: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
5990: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a  FuncDestructor;.
59a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
59b0: 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a  uncDef FuncDef;.
59c0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
59d0: 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44  uncDefHash FuncD
59e0: 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20  efHash;.typedef 
59f0: 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64  struct IdList Id
5a00: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
5a10: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
5a20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5a30: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64   IndexSample Ind
5a40: 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65  exSample;.typede
5a50: 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73  f struct KeyClas
5a60: 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65  s KeyClass;.type
5a70: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e  def struct KeyIn
5a80: 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65  fo KeyInfo;.type
5a90: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
5aa0: 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a  side Lookaside;.
5ab0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
5ac0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f  ookasideSlot Loo
5ad0: 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65  kasideSlot;.type
5ae0: 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c  def struct Modul
5af0: 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65  e Module;.typede
5b00: 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  f struct NameCon
5b10: 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  text NameContext
5b20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5b30: 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79   Parse Parse;.ty
5b40: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
5b50: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
5b60: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
5b70: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
5b80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
5b90: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
5ba0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c  pedef struct Sel
5bb0: 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65  ectDest SelectDe
5bc0: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
5bd0: 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69  ct SrcList SrcLi
5be0: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
5bf0: 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41  ct StrAccum StrA
5c00: 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74  ccum;.typedef st
5c10: 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65  ruct Table Table
5c20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5c30: 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65   TableLock Table
5c40: 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74  Lock;.typedef st
5c50: 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e  ruct Token Token
5c60: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5c70: 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72   Trigger Trigger
5c80: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5c90: 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67   TriggerPrg Trig
5ca0: 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20  gerPrg;.typedef 
5cb0: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
5cc0: 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a  ep TriggerStep;.
5cd0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55  typedef struct U
5ce0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e  npackedRecord Un
5cf0: 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79  packedRecord;.ty
5d00: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61  pedef struct VTa
5d10: 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65  ble VTable;.type
5d20: 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43  def struct VtabC
5d30: 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65  tx VtabCtx;.type
5d40: 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65  def struct Walke
5d50: 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65  r Walker;.typede
5d60: 66 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e  f struct WhereIn
5d70: 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 0a 2f  fo WhereInfo;../
5d80: 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63  *.** Defer sourc
5d90: 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62  ing vdbe.h and b
5da0: 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74  tree.h until aft
5db0: 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64 20  er the "u8" and 
5dc0: 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72  .** "BusyHandler
5dd0: 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65  " typedefs. vdbe
5de0: 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73  .h also requires
5df0: 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70   a few of the op
5e00: 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  aque.** pointer 
5e10: 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63  types (i.e. Func
5e20: 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f  Def) defined abo
5e30: 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  ve..*/.#include 
5e40: 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75  "btree.h".#inclu
5e50: 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63  de "vdbe.h".#inc
5e60: 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23  lude "pager.h".#
5e70: 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e  include "pcache.
5e80: 68 22 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73  h"..#include "os
5e90: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75  .h".#include "mu
5ea0: 74 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45  tex.h".../*.** E
5eb0: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
5ec0: 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64  e to be accessed
5ed0: 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69   by the system i
5ee0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
5ef0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
5f00: 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  g structure.  Th
5f10: 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ere are normally
5f20: 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74   two of these st
5f30: 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74  ructures.** in t
5f40: 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20  he sqlite.aDb[] 
5f50: 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69  array.  aDb[0] i
5f60: 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
5f70: 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20  ase file and.** 
5f80: 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61  aDb[1] is the da
5f90: 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
5fa0: 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61   to hold tempora
5fb0: 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69  ry tables.  Addi
5fc0: 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61  tional.** databa
5fd0: 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63  ses may be attac
5fe0: 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44  hed..*/.struct D
5ff0: 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  b {.  char *zNam
6000: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  e;         /* Na
6010: 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62  me of this datab
6020: 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  ase */.  Btree *
6030: 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  pBt;          /*
6040: 20 54 68 65 20 42 2a 54 72 65 65 20 73 74 72 75   The B*Tree stru
6050: 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 20 64  cture for this d
6060: 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a  atabase file */.
6070: 20 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65    u8 safety_leve
6080: 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67  l;     /* How ag
6090: 67 72 65 73 73 69 76 65 20 61 74 20 73 79 6e 63  gressive at sync
60a0: 69 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b  ing data to disk
60b0: 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
60c0: 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f  chema;     /* Po
60d0: 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73  inter to databas
60e0: 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62  e schema (possib
60f0: 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b  ly shared) */.};
6100: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
6110: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
6120: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73  wing structure s
6130: 74 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65  tores a database
6140: 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d   schema..**.** M
6150: 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  ost Schema objec
6160: 74 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  ts are associate
6170: 64 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20  d with a Btree. 
6180: 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69   The exception i
6190: 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20  s.** the Schema 
61a0: 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  for the TEMP dat
61b0: 61 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61  abaes (sqlite3.a
61c0: 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20  Db[1]) which is 
61d0: 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a  free-standing..*
61e0: 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68  * In shared cach
61f0: 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65  e mode, a single
6200: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63   Schema object c
6210: 61 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20  an be shared by 
6220: 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65  multiple.** Btre
6230: 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f  es that refer to
6240: 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c   the same underl
6250: 79 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62  ying BtShared ob
6260: 6a 65 63 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68  ject..** .** Sch
6270: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
6280: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
6290: 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74  allocated when t
62a0: 68 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68  he last Btree th
62b0: 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73  at.** references
62c0: 20 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79   them is destroy
62d0: 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53  ed.   The TEMP S
62e0: 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c  chema is manuall
62f0: 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71  y freed by.** sq
6300: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a  lite3_close()..*
6310: 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73  .** A thread mus
6320: 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d  t be holding a m
6330: 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72  utex on the corr
6340: 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20  esponding Btree 
6350: 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61  in order.** to a
6360: 63 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e  ccess Schema con
6370: 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c  tent.  This impl
6380: 69 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72  ies that the thr
6390: 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65  ead must also be
63a0: 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75  .** holding a mu
63b0: 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  tex on the sqlit
63c0: 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f  e3 connection po
63d0: 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20  inter that owns 
63e0: 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f  the Btree..** Fo
63f0: 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c  r a TEMP Schema,
6400: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63   only the connec
6410: 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65  tion mutex is re
6420: 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  quired..*/.struc
6430: 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74  t Schema {.  int
6440: 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20   schema_cookie; 
6450: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63    /* Database sc
6460: 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
6470: 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ber for this fil
6480: 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65  e */.  int iGene
6490: 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47  ration;     /* G
64a0: 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
64b0: 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20  r.  Incremented 
64c0: 77 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65  with each change
64d0: 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61   */.  Hash tblHa
64e0: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
64f0: 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64  l tables indexed
6500: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
6510: 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20  sh idxHash;     
6520: 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64     /* All (named
6530: 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65  ) indices indexe
6540: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
6550: 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20  ash trigHash;   
6560: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67      /* All trigg
6570: 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ers indexed by n
6580: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b  ame */.  Hash fk
6590: 65 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  eyHash;       /*
65a0: 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   All foreign key
65b0: 73 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20  s by referenced 
65c0: 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
65d0: 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20  Table *pSeqTab; 
65e0: 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69       /* The sqli
65f0: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
6600: 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e  e used by AUTOIN
6610: 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20  CREMENT */.  u8 
6620: 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
6630: 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d    /* Schema form
6640: 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74  at version for t
6650: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38  his file */.  u8
6660: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
6670: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
6680: 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73  ing used by this
6690: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
66a0: 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  16 flags;       
66b0: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73      /* Flags ass
66c0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
66d0: 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
66e0: 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20  t cache_size;   
66f0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
6700: 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20  pages to use in 
6710: 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a  the cache */.};.
6720: 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
6730: 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
6740: 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
6750: 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
6760: 68 65 20 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d  he .** Db.pSchem
6770: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
6780: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  */.#define DbHas
6790: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
67a0: 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49      (((D)->aDb[I
67b0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  ].pSchema->flags
67c0: 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
67d0: 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70  ine DbHasAnyProp
67e0: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28  erty(D,I,P)  (((
67f0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
6800: 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d  ma->flags&(P))!=
6810: 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74  0).#define DbSet
6820: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
6830: 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e      (D)->aDb[I].
6840: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 7c 3d  pSchema->flags|=
6850: 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c  (P).#define DbCl
6860: 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  earProperty(D,I,
6870: 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d  P)   (D)->aDb[I]
6880: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26  .pSchema->flags&
6890: 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  =~(P)../*.** All
68a0: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
68b0: 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e  the DB.pSchema->
68c0: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  flags field..**.
68d0: 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61  ** The DB_Schema
68e0: 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73  Loaded flag is s
68f0: 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74  et after the dat
6900: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
6910: 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e   been.** read in
6920: 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68  to internal hash
6930: 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44   tables..**.** D
6940: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d  B_UnresetViews m
6950: 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72  eans that one or
6960: 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65   more views have
6970: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68   column names th
6980: 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20  at.** have been 
6990: 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20  filled out.  If 
69a0: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
69b0: 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e  es, these column
69c0: 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20   names might.** 
69d0: 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74  changes and so t
69e0: 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65  he view will nee
69f0: 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a  d to be reset..*
6a00: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68  /.#define DB_Sch
6a10: 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30  emaLoaded    0x0
6a20: 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65  001  /* The sche
6a30: 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64  ma has been load
6a40: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  ed */.#define DB
6a50: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20  _UnresetViews   
6a60: 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65   0x0002  /* Some
6a70: 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69   views have defi
6a80: 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ned column names
6a90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45   */.#define DB_E
6aa0: 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30  mpty           0
6ab0: 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69  x0004  /* The fi
6ac0: 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e  le is empty (len
6ad0: 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a  gth 0 bytes) */.
6ae0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
6af0: 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b  r of different k
6b00: 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74  inds of things t
6b10: 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74  hat can be limit
6b20: 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20  ed.** using the 
6b30: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20  sqlite3_limit() 
6b40: 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64  interface..*/.#d
6b50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c  efine SQLITE_N_L
6b60: 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d  IMIT (SQLITE_LIM
6b70: 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48  IT_TRIGGER_DEPTH
6b80: 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61  +1)../*.** Looka
6b90: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61  side malloc is a
6ba0: 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69   set of fixed-si
6bb0: 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20  ze buffers that 
6bc0: 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74  can be used.** t
6bd0: 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20  o satisfy small 
6be0: 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79  transient memory
6bf0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75   allocation requ
6c00: 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73  ests for objects
6c10: 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77  .** associated w
6c20: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
6c30: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
6c40: 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f  tion.  The use o
6c50: 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  f.** lookaside m
6c60: 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61  alloc provides a
6c70: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72   significant per
6c80: 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65  formance enhance
6c90: 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20  ment.** (approx 
6ca0: 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67  10%) by avoiding
6cb0: 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63   numerous malloc
6cc0: 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77  /free requests w
6cd0: 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20  hile parsing.** 
6ce0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  SQL statements..
6cf0: 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73  **.** The Lookas
6d00: 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f  ide structure ho
6d10: 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  lds configuratio
6d20: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  n information ab
6d30: 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61  out the.** looka
6d40: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73  side malloc subs
6d50: 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61  ystem.  Each ava
6d60: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  ilable memory al
6d70: 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74  location in.** t
6d80: 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62  he lookaside sub
6d90: 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64  system is stored
6da0: 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   on a linked lis
6db0: 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  t of LookasideSl
6dc0: 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a  ot.** objects..*
6dd0: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61  *.** Lookaside a
6de0: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f  llocations are o
6df0: 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20  nly allowed for 
6e00: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65  objects that are
6e10: 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77   associated.** w
6e20: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
6e30: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
6e40: 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63  tion.  Hence, sc
6e50: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
6e60: 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74   cannot.** be st
6e70: 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64  ored in lookasid
6e80: 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61  e because in sha
6e90: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74  red cache mode t
6ea0: 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  he schema inform
6eb0: 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72  ation.** is shar
6ec0: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64  ed by multiple d
6ed0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
6ee0: 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c  ons.  Therefore,
6ef0: 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a   while parsing.*
6f00: 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  * schema informa
6f10: 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73  tion, the Lookas
6f20: 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61  ide.bEnabled fla
6f30: 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20  g is cleared so 
6f40: 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64  that.** lookasid
6f50: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  e allocations ar
6f60: 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f  e not used to co
6f70: 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65  nstruct the sche
6f80: 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73  ma objects..*/.s
6f90: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20  truct Lookaside 
6fa0: 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  {.  u16 sz;     
6fb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
6fc0: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
6fd0: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
6fe0: 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20   u8 bEnabled;   
6ff0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73           /* Fals
7000: 65 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77  e to disable new
7010: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
7020: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62  ations */.  u8 b
7030: 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20  Malloced;       
7040: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70      /* True if p
7050: 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66  Start obtained f
7060: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
7070: 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f  oc() */.  int nO
7080: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
7090: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
70a0: 75 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79  uffers currently
70b0: 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a   checked out */.
70c0: 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20    int mxOut;    
70d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67            /* Hig
70e0: 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20  hwater mark for 
70f0: 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e  nOut */.  int an
7100: 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20  Stat[3];        
7110: 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31    /* 0: hits.  1
7120: 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20  : size misses.  
7130: 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a  2: full misses *
7140: 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  /.  LookasideSlo
7150: 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c  t *pFree;   /* L
7160: 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ist of available
7170: 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f   buffers */.  vo
7180: 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20  id *pStart;     
7190: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
71a0: 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  yte of available
71b0: 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f   memory space */
71c0: 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20  .  void *pEnd;  
71d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
71e0: 72 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e  rst byte past en
71f0: 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73  d of available s
7200: 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63  pace */.};.struc
7210: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
7220: 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  {.  LookasideSlo
7230: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20  t *pNext;    /* 
7240: 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74  Next buffer in t
7250: 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20  he list of free 
7260: 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f  buffers */.};../
7270: 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c  *.** A hash tabl
7280: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64  e for function d
7290: 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  efinitions..**.*
72a0: 2a 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63  * Hash each Func
72b0: 44 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e  Def structure in
72c0: 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  to one of the Fu
72d0: 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c  ncDefHash.a[] sl
72e0: 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f  ots..** Collisio
72f0: 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75  ns are on the Fu
7300: 6e 63 44 65 66 2e 70 48 61 73 68 20 63 68 61 69  ncDef.pHash chai
7310: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  n..*/.struct Fun
7320: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
7330: 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20  cDef *a[23];    
7340: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
7350: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a   for functions *
7360: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  /.};../*.** Each
7370: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
7380: 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61  tion is an insta
7390: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
73a0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
73b0: 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65  */.struct sqlite
73c0: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66  3 {.  sqlite3_vf
73d0: 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20  s *pVfs;        
73e0: 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66      /* OS Interf
73f0: 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ace */.  struct 
7400: 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20  Vdbe *pVdbe;    
7410: 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
7420: 66 20 61 63 74 69 76 65 20 76 69 72 74 75 61 6c  f active virtual
7430: 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43   machines */.  C
7440: 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c  ollSeq *pDfltCol
7450: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
7460: 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  The default coll
7470: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28  ating sequence (
7480: 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c  BINARY) */.  sql
7490: 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65  ite3_mutex *mute
74a0: 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  x;         /* Co
74b0: 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a  nnection mutex *
74c0: 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20  /.  Db *aDb;    
74d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74e0: 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64    /* All backend
74f0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20  s */.  int nDb; 
7500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7510: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7520: 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65  f backends curre
7530: 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20  ntly in use */. 
7540: 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20   int flags;     
7550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7560: 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20  * Miscellaneous 
7570: 66 6c 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77  flags. See below
7580: 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f   */.  i64 lastRo
7590: 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  wid;            
75a0: 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20      /* ROWID of 
75b0: 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65  most recent inse
75c0: 72 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  rt (see above) *
75d0: 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20  /.  i64 szMmap; 
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75f0: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61    /* Default mma
7600: 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a  p_size setting *
7610: 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
7620: 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20   openFlags;     
7630: 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65    /* Flags passe
7640: 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73  d to sqlite3_vfs
7650: 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e  .xOpen() */.  in
7660: 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20  t errCode;      
7670: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
7680: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
7690: 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29   code (SQLITE_*)
76a0: 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73   */.  int errMas
76b0: 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
76c0: 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20      /* & result 
76d0: 63 6f 64 65 73 20 77 69 74 68 20 74 68 69 73 20  codes with this 
76e0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
76f0: 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46   */.  u16 dbOptF
7700: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
7710: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20      /* Flags to 
7720: 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f  enable/disable o
7730: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a  ptimizations */.
7740: 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b    u8 autoCommit;
7750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7760: 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d  /* The auto-comm
7770: 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38  it flag. */.  u8
7780: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20   temp_store;    
7790: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
77a0: 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79  : file 2: memory
77b0: 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20   0: default */. 
77c0: 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64   u8 mallocFailed
77d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
77e0: 2a 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76  * True if we hav
77f0: 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20  e seen a malloc 
7800: 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20  failure */.  u8 
7810: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20  dfltLockMode;   
7820: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
7830: 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  fault locking-mo
7840: 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20  de for attached 
7850: 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20  dbs */.  signed 
7860: 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63  char nextAutovac
7870: 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61  ;      /* Autova
7880: 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20  c setting after 
7890: 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f  VACUUM if >=0 */
78a0: 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72  .  u8 suppressEr
78b0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
78c0: 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65   /* Do not issue
78d0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
78e0: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
78f0: 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20  vtabOnConflict; 
7900: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
7910: 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f  lue to return fo
7920: 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e  r s3_vtab_on_con
7930: 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20  flict() */.  u8 
7940: 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
7950: 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72  epoint;    /* Tr
7960: 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d  ue if the outerm
7970: 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73  ost savepoint is
7980: 20 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e   a TS */.  int n
7990: 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20  extPagesize;    
79a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
79b0: 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55  size after VACUU
79c0: 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32  M if >0 */.  u32
79d0: 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20   magic;         
79e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
79f0: 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64  gic number for d
7a00: 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69  etect library mi
7a10: 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43  suse */.  int nC
7a20: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
7a30: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
7a40: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
7a50: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a  ite3_changes() *
7a60: 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68  /.  int nTotalCh
7a70: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
7a80: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
7a90: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74  ned by sqlite3_t
7aa0: 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a  otal_changes() *
7ab0: 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53  /.  int aLimit[S
7ac0: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20  QLITE_N_LIMIT]; 
7ad0: 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20    /* Limits */. 
7ae0: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49   struct sqlite3I
7af0: 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f  nitInfo {      /
7b00: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
7b10: 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ed during initia
7b20: 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  lization */.    
7b30: 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20  int newTnum;    
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
7b50: 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65  ootpage of table
7b60: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
7b70: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62  ed */.    u8 iDb
7b80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7b90: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64        /* Which d
7ba0: 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20  b file is being 
7bb0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
7bc0: 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20     u8 busy;     
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7be0: 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e  * TRUE if curren
7bf0: 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67  tly initializing
7c00: 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61   */.    u8 orpha
7c10: 6e 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 20  nTrigger;       
7c20: 20 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74      /* Last stat
7c30: 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65  ement is orphane
7c40: 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a  d TEMP trigger *
7c50: 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e  /.  } init;.  in
7c60: 74 20 61 63 74 69 76 65 56 64 62 65 43 6e 74 3b  t activeVdbeCnt;
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7c80: 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63  umber of VDBEs c
7c90: 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69  urrently executi
7ca0: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 77 72 69 74  ng */.  int writ
7cb0: 65 56 64 62 65 43 6e 74 3b 20 20 20 20 20 20 20  eVdbeCnt;       
7cc0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
7cd0: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
7ce0: 74 68 61 74 20 61 72 65 20 77 72 69 74 69 6e 67  that are writing
7cf0: 20 2a 2f 0a 20 20 69 6e 74 20 76 64 62 65 45 78   */.  int vdbeEx
7d00: 65 63 43 6e 74 3b 20 20 20 20 20 20 20 20 20 20  ecCnt;          
7d10: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7d20: 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
7d30: 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20   VdbeExec() */. 
7d40: 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b   int nExtension;
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7d60: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64  * Number of load
7d70: 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f  ed extensions */
7d80: 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e  .  void **aExten
7d90: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
7da0: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61   /* Array of sha
7db0: 72 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64  red library hand
7dc0: 6c 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  les */.  void (*
7dd0: 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f  xTrace)(void*,co
7de0: 6e 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20  nst char*);     
7df0: 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63     /* Trace func
7e00: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
7e10: 70 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20  pTraceArg;      
7e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e30: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
7e40: 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e  to the trace fun
7e50: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
7e60: 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64  (*xProfile)(void
7e70: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36  *,const char*,u6
7e80: 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e  4);  /* Profilin
7e90: 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  g function */.  
7ea0: 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72  void *pProfileAr
7eb0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7ec0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
7ed0: 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65  ument to profile
7ee0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
7ef0: 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b  oid *pCommitArg;
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f10: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
7f20: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28  xCommitCallback(
7f30: 29 20 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a  ) */   .  int (*
7f40: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29  xCommitCallback)
7f50: 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49  (void*);    /* I
7f60: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
7f70: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
7f80: 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b  d *pRollbackArg;
7f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7fa0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52  * Argument to xR
7fb0: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28  ollbackCallback(
7fc0: 29 20 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28  ) */   .  void (
7fd0: 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  *xRollbackCallba
7fe0: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49  ck)(void*); /* I
7ff0: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
8000: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
8010: 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20  d *pUpdateArg;. 
8020: 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43   void (*xUpdateC
8030: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69  allback)(void*,i
8040: 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
8050: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69  const char*,sqli
8060: 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64  te_int64);.#ifnd
8070: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
8080: 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43  AL.  int (*xWalC
8090: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c  allback)(void *,
80a0: 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73   sqlite3 *, cons
80b0: 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
80c0: 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b    void *pWalArg;
80d0: 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a  .#endif.  void(*
80e0: 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69  xCollNeeded)(voi
80f0: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
8100: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63  eTextRep,const c
8110: 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78  har*);.  void(*x
8120: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f  CollNeeded16)(vo
8130: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
8140: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
8150: 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  void*);.  void *
8160: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a  pCollNeededArg;.
8170: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
8180: 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  *pErr;          
8190: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
81a0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
81b0: 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b    char *zErrMsg;
81c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81d0: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
81e0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 28 55 54  rror message (UT
81f0: 46 2d 38 20 65 6e 63 6f 64 65 64 29 20 2a 2f 0a  F-8 encoded) */.
8200: 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 31    char *zErrMsg1
8210: 36 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  6;              
8220: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
8230: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 28 55 54  rror message (UT
8240: 46 2d 31 36 20 65 6e 63 6f 64 65 64 29 20 2a 2f  F-16 encoded) */
8250: 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76  .  union {.    v
8260: 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e  olatile int isIn
8270: 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72  terrupted; /* Tr
8280: 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e  ue if sqlite3_in
8290: 74 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e  terrupt has been
82a0: 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64   called */.    d
82b0: 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20  ouble notUsed1; 
82c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
82d0: 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a  acer */.  } u1;.
82e0: 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b    Lookaside look
82f0: 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
8300: 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  /* Lookaside mal
8310: 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  loc configuratio
8320: 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
8330: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
8340: 5a 41 54 49 4f 4e 0a 20 20 69 6e 74 20 28 2a 78  ZATION.  int (*x
8350: 41 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  Auth)(void*,int,
8360: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
8370: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
8380: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
8390: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
83a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83b0: 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68    /* Access auth
83c0: 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69  orization functi
83d0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  on */.  void *pA
83e0: 75 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  uthArg;         
83f0: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
8400: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63  ument to the acc
8410: 65 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f  ess auth functio
8420: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  n */.#endif.#ifn
8430: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
8440: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
8450: 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72  K.  int (*xProgr
8460: 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  ess)(void *);   
8470: 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73    /* The progres
8480: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
8490: 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41  void *pProgressA
84a0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rg;           /*
84b0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
84c0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
84d0: 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 72 6f  ck */.  int nPro
84e0: 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20  gressOps;       
84f0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
8500: 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70  of opcodes for p
8510: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
8520: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
8530: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
8540: 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
8550: 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20  t nVTrans;      
8560: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
8570: 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66  llocated size of
8580: 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61   aVTrans */.  Ha
8590: 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20  sh aModule;     
85a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
85b0: 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69  opulated by sqli
85c0: 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c  te3_create_modul
85d0: 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78  e() */.  VtabCtx
85e0: 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20   *pVtabCtx;     
85f0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
8600: 74 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61  t for active vta
8610: 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65  b connect/create
8620: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61   */.  VTable **a
8630: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
8640: 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74      /* Virtual t
8650: 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20  ables with open 
8660: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a  transactions */.
8670: 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f    VTable *pDisco
8680: 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73  nnect;    /* Dis
8690: 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e  connect these in
86a0: 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72   next sqlite3_pr
86b0: 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69  epare() */.#endi
86c0: 66 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68 20  f.  FuncDefHash 
86d0: 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  aFunc;          
86e0: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
86f0: 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75  of connection fu
8700: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73  nctions */.  Has
8710: 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20  h aCollSeq;     
8720: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
8730: 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  l collating sequ
8740: 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48  ences */.  BusyH
8750: 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c  andler busyHandl
8760: 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79  er;      /* Busy
8770: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44   callback */.  D
8780: 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20  b aDbStatic[2]; 
8790: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
87a0: 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72  Static space for
87b0: 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62   the 2 default b
87c0: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76  ackends */.  Sav
87d0: 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
87e0: 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  nt;        /* Li
87f0: 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76  st of active sav
8800: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
8810: 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20   busyTimeout;   
8820: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75             /* Bu
8830: 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f  sy handler timeo
8840: 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20  ut, in msec */. 
8850: 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b   int nSavepoint;
8860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8870: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  * Number of non-
8880: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
8890: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
88a0: 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20  nStatement;     
88b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
88c0: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74  ber of nested st
88d0: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
88e0: 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e  ions  */.  i64 n
88f0: 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20  DeferredCons;   
8900: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
8910: 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
8920: 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61  ints this transa
8930: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 6e 74 20  ction. */.  int 
8940: 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20 20  *pnBytesFreed;  
8950: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
8960: 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d  not NULL, increm
8970: 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46 72  ent this in DbFr
8980: 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64 65 66 20  ee() */..#ifdef 
8990: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
89a0: 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a  LOCK_NOTIFY.  /*
89b0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
89c0: 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c  ariables are all
89d0: 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68   protected by th
89e0: 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 20  e STATIC_MASTER 
89f0: 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74  .  ** mutex, not
8a00: 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65   by sqlite3.mute
8a10: 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64  x. They are used
8a20: 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69   by code in noti
8a30: 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a  fy.c. .  **.  **
8a40: 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43   When X.pUnlockC
8a50: 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68  onnection==Y, th
8a60: 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20  at means that X 
8a70: 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59  is waiting for Y
8a80: 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20   to.  ** unlock 
8a90: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70  so that it can p
8aa0: 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  roceed..  **.  *
8ab0: 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69  * When X.pBlocki
8ac0: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ngConnection==Y,
8ad0: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
8ae0: 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20   something that 
8af0: 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69  X tried.  ** tri
8b00: 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c  ed to do recentl
8b10: 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e  y failed with an
8b20: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65   SQLITE_LOCKED e
8b30: 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b  rror due to lock
8b40: 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59  s.  ** held by Y
8b50: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
8b60: 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65   *pBlockingConne
8b70: 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63  ction; /* Connec
8b80: 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64  tion that caused
8b90: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a   SQLITE_LOCKED *
8ba0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e  /.  sqlite3 *pUn
8bb0: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  lockConnection; 
8bc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
8bd0: 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68  nection to watch
8be0: 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20   for unlock */. 
8bf0: 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72   void *pUnlockAr
8c00: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
8c10: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
8c20: 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74  nt to xUnlockNot
8c30: 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ify */.  void (*
8c40: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76  xUnlockNotify)(v
8c50: 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f  oid **, int);  /
8c60: 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20  * Unlock notify 
8c70: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71  callback */.  sq
8c80: 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63  lite3 *pNextBloc
8c90: 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ked;        /* N
8ca0: 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61  ext in list of a
8cb0: 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65  ll blocked conne
8cc0: 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  ctions */.#endif
8cd0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63  .};../*.** A mac
8ce0: 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74  ro to discover t
8cf0: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  he encoding of a
8d00: 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64   database..*/.#d
8d10: 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 28 28  efine ENC(db) ((
8d20: 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68  db)->aDb[0].pSch
8d30: 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a  ema->enc)../*.**
8d40: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
8d50: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
8d60: 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69  .flags..*/.#defi
8d70: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72  ne SQLITE_VdbeTr
8d80: 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30  ace      0x00000
8d90: 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  001  /* True to 
8da0: 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75  trace VDBE execu
8db0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
8dc0: 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
8dd0: 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32  nges  0x00000002
8de0: 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64    /* Uncommitted
8df0: 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e   Hash table chan
8e00: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
8e10: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
8e20: 65 73 20 20 20 30 78 30 30 30 30 30 30 30 34 20  es   0x00000004 
8e30: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
8e40: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
8e50: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
8e60: 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e  SQLITE_ShortColN
8e70: 61 6d 65 73 20 20 30 78 30 30 30 30 30 30 30 38  ames  0x00000008
8e80: 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20    /* Show short 
8e90: 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f  columns names */
8ea0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8eb0: 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30  CountRows      0
8ec0: 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 43 6f  x00000010  /* Co
8ed0: 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64  unt rows changed
8ee0: 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20   by INSERT, */. 
8ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f10: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45           /*   DE
8f20: 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
8f30: 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20  and return */.  
8f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f60: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65          /*   the
8f70: 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63   count using a c
8f80: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66  allback. */.#def
8f90: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43  ine SQLITE_NullC
8fa0: 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30  allback   0x0000
8fb0: 30 30 32 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  0020  /* Invoke 
8fc0: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63  the callback onc
8fd0: 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20  e if the */.    
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9000: 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c        /*   resul
9010: 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a  t set is empty *
9020: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9030: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
9040: 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 44  0x00000040  /* D
9050: 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61  ebug print SQL a
9060: 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f  s it executes */
9070: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9080: 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30  VdbeListing    0
9090: 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20 44 65  x00000080  /* De
90a0: 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20  bug listings of 
90b0: 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f  VDBE programs */
90c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
90d0: 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30  WriteSchema    0
90e0: 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 4f 4b  x00000100  /* OK
90f0: 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54   to update SQLIT
9100: 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66  E_MASTER */.#def
9110: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
9120: 64 64 6f 70 54 72 61 63 65 20 30 78 30 30 30 30  ddopTrace 0x0000
9130: 30 32 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73  0200  /* Trace s
9140: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
9150: 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69  ) calls */.#defi
9160: 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65  ne SQLITE_Ignore
9170: 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 30  Checks   0x00000
9180: 34 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65  400  /* Do not e
9190: 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e  nforce check con
91a0: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
91b0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55  ine SQLITE_ReadU
91c0: 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30  ncommitted 0x000
91d0: 30 38 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61  0800  /* For sha
91e0: 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
91f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9200: 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20  _LegacyFileFmt  
9210: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 43  0x00001000  /* C
9220: 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61  reate new databa
9230: 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20  ses in format 1 
9240: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9250: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
9260: 20 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20   0x00002000  /* 
9270: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f  Use full fsync o
9280: 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f  n the backend */
9290: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
92a0: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30  CkptFullFSync  0
92b0: 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20 55 73  x00004000  /* Us
92c0: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72  e full fsync for
92d0: 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23   checkpoint */.#
92e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
92f0: 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30  coveryMode   0x0
9300: 30 30 30 38 30 30 30 20 20 2f 2a 20 49 67 6e 6f  0008000  /* Igno
9310: 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73  re schema errors
9320: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9330: 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20  TE_ReverseOrder 
9340: 20 20 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a    0x00010000  /*
9350: 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72   Reverse unorder
9360: 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64  ed SELECTs */.#d
9370: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
9380: 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30  Triggers    0x00
9390: 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  020000  /* Enabl
93a0: 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67  e recursive trig
93b0: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
93c0: 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65  SQLITE_ForeignKe
93d0: 79 73 20 20 20 20 30 78 30 30 30 34 30 30 30 30  ys    0x00040000
93e0: 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72    /* Enforce for
93f0: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
9400: 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65  ints  */.#define
9410: 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65   SQLITE_AutoInde
9420: 78 20 20 20 20 20 20 30 78 30 30 30 38 30 30 30  x      0x0008000
9430: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74  0  /* Enable aut
9440: 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a  omatic indexes *
9450: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9460: 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20  _PreferBuiltin  
9470: 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 50  0x00100000  /* P
9480: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
9490: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
94a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f  define SQLITE_Lo
94b0: 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30  adExtension  0x0
94c0: 30 32 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0200000  /* Enab
94d0: 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  le load_extensio
94e0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
94f0: 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65  ITE_EnableTrigge
9500: 72 20 20 30 78 30 30 34 30 30 30 30 30 20 20 2f  r  0x00400000  /
9510: 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
9520: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 2f 2a   triggers */../*
9530: 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20  .** Bits of the 
9540: 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61  sqlite3.dbOptFla
9550: 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72  gs field that ar
9560: 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a  e used by the.**
9570: 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
9580: 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
9590: 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49  TCTRL_OPTIMIZATI
95a0: 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61  ONS,...) interfa
95b0: 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69  ce to.** selecti
95c0: 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72  vely disable var
95d0: 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
95e0: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ns..*/.#define S
95f0: 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74  QLITE_QueryFlatt
9600: 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a  ener 0x0001   /*
9610: 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e   Query flattenin
9620: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
9630: 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20  ITE_ColumnCache 
9640: 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43     0x0002   /* C
9650: 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23  olumn cache */.#
9660: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72  define SQLITE_Gr
9670: 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78 30  oupByOrder   0x0
9680: 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59  004   /* GROUPBY
9690: 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42   cover of ORDERB
96a0: 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  Y */.#define SQL
96b0: 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e  ITE_FactorOutCon
96c0: 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43  st 0x0008   /* C
96d0: 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e  onstant factorin
96e0: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
96f0: 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74  ITE_IdxRealAsInt
9700: 20 20 20 30 78 30 30 31 30 20 20 20 2f 2a 20 53     0x0010   /* S
9710: 74 6f 72 65 20 52 45 41 4c 20 61 73 20 49 4e 54  tore REAL as INT
9720: 20 69 6e 20 69 6e 64 69 63 65 73 20 2a 2f 0a 23   in indices */.#
9730: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
9740: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
9750: 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  020   /* DISTINC
9760: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
9770: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9780: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
9790: 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76   0x0040   /* Cov
97a0: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
97b0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
97c0: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
97d0: 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f  in 0x0080   /* O
97e0: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
97f0: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
9800: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62  efine SQLITE_Sub
9810: 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31  qCoroutine  0x01
9820: 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65  00   /* Evaluate
9830: 20 73 75 62 71 75 65 72 69 65 73 20 61 73 20 63   subqueries as c
9840: 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65  oroutines */.#de
9850: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e  fine SQLITE_Tran
9860: 73 69 74 69 76 65 20 20 20 20 20 30 78 30 32 30  sitive     0x020
9870: 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76  0   /* Transitiv
9880: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
9890: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
98a0: 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30  AllOpts        0
98b0: 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f  xffff   /* All o
98c0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a  ptimizations */.
98d0: 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f  ./*.** Macros fo
98e0: 72 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65  r testing whethe
98f0: 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a  r or not optimiz
9900: 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c  ations are enabl
9910: 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a  ed or disabled..
9920: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
9930: 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
9940: 45 53 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  EST.#define Opti
9950: 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64  mizationDisabled
9960: 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64  (db, mask)  (((d
9970: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
9980: 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69  mask))!=0).#defi
9990: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
99a0: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
99b0: 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74     (((db)->dbOpt
99c0: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30  Flags&(mask))==0
99d0: 29 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ).#else.#define 
99e0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
99f0: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
9a00: 30 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  0.#define Optimi
9a10: 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62  zationEnabled(db
9a20: 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64  , mask)   1.#end
9a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  if../*.** Possib
9a40: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
9a50: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
9a60: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
9a70: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
9a80: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
9a90: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
9aa0: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
9ab0: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
9ac0: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
9ad0: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
9ae0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
9af0: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
9b00: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
9b10: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
9b20: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
9b30: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
9b40: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
9b50: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
9b60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
9b70: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
9b80: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
9b90: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
9ba0: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
9bb0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
9bc0: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
9bd0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
9be0: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
9bf0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9c00: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
9c10: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
9c20: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
9c30: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
9c40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9c50: 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20  _MAGIC_ZOMBIE   
9c60: 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43  0x64cffc7f  /* C
9c70: 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73  lose with last s
9c80: 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a  tatement close *
9c90: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
9ca0: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
9cb0: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
9cc0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
9cd0: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
9ce0: 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74  re.  A pointer t
9cf0: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
9d00: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
9d10: 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a  e sqlite.aFunc.*
9d20: 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57  * hash table.  W
9d30: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e  hen multiple fun
9d40: 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20  ctions have the 
9d50: 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68  same name, the h
9d60: 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69  ash table.** poi
9d70: 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20  nts to a linked 
9d80: 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74  list of these st
9d90: 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72  ructures..*/.str
9da0: 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20  uct FuncDef {.  
9db0: 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20  i16 nArg;       
9dc0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
9dd0: 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31  f arguments.  -1
9de0: 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64   means unlimited
9df0: 20 2a 2f 0a 20 20 75 38 20 69 50 72 65 66 45 6e   */.  u8 iPrefEn
9e00: 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72  c;         /* Pr
9e10: 65 66 65 72 72 65 64 20 74 65 78 74 20 65 6e 63  eferred text enc
9e20: 6f 64 69 6e 67 20 28 53 51 4c 49 54 45 5f 55 54  oding (SQLITE_UT
9e30: 46 38 2c 20 31 36 4c 45 2c 20 31 36 42 45 29 20  F8, 16LE, 16BE) 
9e40: 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 3b 20 20  */.  u8 flags;  
9e50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d            /* Som
9e60: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
9e70: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a   SQLITE_FUNC_* *
9e80: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  /.  void *pUserD
9e90: 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72  ata;     /* User
9ea0: 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20   data parameter 
9eb0: 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e  */.  FuncDef *pN
9ec0: 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
9ed0: 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  t function with 
9ee0: 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76  same name */.  v
9ef0: 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c  oid (*xFunc)(sql
9f00: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
9f10: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
9f20: 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66  *); /* Regular f
9f30: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
9f40: 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74  d (*xStep)(sqlit
9f50: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
9f60: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
9f70: 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73  ; /* Aggregate s
9f80: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
9f90: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
9fa0: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9fc0: 41 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69  Aggregate finali
9fd0: 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  zer */.  char *z
9fe0: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
9ff0: 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65   SQL name of the
a000: 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20   function. */.  
a010: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
a020: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
a030: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
a040: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
a050: 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65  hash */.  FuncDe
a060: 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
a070: 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65  uctor;   /* Refe
a080: 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65  rence counted de
a090: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
a0a0: 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  n */.};../*.** T
a0b0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e  his structure en
a0c0: 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65  capsulates a use
a0d0: 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72  r-function destr
a0e0: 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28  uctor callback (
a0f0: 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  as.** configured
a100: 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75   using create_fu
a110: 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64  nction_v2()) and
a120: 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75   a reference cou
a130: 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72  nter. When.** cr
a140: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
a150: 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20  () is called to 
a160: 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f  create a functio
a170: 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63  n with a destruc
a180: 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  tor,.** a single
a190: 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
a1a0: 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  type is allocate
a1b0: 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  d. FuncDestructo
a1c0: 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f  r.nRef is set to
a1d0: 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20   .** the number 
a1e0: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
a1f0: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
a200: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
a210: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
a220: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
a230: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
a240: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
a250: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
a260: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
a270: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
a280: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
a290: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
a2a0: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
a2b0: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
a2c0: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
a2d0: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
a2e0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
a2f0: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
a300: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
a310: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
a320: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
a330: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
a340: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
a350: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
a360: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
a370: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
a380: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
a390: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
a3a0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
a3b0: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
a3c0: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
a3d0: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
a3e0: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
a3f0: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
a400: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
a410: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
a420: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
a430: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
a440: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
a450: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
a460: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
a470: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
a480: 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73   There.** are as
a490: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
a4a0: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f  s in the code to
a4b0: 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f   verify this..*/
a4c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a4d0: 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78  FUNC_LIKE     0x
a4e0: 30 31 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20  01 /* Candidate 
a4f0: 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74  for the LIKE opt
a500: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
a510: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
a520: 5f 43 41 53 45 20 20 20 20 20 30 78 30 32 20 2f  _CASE     0x02 /
a530: 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65  * Case-sensitive
a540: 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74   LIKE-type funct
a550: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
a560: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d  QLITE_FUNC_EPHEM
a570: 20 20 20 20 30 78 30 34 20 2f 2a 20 45 70 68 65      0x04 /* Ephe
a580: 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77  meral.  Delete w
a590: 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66  ith VDBE */.#def
a5a0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
a5b0: 4e 45 45 44 43 4f 4c 4c 20 30 78 30 38 20 2f 2a  NEEDCOLL 0x08 /*
a5c0: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
a5d0: 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62  ollSeq() might b
a5e0: 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66  e called */.#def
a5f0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
a600: 43 4f 55 4e 54 20 20 20 20 30 78 31 30 20 2f 2a  COUNT    0x10 /*
a610: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28   Built-in count(
a620: 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a  *) aggregate */.
a630: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a640: 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 32  UNC_COALESCE 0x2
a650: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
a660: 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75  alesce() or ifnu
a670: 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ll() function */
a680: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a690: 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78  FUNC_LENGTH   0x
a6a0: 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c  40 /* Built-in l
a6b0: 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e  ength() function
a6c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a6d0: 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20  TE_FUNC_TYPEOF  
a6e0: 20 30 78 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69   0x80 /* Built-i
a6f0: 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  n typeof() funct
a700: 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ion */../*.** Th
a710: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65  e following thre
a720: 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49  e macros, FUNCTI
a730: 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29  ON(), LIKEFUNC()
a740: 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29   and AGGREGATE()
a750: 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
a760: 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69  create the initi
a770: 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20  alizers for the 
a780: 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72  FuncDef structur
a790: 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43  es..**.**   FUNC
a7a0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
a7b0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
a7c0: 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  nc).**     Used 
a7d0: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
a7e0: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
a7f0: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
a800: 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20  tion zName .**  
a810: 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62     implemented b
a820: 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75  y C function xFu
a830: 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73 20  nc that accepts 
a840: 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20  nArg arguments. 
a850: 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65  The.**     value
a860: 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67 20   passed as iArg 
a870: 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
a880: 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76  id*) and made av
a890: 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61  ailable.**     a
a8a0: 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20  s the user-data 
a8b0: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
a8c0: 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66 75  ta()) for the fu
a8d0: 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20  nction. If .**  
a8e0: 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20     argument bNC 
a8f0: 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68  is true, then th
a900: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
a910: 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73  EDCOLL flag is s
a920: 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52  et..**.**   AGGR
a930: 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
a940: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53  g, iArg, bNC, xS
a950: 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20  tep, xFinal).** 
a960: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
a970: 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  te an aggregate 
a980: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
a990: 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ion implemented 
a9a0: 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20  by.**     the C 
a9b0: 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20  functions xStep 
a9c0: 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20  and xFinal. The 
a9d0: 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d  first four param
a9e0: 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65  eters.**     are
a9f0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20   interpreted in 
aa00: 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
aa10: 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61  the first 4 para
aa20: 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20  meters to.**    
aa30: 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a   FUNCTION()..**.
aa40: 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  **   LIKEFUNC(zN
aa50: 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
aa60: 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55   flags).**     U
aa70: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
aa80: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
aa90: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
aaa0: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a  function zName .
aab0: 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65  **     that acce
aac0: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
aad0: 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d  ts and is implem
aae0: 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20  ented by a call 
aaf0: 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e  to C .**     fun
ab00: 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20  ction likeFunc. 
ab10: 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73  Argument pArg is
ab20: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
ab30: 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20   *) and made.** 
ab40: 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73      available as
ab50: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73   the function us
ab60: 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33  er-data (sqlite3
ab70: 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54  _user_data()). T
ab80: 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65  he.**     FuncDe
ab90: 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65  f.flags variable
aba0: 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76   is set to the v
abb0: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 74  alue passed as t
abc0: 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20  he flags.**     
abd0: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64  parameter..*/.#d
abe0: 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a  efine FUNCTION(z
abf0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
ac00: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
ac10: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
ac20: 55 54 46 38 2c 20 28 62 4e 43 2a 53 51 4c 49 54  UTF8, (bNC*SQLIT
ac30: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
ac40: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
ac50: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
ac60: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
ac70: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
ac80: 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28  efine FUNCTION2(
ac90: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
aca0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65  g, bNC, xFunc, e
acb0: 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
acc0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
acd0: 38 2c 20 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  8, (bNC*SQLITE_F
ace0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
acf0: 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53  traFlags, \.   S
ad00: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
ad10: 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
ad20: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
ad30: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54  0, 0}.#define ST
ad40: 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  R_FUNCTION(zName
ad50: 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e  , nArg, pArg, bN
ad60: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
ad70: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
ad80: 2c 20 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  , bNC*SQLITE_FUN
ad90: 43 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20 20  C_NEEDCOLL, \.  
ada0: 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c   pArg, 0, xFunc,
adb0: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
adc0: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b  , 0}.#define LIK
add0: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
ade0: 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c  g, arg, flags) \
adf0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
ae00: 5f 55 54 46 38 2c 20 66 6c 61 67 73 2c 20 28 76  _UTF8, flags, (v
ae10: 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69  oid *)arg, 0, li
ae20: 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a  keFunc, 0, 0, #z
ae30: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
ae40: 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e  ine AGGREGATE(zN
ae50: 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
ae60: 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
ae70: 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  l) \.  {nArg, SQ
ae80: 4c 49 54 45 5f 55 54 46 38 2c 20 6e 63 2a 53 51  LITE_UTF8, nc*SQ
ae90: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
aea0: 4c 4c 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  LL, \.   SQLITE_
aeb0: 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
aec0: 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69   0, 0, xStep,xFi
aed0: 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a  nal,#zName,0,0}.
aee0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65  ./*.** All curre
aef0: 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72  nt savepoints ar
af00: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69  e stored in a li
af10: 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
af20: 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33  ng at.** sqlite3
af30: 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65  .pSavepoint. The
af40: 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69   first element i
af50: 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74 68  n the list is th
af60: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a  e most recently.
af70: 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f  ** opened savepo
af80: 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20  int. Savepoints 
af90: 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65  are added to the
afa0: 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64 62   list by the vdb
afb0: 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e  e.** OP_Savepoin
afc0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
afd0: 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f 69  /.struct Savepoi
afe0: 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  nt {.  char *zNa
aff0: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
b000: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61             /* Sa
b010: 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75  vepoint name (nu
b020: 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f  l-terminated) */
b030: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
b040: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
b050: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
b060: 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b 20   of deferred fk 
b070: 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  violations */.  
b080: 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74  Savepoint *pNext
b090: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b0a0: 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61      /* Parent sa
b0b0: 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29  vepoint (if any)
b0c0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
b0d0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
b0e0: 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f  used as the seco
b0f0: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  nd parameter to 
b100: 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
b110: 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68  (),.** and as th
b120: 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
b130: 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e   the OP_Savepoin
b140: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
b150: 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  /.#define SAVEPO
b160: 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30  INT_BEGIN      0
b170: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
b180: 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a  NT_RELEASE    1.
b190: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
b1a0: 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a  T_ROLLBACK   2..
b1b0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69  ./*.** Each SQLi
b1c0: 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75  te module (virtu
b1d0: 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  al table definit
b1e0: 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20  ion) is defined 
b1f0: 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
b200: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
b210: 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74  ng structure, st
b220: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
b230: 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68  te3.aModule.** h
b240: 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74  ash table..*/.st
b250: 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20  ruct Module {.  
b260: 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
b270: 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20  dule *pModule;  
b280: 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
b290: 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63   pointers */.  c
b2a0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
b2b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b2c0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73      /* Name pass
b2d0: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
b2e0: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
b2f0: 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20  *pAux;          
b300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b310: 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74  /* pAux passed t
b320: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
b330: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44  ) */.  void (*xD
b340: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
b350: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
b360: 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72  odule destructor
b370: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a   function */.};.
b380: 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ./*.** informati
b390: 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
b3a0: 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74  lumn of an SQL t
b3b0: 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20  able is held in 
b3c0: 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
b3d0: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
b3e0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75  ..*/.struct Colu
b3f0: 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  mn {.  char *zNa
b400: 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  me;     /* Name 
b410: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
b420: 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b  /.  Expr *pDflt;
b430: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
b440: 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
b450: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
b460: 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72  zDflt;     /* Or
b470: 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
b480: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
b490: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79 70   */.  char *zTyp
b4a0: 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20 74  e;     /* Data t
b4b0: 79 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f 6c  ype for this col
b4c0: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
b4d0: 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  Coll;     /* Col
b4e0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
b4f0: 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74    If NULL, use t
b500: 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  he default */.  
b510: 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20  u8 notNull;     
b520: 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20   /* An OE_ code 
b530: 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e  for handling a N
b540: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
b550: 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  nt */.  char aff
b560: 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20  inity;   /* One 
b570: 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  of the SQLITE_AF
b580: 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a  F_... values */.
b590: 20 20 75 31 36 20 63 6f 6c 46 6c 61 67 73 3b 20    u16 colFlags; 
b5a0: 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72     /* Boolean pr
b5b0: 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43  operties.  See C
b5c0: 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20  OLFLAG_ defines 
b5d0: 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  below */.};../* 
b5e0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
b5f0: 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61  or Column.colFla
b600: 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  gs:.*/.#define C
b610: 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20  OLFLAG_PRIMKEY  
b620: 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c  0x0001    /* Col
b630: 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
b640: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
b650: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
b660: 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30  G_HIDDEN   0x000
b670: 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e  2    /* A hidden
b680: 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72   column in a vir
b690: 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f  tual table */../
b6a0: 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e  *.** A "Collatin
b6b0: 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64  g Sequence" is d
b6c0: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
b6d0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
b6e0: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
b6f0: 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c  ure. Conceptuall
b700: 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  y, a collating s
b710: 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73  equence consists
b720: 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a   of a name and.*
b730: 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  * a comparison r
b740: 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69  outine that defi
b750: 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66  nes the order of
b760: 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a   that sequence..
b770: 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71  **.** If CollSeq
b780: 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69  .xCmp is NULL, i
b790: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
b7a0: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
b7b0: 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69  quence is undefi
b7c0: 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75  ned.  Indices bu
b7d0: 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69  ilt on an undefi
b7e0: 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  ned.** collating
b7f0: 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f   sequence may no
b800: 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69  t be read or wri
b810: 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tten..*/.struct 
b820: 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72  CollSeq {.  char
b830: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
b840: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
b850: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
b860: 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64  nce, UTF-8 encod
b870: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ed */.  u8 enc; 
b880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b890: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68   Text encoding h
b8a0: 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29  andled by xCmp()
b8b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
b8c0: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  r;          /* F
b8d0: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
b8e0: 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74   xCmp() */.  int
b8f0: 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69   (*xCmp)(void*,i
b900: 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  nt, const void*,
b910: 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
b920: 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  *);.  void (*xDe
b930: 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44  l)(void*);  /* D
b940: 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55  estructor for pU
b950: 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ser */.};../*.**
b960: 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61   A sort order ca
b970: 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20  n be either ASC 
b980: 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66  or DESC..*/.#def
b990: 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53  ine SQLITE_SO_AS
b9a0: 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f  C       0  /* So
b9b0: 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
b9c0: 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
b9d0: 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20   SQLITE_SO_DESC 
b9e0: 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20       1  /* Sort 
b9f0: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
ba00: 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c  er */../*.** Col
ba10: 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70  umn affinity typ
ba20: 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  es..**.** These 
ba30: 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65  used to have mne
ba40: 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20  monic name like 
ba50: 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  'i' for SQLITE_A
ba60: 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a  FF_INTEGER and.*
ba70: 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45  * 't' for SQLITE
ba80: 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20  _AFF_TEXT.  But 
ba90: 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69  we can save a li
baa0: 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69  ttle space and i
bab0: 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70  mprove.** the sp
bac0: 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20  eed a little by 
bad0: 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61  numbering the va
bae0: 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65  lues consecutive
baf0: 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20  ly.  .**.** But 
bb00: 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72  rather than star
bb10: 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77  t with 0 or 1, w
bb20: 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 61 27  e begin with 'a'
bb30: 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20  .  That way,.** 
bb40: 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66  when multiple af
bb50: 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65  finity types are
bb60: 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e   concatenated in
bb70: 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a  to a string and.
bb80: 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50  ** used as the P
bb90: 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20  4 operand, they 
bba0: 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61  will be more rea
bbb0: 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  dable..**.** Not
bbc0: 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20  e also that the 
bbd0: 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72  numeric types ar
bbe0: 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68  e grouped togeth
bbf0: 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69  er so that testi
bc00: 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65  ng.** for a nume
bc10: 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69  ric type is a si
bc20: 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ngle comparison.
bc30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
bc40: 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20  TE_AFF_TEXT     
bc50: 27 61 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'a'.#define SQLI
bc60: 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20  TE_AFF_NONE     
bc70: 27 62 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'b'.#define SQLI
bc80: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20  TE_AFF_NUMERIC  
bc90: 27 63 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'c'.#define SQLI
bca0: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20  TE_AFF_INTEGER  
bcb0: 27 64 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'd'.#define SQLI
bcc0: 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20  TE_AFF_REAL     
bcd0: 27 65 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c  'e'..#define sql
bce0: 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66  ite3IsNumericAff
bcf0: 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d  inity(X)  ((X)>=
bd00: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
bd10: 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  IC)../*.** The S
bd20: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76  QLITE_AFF_MASK v
bd30: 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20  alues masks off 
bd40: 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20  the significant 
bd50: 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66  bits of an.** af
bd60: 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a  finity value. .*
bd70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bd80: 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78  _AFF_MASK     0x
bd90: 36 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69  67../*.** Additi
bda0: 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20  onal bit values 
bdb0: 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64  that can be ORed
bdc0: 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74   with an affinit
bdd0: 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61  y without.** cha
bde0: 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  nging the affini
bdf0: 74 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ty..*/.#define S
be00: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
be10: 20 20 20 30 78 30 38 20 20 2f 2a 20 6a 75 6d 70     0x08  /* jump
be20: 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  s if either oper
be30: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23  and is NULL */.#
be40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54  define SQLITE_ST
be50: 4f 52 45 50 32 20 20 20 20 20 20 30 78 31 30 20  OREP2      0x10 
be60: 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
be70: 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68   in reg[P2] rath
be80: 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a  er than jump */.
be90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
bea0: 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30  ULLEQ       0x80
beb0: 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a    /* NULL=NULL *
bec0: 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  /../*.** An obje
bed0: 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
bee0: 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
bef0: 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ach virtual tabl
bf00: 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20  e present in.** 
bf10: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
bf20: 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ema. .**.** If t
bf30: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
bf40: 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68  ma is shared, th
bf50: 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20  en there is one 
bf60: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
bf70: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f  .** structure fo
bf80: 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
bf90: 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69  connection (sqli
bfa0: 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20  te3*) that uses 
bfb0: 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63  the shared.** sc
bfc0: 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65  hema. This is be
bfd0: 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62  cause each datab
bfe0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72  ase connection r
bff0: 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20  equires its own 
c000: 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e  unique.** instan
c010: 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ce of the sqlite
c020: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75  3_vtab* handle u
c030: 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
c040: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
c050: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
c060: 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62  on. sqlite3_vtab
c070: 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f  * handles can no
c080: 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77  t be shared betw
c090: 65 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  een .** database
c0a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76   connections, ev
c0b0: 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74  en when the rest
c0c0: 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   of the in-memor
c0d0: 79 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73  y database .** s
c0e0: 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
c0f0: 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   as the implemen
c100: 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f  tation often sto
c110: 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  res the database
c120: 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  .** connection h
c130: 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20  andle passed to 
c140: 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e  it via the xConn
c150: 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65  ect() or xCreate
c160: 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72  () method.** dur
c170: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
c180: 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54  on internally. T
c190: 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
c1a0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d  nection handle m
c1b0: 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73  ay.** then be us
c1c0: 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61  ed by the virtua
c1d0: 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
c1e0: 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73  tation to access
c1f0: 20 72 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a   real tables .**
c200: 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61   within the data
c210: 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68  base. So that th
c220: 65 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72  ey appear as par
c230: 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73  t of the callers
c240: 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e   .** transaction
c250: 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73  , these accesses
c260: 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65   need to be made
c270: 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61   via the same da
c280: 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65  tabase .** conne
c290: 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73  ction as that us
c2a0: 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51  ed to execute SQ
c2b0: 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20  L operations on 
c2c0: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
c2d0: 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61  e..**.** All VTa
c2e0: 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74  ble objects that
c2f0: 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
c300: 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e   single table in
c310: 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74   a shared.** dat
c320: 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65  abase schema are
c330: 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65   initially store
c340: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  d in a linked-li
c350: 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  st pointed to by
c360: 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56  .** the Table.pV
c370: 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72  Table member var
c380: 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72  iable of the cor
c390: 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65  responding Table
c3a0: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e   object..** When
c3b0: 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70   an sqlite3_prep
c3c0: 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20  are() operation 
c3d0: 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61  is required to a
c3e0: 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
c3f0: 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73  l.** table, it s
c400: 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74  earches the list
c410: 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20   for the VTable 
c420: 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
c430: 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
c440: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ase connection d
c450: 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69  oing the prepari
c460: 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20  ng so as to use 
c470: 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73  the correct.** s
c480: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
c490: 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  dle in the compi
c4a0: 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  led query..**.**
c4b0: 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f   When an in-memo
c4c0: 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20  ry Table object 
c4d0: 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20  is deleted (for 
c4e0: 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65  example when the
c4f0: 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65  .** schema is be
c500: 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72  ing reloaded for
c510: 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74   some reason), t
c520: 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  he VTable object
c530: 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65  s are not .** de
c540: 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71  leted and the sq
c550: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
c560: 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73  les are not xDis
c570: 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20  connect()ed .** 
c580: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73  immediately. Ins
c590: 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d  tead, they are m
c5a0: 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61  oved from the Ta
c5b0: 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74  ble.pVTable list
c5c0: 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c   to.** another l
c5d0: 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
c5e0: 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33  d by the sqlite3
c5f0: 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d  .pDisconnect mem
c600: 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f  ber of the.** co
c610: 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
c620: 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54  te3 structure. T
c630: 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c  hey are then del
c640: 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74  eted/xDisconnect
c650: 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65  ed .** next time
c660: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20   a statement is 
c670: 70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73  prepared using s
c680: 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68  aid sqlite3*. Th
c690: 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f  is is done.** to
c6a0: 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20   avoid deadlock 
c6b0: 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67  issues involving
c6c0: 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65   multiple sqlite
c6d0: 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e  3.mutex mutexes.
c6e0: 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d  .** Refer to com
c6f0: 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63  ments above func
c700: 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62  tion sqlite3Vtab
c710: 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72  UnlockList() for
c720: 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69   an.** explanati
c730: 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20  on as to why it 
c740: 69 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61  is safe to add a
c750: 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71  n entry to an sq
c760: 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63  lite3.pDisconnec
c770: 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75  t.** list withou
c780: 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f  t holding the co
c790: 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
c7a0: 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e  te3.mutex mutex.
c7b0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72  .**.** The memor
c7c0: 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66  y for objects of
c7d0: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
c7e0: 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62  ways allocated b
c7f0: 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d  y .** sqlite3DbM
c800: 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74  alloc(), using t
c810: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  he connection ha
c820: 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56  ndle stored in V
c830: 54 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20  Table.db as .** 
c840: 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
c850: 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54  nt..*/.struct VT
c860: 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  able {.  sqlite3
c870: 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20   *db;           
c880: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63     /* Database c
c890: 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69  onnection associ
c8a0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74  ated with this t
c8b0: 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65  able */.  Module
c8c0: 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20   *pMod;         
c8d0: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
c8e0: 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  o module impleme
c8f0: 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c  ntation */.  sql
c900: 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
c910: 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  ;      /* Pointe
c920: 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e  r to vtab instan
c930: 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ce */.  int nRef
c940: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c950: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
c960: 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
c970: 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75  structure */.  u
c980: 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20  8 bConstraint;  
c990: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
c9a0: 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   if constraints 
c9b0: 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f  are supported */
c9c0: 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
c9d0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
c9e0: 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56  Depth of the SAV
c9f0: 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a  EPOINT stack */.
ca00: 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b    VTable *pNext;
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
ca20: 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69  ext in linked li
ca30: 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  st (see above) *
ca40: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  /.};../*.** Each
ca50: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72 65   SQL table is re
ca60: 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
ca70: 6f 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ory by an instan
ca80: 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c  ce of the.** fol
ca90: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
caa0: 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e  ..**.** Table.zN
cab0: 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ame is the name 
cac0: 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54  of the table.  T
cad0: 68 65 20 63 61 73 65 20 6f 66 20 74 68 65 20 6f  he case of the o
cae0: 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54  riginal.** CREAT
caf0: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
cb00: 74 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75 74  t is stored, but
cb10: 20 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67   case is not sig
cb20: 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20  nificant for.** 
cb30: 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a  comparisons..**.
cb40: 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73  ** Table.nCol is
cb50: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
cb60: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
cb70: 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f  able.  Table.aCo
cb80: 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  l is a.** pointe
cb90: 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66  r to an array of
cba0: 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75 72   Column structur
cbb0: 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63 68  es, one for each
cbc0: 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49   column..**.** I
cbd0: 66 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20  f the table has 
cbe0: 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  an INTEGER PRIMA
cbf0: 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61 62  RY KEY, then Tab
cc00: 6c 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20  le.iPKey is the 
cc10: 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20  index of.** the 
cc20: 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74  column that is t
cc30: 68 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72  hat key.   Other
cc40: 77 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65 79  wise Table.iPKey
cc50: 20 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e   is negative.  N
cc60: 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  ote.** that the 
cc70: 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20  datatype of the 
cc80: 50 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74  PRIMARY KEY must
cc90: 20 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20   be INTEGER for 
cca0: 74 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a  this field to.**
ccb0: 20 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54   be set.  An INT
ccc0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
ccd0: 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
cce0: 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72  rowid for each r
ccf0: 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62  ow of.** the tab
cd00: 6c 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20  le.  If a table 
cd10: 68 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50  has no INTEGER P
cd20: 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e  RIMARY KEY, then
cd30: 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a   a random rowid.
cd40: 2a 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  ** is generated 
cd50: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
cd60: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 46 5f 48  the table.  TF_H
cd70: 61 73 50 72 69 6d 61 72 79 4b 65 79 20 69 73 20  asPrimaryKey is 
cd80: 73 65 74 20 69 66 0a 2a 2a 20 74 68 65 20 74 61  set if.** the ta
cd90: 62 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49 4d  ble has any PRIM
cda0: 41 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45 52  ARY KEY, INTEGER
cdb0: 20 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a   or otherwise..*
cdc0: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20  *.** Table.tnum 
cdd0: 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  is the page numb
cde0: 65 72 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20  er for the root 
cdf0: 42 54 72 65 65 20 70 61 67 65 20 6f 66 20 74 68  BTree page of th
ce00: 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a  e table in the.*
ce10: 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  * database file.
ce20: 20 20 49 66 20 54 61 62 6c 65 2e 69 44 62 20 69    If Table.iDb i
ce30: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
ce40: 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
ce50: 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20  e backend.** in 
ce60: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30  sqlite.aDb[].  0
ce70: 20 69 73 20 66 6f 72 20 74 68 65 20 6d 61 69 6e   is for the main
ce80: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 31 20   database and 1 
ce90: 69 73 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20  is for the file 
cea0: 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65  that.** holds te
ceb0: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61  mporary tables a
cec0: 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 49 66 20  nd indices.  If 
ced0: 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 69 73 20  TF_Ephemeral is 
cee0: 73 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  set.** then the 
cef0: 74 61 62 6c 65 20 69 73 20 73 74 6f 72 65 64 20  table is stored 
cf00: 69 6e 20 61 20 66 69 6c 65 20 74 68 61 74 20 69  in a file that i
cf10: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  s automatically 
cf20: 64 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20  deleted.** when 
cf30: 74 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  the VDBE cursor 
cf40: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  to the table is 
cf50: 63 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68 69 73  closed.  In this
cf60: 20 63 61 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d   case Table.tnum
cf70: 20 0a 2a 2a 20 72 65 66 65 72 73 20 56 44 42 45   .** refers VDBE
cf80: 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 74   cursor number t
cf90: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 74 61  hat holds the ta
cfa0: 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f  ble open, not to
cfb0: 20 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67   the root.** pag
cfc0: 65 20 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e 73  e number.  Trans
cfd0: 69 65 6e 74 20 74 61 62 6c 65 73 20 61 72 65 20  ient tables are 
cfe0: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65  used to hold the
cff0: 20 72 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a   results of a.**
d000: 20 73 75 62 2d 71 75 65 72 79 20 74 68 61 74 20   sub-query that 
d010: 61 70 70 65 61 72 73 20 69 6e 73 74 65 61 64 20  appears instead 
d020: 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20  of a real table 
d030: 6e 61 6d 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  name in the FROM
d040: 20 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61   clause .** of a
d050: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
d060: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62  t..*/.struct Tab
d070: 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  le {.  char *zNa
d080: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  me;         /* N
d090: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
d0a0: 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f   or view */.  Co
d0b0: 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20  lumn *aCol;     
d0c0: 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
d0d0: 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
d0e0: 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
d0f0: 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a  pIndex;       /*
d100: 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64   List of SQL ind
d110: 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62  exes on this tab
d120: 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  le. */.  Select 
d130: 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
d140: 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73   NULL for tables
d150: 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66  .  Points to def
d160: 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65  inition if a vie
d170: 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46  w. */.  FKey *pF
d180: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
d190: 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61  Linked list of a
d1a0: 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
d1b0: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
d1c0: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
d1d0: 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e  ;       /* Strin
d1e0: 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
d1f0: 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
d200: 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65  column */.#ifnde
d210: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48  f SQLITE_OMIT_CH
d220: 45 43 4b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  ECK.  ExprList *
d230: 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c  pCheck;    /* Al
d240: 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  l CHECK constrai
d250: 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  nts */.#endif.  
d260: 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 3b  tRowcnt nRowEst;
d270: 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
d280: 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20  d rows in table 
d290: 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  - from sqlite_st
d2a0: 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  at1 table */.  i
d2b0: 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
d2c0: 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65      /* Root BTre
d2d0: 65 20 6e 6f 64 65 20 66 6f 72 20 74 68 69 73 20  e node for this 
d2e0: 74 61 62 6c 65 20 28 73 65 65 20 6e 6f 74 65 20  table (see note 
d2f0: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 31 36 20  above) */.  i16 
d300: 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20  iPKey;          
d310: 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74   /* If not negat
d320: 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50  ive, use aCol[iP
d330: 4b 65 79 5d 20 61 73 20 74 68 65 20 70 72 69 6d  Key] as the prim
d340: 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36  ary key */.  i16
d350: 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20   nCol;          
d360: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
d370: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
d380: 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52  able */.  u16 nR
d390: 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
d3a0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
d3b0: 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62  ters to this Tab
d3c0: 6c 65 20 2a 2f 0a 20 20 75 38 20 74 61 62 46 6c  le */.  u8 tabFl
d3d0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
d3e0: 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c  Mask of TF_* val
d3f0: 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43  ues */.  u8 keyC
d400: 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
d410: 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63   What to do in c
d420: 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73  ase of uniquenes
d430: 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50  s conflict on iP
d440: 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  Key */.#ifndef S
d450: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
d460: 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43  TABLE.  int addC
d470: 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20  olOffset;    /* 
d480: 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45  Offset in CREATE
d490: 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61   TABLE stmt to a
d4a0: 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
d4b0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
d4c0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
d4d0: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
d4e0: 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20   nModuleArg;    
d4f0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
d500: 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
d510: 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72  module */.  char
d520: 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20   **azModuleArg; 
d530: 20 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c 20   /* Text of all 
d540: 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d  module args. [0]
d550: 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20   is module name 
d560: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54  */.  VTable *pVT
d570: 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73  able;     /* Lis
d580: 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65  t of VTable obje
d590: 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  cts. */.#endif. 
d5a0: 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
d5b0: 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  er;   /* List of
d5c0: 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64   triggers stored
d5d0: 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20   in pSchema */. 
d5e0: 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
d5f0: 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
d600: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
d610: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61  is table */.  Ta
d620: 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65  ble *pNextZombie
d630: 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68  ;  /* Next on th
d640: 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54  e Parse.pZombieT
d650: 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ab list */.};../
d660: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
d670: 75 65 73 20 66 6f 72 20 54 61 62 65 2e 74 61 62  ues for Tabe.tab
d680: 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Flags..*/.#defin
d690: 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20  e TF_Readonly   
d6a0: 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
d6b0: 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d  Read-only system
d6c0: 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
d6d0: 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20  e TF_Ephemeral  
d6e0: 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
d6f0: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  An ephemeral tab
d700: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
d710: 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20  _HasPrimaryKey  
d720: 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c   0x04    /* Tabl
d730: 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20  e has a primary 
d740: 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  key */.#define T
d750: 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  F_Autoincrement 
d760: 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74    0x08    /* Int
d770: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
d780: 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
d790: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  t */.#define TF_
d7a0: 56 69 72 74 75 61 6c 20 20 20 20 20 20 20 20 20  Virtual         
d7b0: 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20  0x10    /* Is a 
d7c0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
d7d0: 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f  .../*.** Test to
d7e0: 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20   see whether or 
d7f0: 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61  not a table is a
d800: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
d810: 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65   This is.** done
d820: 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74   as a macro so t
d830: 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f  hat it will be o
d840: 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65  ptimized out whe
d850: 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  n virtual.** tab
d860: 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d  le support is om
d870: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62  itted from the b
d880: 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  uild..*/.#ifndef
d890: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
d8a0: 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
d8b0: 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
d8c0: 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62        (((X)->tab
d8d0: 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72 74 75  Flags & TF_Virtu
d8e0: 61 6c 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e  al)!=0).#  defin
d8f0: 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
d900: 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c  (X) (((X)->colFl
d910: 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
d920: 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 73 65 0a  DDEN)!=0).#else.
d930: 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
d940: 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 20  ual(X)      0.# 
d950: 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
d960: 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64  Column(X) 0.#end
d970: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66  if../*.** Each f
d980: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
d990: 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74  raint is an inst
d9a0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
d9b0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
d9c0: 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e  .**.** A foreign
d9d0: 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74   key is associat
d9e0: 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c  ed with two tabl
d9f0: 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20  es.  The "from" 
da00: 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  table is.** the 
da10: 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
da20: 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43  ins the REFERENC
da30: 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63  ES clause that c
da40: 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69  reates the forei
da50: 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20  gn.** key.  The 
da60: 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68  "to" table is th
da70: 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
da80: 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46  named in the REF
da90: 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a  ERENCES clause..
daa0: 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73  ** Consider this
dab0: 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20   example:.**.** 
dac0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
dad0: 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61   ex1(.**       a
dae0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
daf0: 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62   KEY,.**       b
db00: 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41   INTEGER CONSTRA
db10: 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43  INT fk1 REFERENC
db20: 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20  ES ex2(x).**    
db30: 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f   );.**.** For fo
db40: 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c  reign key "fk1",
db50: 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
db60: 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65  is "ex1" and the
db70: 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78   to-table is "ex
db80: 32 22 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52  2"..**.** Each R
db90: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
dba0: 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e   generates an in
dbb0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
dbc0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
dbd0: 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74  e.** which is at
dbe0: 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72  tached to the fr
dbf0: 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74  om-table.  The t
dc00: 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74  o-table need not
dc10: 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74   exist when.** t
dc20: 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
dc30: 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65   created.  The e
dc40: 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20  xistence of the 
dc50: 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  to-table is not 
dc60: 63 68 65 63 6b 65 64 2e 0a 2a 2f 0a 73 74 72 75  checked..*/.stru
dc70: 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c  ct FKey {.  Tabl
dc80: 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a  e *pFrom;     /*
dc90: 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e   Table containin
dca0: 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  g the REFERENCES
dcb0: 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68   clause (aka: Ch
dcc0: 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  ild) */.  FKey *
dcd0: 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e  pNextFrom;  /* N
dce0: 65 78 74 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ext foreign key 
dcf0: 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68  in pFrom */.  ch
dd00: 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20  ar *zTo;        
dd10: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65  /* Name of table
dd20: 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f   that the key po
dd30: 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61  ints to (aka: Pa
dd40: 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20  rent) */.  FKey 
dd50: 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20  *pNextTo;    /* 
dd60: 4e 65 78 74 20 66 6f 72 65 69 67 6e 20 6b 65 79  Next foreign key
dd70: 20 6f 6e 20 74 61 62 6c 65 20 6e 61 6d 65 64 20   on table named 
dd80: 7a 54 6f 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  zTo */.  FKey *p
dd90: 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72  PrevTo;    /* Pr
dda0: 65 76 69 6f 75 73 20 66 6f 72 65 69 67 6e 20 6b  evious foreign k
ddb0: 65 79 20 6f 6e 20 74 61 62 6c 65 20 6e 61 6d 65  ey on table name
ddc0: 64 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e  d zTo */.  int n
ddd0: 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Col;         /* 
dde0: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
ddf0: 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f  s in this key */
de00: 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32  .  /* EV: R-3032
de10: 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20  3-21917 */.  u8 
de20: 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 2f  isDeferred;    /
de30: 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
de40: 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73  aint checking is
de50: 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43   deferred till C
de60: 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41  OMMIT */.  u8 aA
de70: 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20  ction[2];       
de80: 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20     /* ON DELETE 
de90: 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63  and ON UPDATE ac
dea0: 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76  tions, respectiv
deb0: 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ely */.  Trigger
dec0: 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 20   *apTrigger[2]; 
ded0: 20 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72   /* Triggers for
dee0: 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f   aAction[] actio
def0: 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  ns */.  struct s
df00: 43 6f 6c 4d 61 70 20 7b 20 20 2f 2a 20 4d 61 70  ColMap {  /* Map
df10: 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  ping of columns 
df20: 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75  in pFrom to colu
df30: 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20  mns in zTo */.  
df40: 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20    int iFrom;    
df50: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
df60: 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d   column in pFrom
df70: 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43   */.    char *zC
df80: 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ol;        /* Na
df90: 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20  me of column in 
dfa0: 7a 54 6f 2e 20 20 49 66 20 30 20 75 73 65 20 50  zTo.  If 0 use P
dfb0: 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
dfc0: 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20  } aCol[1];      
dfd0: 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
dfe0: 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20  or each of nCol 
dff0: 63 6f 6c 75 6d 6e 20 73 20 2a 2f 0a 7d 3b 0a 0a  column s */.};..
e000: 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70  /*.** SQLite sup
e010: 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65  ports many diffe
e020: 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73  rent ways to res
e030: 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e  olve a constrain
e040: 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c  t.** error.  ROL
e050: 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67  LBACK processing
e060: 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f   means that a co
e070: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
e080: 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65  on.** causes the
e090: 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
e0a0: 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e  ocess to fail an
e0b0: 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
e0c0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
e0d0: 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
e0e0: 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65  ck.  ABORT proce
e0f0: 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20  ssing means the 
e100: 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
e110: 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e  cess.** fails an
e120: 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e  d any prior chan
e130: 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e  ges from that on
e140: 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
e150: 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62  backed out,.** b
e160: 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ut the transacti
e170: 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64  on is not rolled
e180: 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f   back.  FAIL pro
e190: 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
e1a0: 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74  at.** the operat
e1b0: 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
e1c0: 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e  stops and return
e1d0: 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e  s an error code.
e1e0: 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63    But prior.** c
e1f0: 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68  hanges due to th
e200: 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
e210: 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20   are not backed 
e220: 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62  out and no rollb
e230: 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20  ack.** occurs.  
e240: 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61  IGNORE means tha
e250: 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  t the particular
e260: 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64   row that caused
e270: 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a   the constraint.
e280: 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20  ** error is not 
e290: 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61  inserted or upda
e2a0: 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  ted.  Processing
e2b0: 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
e2c0: 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65  o error.** is re
e2d0: 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45  turned.  REPLACE
e2e0: 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65   means that pree
e2f0: 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
e300: 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65   rows that cause
e310: 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f  d.** a UNIQUE co
e320: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
e330: 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73  on are removed s
e340: 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69  o that the new i
e350: 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61  nsert or.** upda
e360: 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20  te can proceed. 
e370: 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
e380: 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
e390: 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a  or is reported..
e3a0: 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20  **.** RESTRICT, 
e3b0: 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53  SETNULL, and CAS
e3c0: 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70  CADE actions app
e3d0: 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69  ly only to forei
e3e0: 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54  gn keys..** REST
e3f0: 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65  RICT is the same
e400: 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d   as ABORT for IM
e410: 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20  MEDIATE foreign 
e420: 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20  keys and the.** 
e430: 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b  same as ROLLBACK
e440: 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65   for DEFERRED ke
e450: 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61  ys.  SETNULL mea
e460: 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65  ns that the fore
e470: 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65  ign.** key is se
e480: 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43  t to NULL.  CASC
e490: 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ADE means that a
e4a0: 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
e4b0: 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65  E of the.** refe
e4c0: 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77  renced table row
e4d0: 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69   is propagated i
e4e0: 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74  nto the row that
e4f0: 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f   holds the.** fo
e500: 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a  reign key..** .*
e510: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
e520: 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20  symbolic values 
e530: 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f  are used to reco
e540: 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a  rd which type.**
e550: 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61   of action to ta
e560: 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ke..*/.#define O
e570: 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f  E_None     0   /
e580: 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f  * There is no co
e590: 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63  nstraint to chec
e5a0: 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  k */.#define OE_
e5b0: 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20  Rollback 1   /* 
e5c0: 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69  Fail the operati
e5d0: 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20  on and rollback 
e5e0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
e5f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62  */.#define OE_Ab
e600: 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61  ort    2   /* Ba
e610: 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62  ck out changes b
e620: 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63  ut do no rollbac
e630: 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  k transaction */
e640: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c  .#define OE_Fail
e650: 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70       3   /* Stop
e660: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62   the operation b
e670: 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69  ut leave all pri
e680: 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  or changes */.#d
e690: 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20  efine OE_Ignore 
e6a0: 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20    4   /* Ignore 
e6b0: 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f  the error. Do no
e6c0: 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20  t do the INSERT 
e6d0: 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  or UPDATE */.#de
e6e0: 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20  fine OE_Replace 
e6f0: 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65   5   /* Delete e
e700: 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20  xisting record, 
e710: 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f  then do INSERT o
e720: 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65  r UPDATE */..#de
e730: 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74  fine OE_Restrict
e740: 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74   6   /* OE_Abort
e750: 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20   for IMMEDIATE, 
e760: 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20  OE_Rollback for 
e770: 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66  DEFERRED */.#def
e780: 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20  ine OE_SetNull  
e790: 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  7   /* Set the f
e7a0: 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
e7b0: 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   to NULL */.#def
e7c0: 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20  ine OE_SetDflt  
e7d0: 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  8   /* Set the f
e7e0: 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
e7f0: 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20   to its default 
e800: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61  */.#define OE_Ca
e810: 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61  scade  9   /* Ca
e820: 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65  scade the change
e830: 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  s */..#define OE
e840: 5f 44 65 66 61 75 6c 74 20 20 39 39 20 20 2f 2a  _Default  99  /*
e850: 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65   Do whatever the
e860: 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20   default action 
e870: 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e  is */.../*.** An
e880: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
e890: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
e8a0: 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61  ture is passed a
e8b0: 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  s the first.** a
e8c0: 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
e8d0: 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65  e3VdbeKeyCompare
e8e0: 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20   and is used to 
e8f0: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20  control the .** 
e900: 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68  comparison of th
e910: 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73  e two index keys
e920: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49  ..*/.struct KeyI
e930: 6e 66 6f 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  nfo {.  sqlite3 
e940: 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
e950: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
e960: 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 65  ection */.  u8 e
e970: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
e980: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
e990: 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51   - one of the SQ
e9a0: 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73  LITE_UTF* values
e9b0: 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64   */.  u16 nField
e9c0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
e9d0: 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
e9e0: 6e 20 61 43 6f 6c 6c 5b 5d 20 2a 2f 0a 20 20 75  n aColl[] */.  u
e9f0: 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
ea00: 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72     /* Sort order
ea10: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
ea20: 2e 20 20 4d 61 79 20 62 65 20 4e 55 4c 4c 20 2a  .  May be NULL *
ea30: 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f  /.  CollSeq *aCo
ea40: 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61  ll[1];  /* Colla
ea50: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f  ting sequence fo
ea60: 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74  r each term of t
ea70: 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  he key */.};../*
ea80: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
ea90: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
eaa0: 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
eab0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
eac0: 75 74 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69  ut a.** single i
ead0: 6e 64 65 78 20 72 65 63 6f 72 64 20 74 68 61 74  ndex record that
eae0: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
eaf0: 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74  n parsed out int
eb00: 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20  o individual.** 
eb10: 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  values..**.** A 
eb20: 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a  record is an obj
eb30: 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ect that contain
eb40: 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69  s one or more fi
eb50: 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a  elds of data..**
eb60: 20 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65   Records are use
eb70: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63  d to store the c
eb80: 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c  ontent of a tabl
eb90: 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f  e row and to sto
eba0: 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66  re.** the key of
ebb0: 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c   an index.  A bl
ebc0: 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  ob encoding of a
ebd0: 20 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74   record is creat
ebe0: 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f  ed by.** the OP_
ebf0: 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64  MakeRecord opcod
ec00: 65 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e  e of the VDBE an
ec10: 64 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65  d is disassemble
ec20: 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43  d by the.** OP_C
ec30: 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a  olumn opcode..**
ec40: 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
ec50: 72 65 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72  re holds a recor
ec60: 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61  d that has alrea
ec70: 64 79 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d  dy been disassem
ec80: 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73  bled.** into its
ec90: 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65   constituent fie
eca0: 6c 64 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  lds..*/.struct U
ecb0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a  npackedRecord {.
ecc0: 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
ecd0: 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  nfo;  /* Collati
ece0: 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65  on and sort-orde
ecf0: 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  r information */
ed00: 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
ed10: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
ed20: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
ed30: 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 75 38 20 66  pMem[] */.  u8 f
ed40: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
ed50: 2f 2a 20 42 6f 6f 6c 65 61 6e 20 73 65 74 74 69  /* Boolean setti
ed60: 6e 67 73 2e 20 20 55 4e 50 41 43 4b 45 44 5f 2e  ngs.  UNPACKED_.
ed70: 2e 2e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36  .. below */.  i6
ed80: 34 20 72 6f 77 69 64 3b 20 20 20 20 20 20 20 20  4 rowid;        
ed90: 20 20 2f 2a 20 55 73 65 64 20 62 79 20 55 4e 50    /* Used by UNP
eda0: 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41  ACKED_PREFIX_SEA
edb0: 52 43 48 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d  RCH */.  Mem *aM
edc0: 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
edd0: 56 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  Values */.};../*
ede0: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
edf0: 65 73 20 6f 66 20 55 6e 70 61 63 6b 65 64 52 65  es of UnpackedRe
ee00: 63 6f 72 64 2e 66 6c 61 67 73 0a 2a 2f 0a 23 64  cord.flags.*/.#d
ee10: 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 49  efine UNPACKED_I
ee20: 4e 43 52 4b 45 59 20 20 20 20 20 20 20 30 78 30  NCRKEY       0x0
ee30: 31 20 20 2f 2a 20 4d 61 6b 65 20 74 68 69 73 20  1  /* Make this 
ee40: 6b 65 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 6c  key an epsilon l
ee50: 61 72 67 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  arger */.#define
ee60: 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
ee70: 5f 4d 41 54 43 48 20 20 30 78 30 32 20 20 2f 2a  _MATCH  0x02  /*
ee80: 20 41 20 70 72 65 66 69 78 20 6d 61 74 63 68 20   A prefix match 
ee90: 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 4f 4b  is considered OK
eea0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41   */.#define UNPA
eeb0: 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52  CKED_PREFIX_SEAR
eec0: 43 48 20 30 78 30 34 20 20 2f 2a 20 49 67 6e 6f  CH 0x04  /* Igno
eed0: 72 65 20 66 69 6e 61 6c 20 28 72 6f 77 69 64 29  re final (rowid)
eee0: 20 66 69 65 6c 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   field */../*.**
eef0: 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20   Each SQL index 
ef00: 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
ef10: 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a  n memory by an.*
ef20: 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
ef30: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
ef40: 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  cture..**.** The
ef50: 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
ef60: 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74  table that are t
ef70: 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65  o be indexed are
ef80: 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79   described.** by
ef90: 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20   the aiColumn[] 
efa0: 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74  field of this st
efb0: 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78  ructure.  For ex
efc0: 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a  ample, suppose.*
efd0: 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f  * we have the fo
efe0: 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e  llowing table an
eff0: 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20  d index:.**.**  
f000: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
f010: 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69  Ex1(c1 int, c2 i
f020: 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a  nt, c3 text);.**
f030: 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
f040: 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c  X Ex2 ON Ex1(c3,
f050: 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  c1);.**.** In th
f060: 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  e Table structur
f070: 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31  e describing Ex1
f080: 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73  , nCol==3 becaus
f090: 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74  e there are.** t
f0a0: 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  hree columns in 
f0b0: 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74  the table.  In t
f0c0: 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  he Index structu
f0d0: 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a  re describing.**
f0e0: 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32   Ex2, nColumn==2
f0f0: 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20   since 2 of the 
f100: 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31  3 columns of Ex1
f110: 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a   are indexed..**
f120: 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69   The value of ai
f130: 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d  Column is {2, 0}
f140: 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d  .  aiColumn[0]==
f150: 32 20 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a  2 because the .*
f160: 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74  * first column t
f170: 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33  o be indexed (c3
f180: 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
f190: 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b  f 2 in Ex1.aCol[
f1a0: 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64  ]..** The second
f1b0: 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
f1c0: 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61  dexed (c1) has a
f1d0: 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a  n index of 0 in.
f1e0: 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68  ** Ex1.aCol[], h
f1f0: 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d  ence Ex2.aiColum
f200: 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54  n[1]==0..**.** T
f210: 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  he Index.onError
f220: 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65   field determine
f230: 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  s whether or not
f240: 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c   the indexed col
f250: 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20  umns.** must be 
f260: 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20  unique and what 
f270: 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72  to do if they ar
f280: 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64  e not.  When Ind
f290: 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f  ex.onError=OE_No
f2a0: 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20  ne,.** it means 
f2b0: 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e  this is not a un
f2c0: 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68  ique index.  Oth
f2d0: 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75  erwise it is a u
f2e0: 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61  nique index.** a
f2f0: 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nd the value of 
f300: 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e  Index.onError in
f310: 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68  dicate the which
f320: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
f330: 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74  tion .** algorit
f340: 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65  hm to employ whe
f350: 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74  never an attempt
f360: 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65   is made to inse
f370: 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a  rt a non-unique.
f380: 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73  ** element..*/.s
f390: 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20  truct Index {.  
f3a0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
f3b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
f3c0: 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
f3d0: 2f 0a 20 20 69 6e 74 20 2a 61 69 43 6f 6c 75 6d  /.  int *aiColum
f3e0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
f3f0: 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72  Which columns ar
f400: 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69  e used by this i
f410: 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30 20  ndex.  1st is 0 
f420: 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69  */.  tRowcnt *ai
f430: 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a  RowEst;       /*
f440: 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45   From ANALYZE: E
f450: 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65  st. rows selecte
f460: 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e  d by each column
f470: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
f480: 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
f490: 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20  * The SQL table 
f4a0: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f  being indexed */
f4b0: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
f4c0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ;           /* S
f4d0: 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
f4e0: 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
f4f0: 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
f500: 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20  Index *pNext;   
f510: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
f520: 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63  next index assoc
f530: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
f540: 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53  ame table */.  S
f550: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
f560: 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
f570: 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69  a containing thi
f580: 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  s index */.  u8 
f590: 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
f5a0: 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63        /* for eac
f5b0: 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d  h column: True==
f5c0: 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43  DESC, False==ASC
f5d0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43   */.  char **azC
f5e0: 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  oll;           /
f5f0: 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61  * Array of colla
f600: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61  tion sequence na
f610: 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f  mes for index */
f620: 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
f630: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
f640: 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e  B Page containin
f650: 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69  g root of this i
f660: 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 43  ndex */.  u16 nC
f670: 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
f680: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f690: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 61 62 6c 65  columns in table
f6a0: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e   used by this in
f6b0: 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  dex */.  u8 onEr
f6c0: 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
f6d0: 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
f6e0: 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
f6f0: 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
f700: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 61   */.  unsigned a
f710: 75 74 6f 49 6e 64 65 78 3a 32 3b 20 20 20 20 2f  utoIndex:2;    /
f720: 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d  * 1==UNIQUE, 2==
f730: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d  PRIMARY KEY, 0==
f740: 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
f750: 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
f760: 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
f770: 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
f780: 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
f790: 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
f7a0: 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
f7b0: 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
f7c0: 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
f7d0: 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
f7e0: 6d 6e 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  mns */.#ifdef SQ
f7f0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
f800: 33 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b  3.  int nSample;
f810: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f820: 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  Number of elemen
f830: 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20  ts in aSample[] 
f840: 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 61 76 67  */.  tRowcnt avg
f850: 45 71 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  Eq;           /*
f860: 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c   Average nEq val
f870: 75 65 20 66 6f 72 20 6b 65 79 20 76 61 6c 75 65  ue for key value
f880: 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65  s not in aSample
f890: 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c   */.  IndexSampl
f8a0: 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f  e *aSample;    /
f8b0: 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65  * Samples of the
f8c0: 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a   left-most key *
f8d0: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
f8e0: 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73  ** Each sample s
f8f0: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
f900: 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
f910: 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
f920: 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69  n memory .** usi
f930: 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f  ng a structure o
f940: 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65  f this type.  Se
f950: 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
f960: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
f970: 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73  e.** analyze.c s
f980: 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61  ource file for a
f990: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
f9a0: 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
f9b0: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20   IndexSample {. 
f9c0: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61   union {.    cha
f9d0: 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20  r *z;        /* 
f9e0: 56 61 6c 75 65 20 69 66 20 65 54 79 70 65 20 69  Value if eType i
f9f0: 73 20 53 51 4c 49 54 45 5f 54 45 58 54 20 6f 72  s SQLITE_TEXT or
fa00: 20 53 51 4c 49 54 45 5f 42 4c 4f 42 20 2a 2f 0a   SQLITE_BLOB */.
fa10: 20 20 20 20 64 6f 75 62 6c 65 20 72 3b 20 20 20      double r;   
fa20: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20      /* Value if 
fa30: 65 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f  eType is SQLITE_
fa40: 46 4c 4f 41 54 20 2a 2f 0a 20 20 20 20 69 36 34  FLOAT */.    i64
fa50: 20 69 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   i;          /* 
fa60: 56 61 6c 75 65 20 69 66 20 65 54 79 70 65 20 69  Value if eType i
fa70: 73 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52  s SQLITE_INTEGER
fa80: 20 2a 2f 0a 20 20 7d 20 75 3b 0a 20 20 75 38 20   */.  } u;.  u8 
fa90: 65 54 79 70 65 3b 20 20 20 20 20 20 20 20 20 2f  eType;         /
faa0: 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 53  * SQLITE_NULL, S
fab0: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 2e 2e  QLITE_INTEGER ..
fac0: 2e 20 65 74 63 2e 20 2a 2f 0a 20 20 69 6e 74 20  . etc. */.  int 
fad0: 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 2f 2a  nByte;        /*
fae0: 20 53 69 7a 65 20 69 6e 20 62 79 74 65 20 6f 66   Size in byte of
faf0: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2e 20 2a   text or blob. *
fb00: 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 45 71 3b  /.  tRowcnt nEq;
fb10: 20 20 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75        /* Est. nu
fb20: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65  mber of rows whe
fb30: 72 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c  re the key equal
fb40: 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  s this sample */
fb50: 0a 20 20 74 52 6f 77 63 6e 74 20 6e 4c 74 3b 20  .  tRowcnt nLt; 
fb60: 20 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d       /* Est. num
fb70: 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
fb80: 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68  e key is less th
fb90: 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
fba0: 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 44 4c 74  /.  tRowcnt nDLt
fbb0: 3b 20 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  ;     /* Est. nu
fbc0: 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74  mber of distinct
fbd0: 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20   keys less than 
fbe0: 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d  this sample */.}
fbf0: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f  ;../*.** Each to
fc00: 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f  ken coming out o
fc10: 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61  f the lexer is a
fc20: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a  n instance of.**
fc30: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
fc40: 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73    Tokens are als
fc50: 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f  o used as part o
fc60: 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e  f an expression.
fc70: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54  .**.** Note if T
fc80: 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54  oken.z==0 then T
fc90: 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b  oken.dyn and Tok
fca0: 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e  en.n are undefin
fcb0: 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f  ed and.** may co
fcc0: 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c  ntain random val
fcd0: 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b  ues.  Do not mak
fce0: 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e  e any assumption
fcf0: 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79  s about Token.dy
fd00: 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  n.** and Token.n
fd10: 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30   when Token.z==0
fd20: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65  ..*/.struct Toke
fd30: 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  n {.  const char
fd40: 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74   *z;     /* Text
fd50: 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20   of the token.  
fd60: 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61  Not NULL-termina
fd70: 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ted! */.  unsign
fd80: 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20  ed int n;    /* 
fd90: 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63  Number of charac
fda0: 74 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b  ters in this tok
fdb0: 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  en */.};../*.** 
fdc0: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
fdd0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f  his structure co
fde0: 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
fdf0: 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  on needed to gen
fe00: 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f  erate.** code fo
fe10: 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20  r a SELECT that 
fe20: 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  contains aggrega
fe30: 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  te functions..**
fe40: 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d  .** If Expr.op==
fe50: 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72  TK_AGG_COLUMN or
fe60: 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
fe70: 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49   then Expr.pAggI
fe80: 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e  nfo is a.** poin
fe90: 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
fea0: 63 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72  cture.  The Expr
feb0: 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69  .iColumn field i
fec0: 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a  s the index in.*
fed0: 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d  * AggInfo.aCol[]
fee0: 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e   or AggInfo.aFun
fef0: 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  c[] of informati
ff00: 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  on needed to gen
ff10: 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f  erate.** code fo
ff20: 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a  r that node..**.
ff30: 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75  ** AggInfo.pGrou
ff40: 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e  pBy and AggInfo.
ff50: 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e  aFunc.pExpr poin
ff60: 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68  t to fields with
ff70: 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  in the.** origin
ff80: 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74  al Select struct
ff90: 75 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62  ure that describ
ffa0: 65 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  es the SELECT st
ffb0: 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a  atement.  These.
ffc0: 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74  ** fields do not
ffd0: 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65   need to be free
ffe0: 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74  d when deallocat
fff0: 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20  ing the AggInfo 
10000 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
10010 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20  ruct AggInfo {. 
10020 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20   u8 directMode; 
10030 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65           /* Dire
10040 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64  ct rendering mod
10050 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74  e means take dat
10060 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20  a directly.     
10070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10080 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75       ** from sou
10090 72 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65  rce tables rathe
100a0 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75  r than from accu
100b0 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38  mulators */.  u8
100c0 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20   useSortingIdx; 
100d0 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65        /* In dire
100e0 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e  ct mode, referen
100f0 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  ce the sorting i
10100 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20  ndex rather.    
10110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10120 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68        ** than th
10130 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
10140 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
10150 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  dx;         /* C
10160 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
10170 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
10180 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  x */.  int sorti
10190 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f  ngIdxPTab;     /
101a0 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
101b0 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20  of pseudo-table 
101c0 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e  */.  int nSortin
101d0 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20  gColumn;     /* 
101e0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
101f0 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  s in the sorting
10200 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72   index */.  Expr
10210 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
10220 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70      /* The group
10230 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   by clause */.  
10240 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63  struct AggInfo_c
10250 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65  ol {    /* For e
10260 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20  ach column used 
10270 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  in source tables
10280 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
10290 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
102a0 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65   /* Source table
102b0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62   */.    int iTab
102c0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
102d0 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
102e0 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20  r of the source 
102f0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
10300 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
10310 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
10320 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68  number within th
10330 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
10340 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65  /.    int iSorte
10350 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f  rColumn;       /
10360 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * Column number 
10370 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
10380 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ndex */.    int 
10390 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  iMem;           
103a0 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c       /* Memory l
103b0 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74  ocation that act
103c0 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72  s as accumulator
103d0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
103e0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
103f0 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c   /* The original
10400 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
10410 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20   } *aCol;.  int 
10420 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  nColumn;        
10430 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10440 20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e   used entries in
10450 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74   aCol[] */.  int
10460 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20   nAccumulator;  
10470 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10480 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73  f columns that s
10490 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74  how through to t
104a0 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20  he output..     
104b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104c0 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e       ** Addition
104d0 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  al columns are u
104e0 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61  sed only as para
104f0 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20  meters to.      
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10510 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65      ** aggregate
10520 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
10530 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66  struct AggInfo_f
10540 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65  unc {   /* For e
10550 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75  ach aggregate fu
10560 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78  nction */.    Ex
10570 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
10580 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
10590 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68  sion encoding th
105a0 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
105b0 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63    FuncDef *pFunc
105c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
105d0 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
105e0 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tion implementat
105f0 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ion */.    int i
10600 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
10610 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
10620 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
10630 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
10640 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74  */.    int iDist
10650 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  inct;           
10660 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62  /* Ephemeral tab
10670 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72  le used to enfor
10680 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20  ce DISTINCT */. 
10690 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74   } *aFunc;.  int
106a0 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20   nFunc;         
106b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
106c0 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75  f entries in aFu
106d0 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nc[] */.};../*.*
106e0 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79  * The datatype y
106f0 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64  nVar is a signed
10700 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72   integer, either
10710 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69   16-bit or 32-bi
10720 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74  t..** Usually it
10730 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75   is 16-bits.  Bu
10740 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  t if SQLITE_MAX_
10750 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20  VARIABLE_NUMBER 
10760 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68  is greater.** th
10770 61 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65  an 32767 we have
10780 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62   to make it 32-b
10790 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70  it.  16-bit is p
107a0 72 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65  referred because
107b0 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73  .** it uses less
107c0 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45   memory in the E
107d0 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63  xpr object, whic
107e0 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72  h is a big memor
107f0 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73  y user.** in sys
10800 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f  tems with lots o
10810 66 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  f prepared state
10820 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20  ments.  And few 
10830 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20  applications.** 
10840 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61  need more than a
10850 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61  bout 10 or 20 va
10860 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f  riables.  But so
10870 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73  me extreme users
10880 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65   want.** to have
10890 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
108a0 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33  ents with over 3
108b0 32 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20  2767 variables, 
108c0 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20  and for them.** 
108d0 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76  the option is av
108e0 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70  ailable (at comp
108f0 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69  ile-time)..*/.#i
10900 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
10910 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32  IABLE_NUMBER<=32
10920 37 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20  767.typedef i16 
10930 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70  ynVar;.#else.typ
10940 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a  edef int ynVar;.
10950 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61  #endif../*.** Ea
10960 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78  ch node of an ex
10970 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
10980 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e  parse tree is an
10990 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
109a0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
109b0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73  **.** Expr.op is
109c0 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65   the opcode. The
109d0 20 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20   integer parser 
109e0 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20  token codes are 
109f0 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63  reused.** as opc
10a00 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65  odes here. For e
10a10 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73  xample, the pars
10a20 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45  er defines TK_GE
10a30 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
10a40 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73  r.** code repres
10a50 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20  enting the ">=" 
10a60 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73  operator. This s
10a70 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65  ame integer code
10a80 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f   is reused.** to
10a90 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67   represent the g
10aa0 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65  reater-than-or-e
10ab0 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72  qual-to operator
10ac0 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69   in the expressi
10ad0 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a  on.** tree..**.*
10ae0 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
10af0 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69  ion is an SQL li
10b00 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45  teral (TK_INTEGE
10b10 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f  R, TK_FLOAT, TK_
10b20 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f  BLOB, .** or TK_
10b30 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78  STRING), then Ex
10b40 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
10b50 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68  s the text of th
10b60 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49  e SQL literal. I
10b70 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
10b80 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c  ion is a variabl
10b90 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c  e (TK_VARIABLE),
10ba0 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
10bb0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a   contains the .*
10bc0 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e  * variable name.
10bd0 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65   Finally, if the
10be0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
10bf0 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28  n SQL function (
10c00 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a  TK_FUNCTION),.**
10c10 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
10c20 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61   contains the na
10c30 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
10c40 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70  on..**.** Expr.p
10c50 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70  Right and Expr.p
10c60 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66  Left are the lef
10c70 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65  t and right sube
10c80 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a  xpressions of a.
10c90 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74  ** binary operat
10ca0 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f  or. Either or bo
10cb0 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a  th may be NULL..
10cc0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69  **.** Expr.x.pLi
10cd0 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  st is a list of 
10ce0 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65  arguments if the
10cf0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
10d00 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a  n SQL function,.
10d10 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73  ** a CASE expres
10d20 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78  sion or an IN ex
10d30 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
10d40 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
10d50 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a  <y>, <z>...)"..*
10d60 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  * Expr.x.pSelect
10d70 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20   is used if the 
10d80 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
10d90 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e  sub-select or an
10da0 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a   expression of.*
10db0 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  * the form "<lhs
10dc0 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e  > IN (SELECT ...
10dd0 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49  )". If the EP_xI
10de0 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73  sSelect bit is s
10df0 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70  et in the.** Exp
10e00 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
10e10 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  en Expr.x.pSelec
10e20 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65  t is valid. Othe
10e30 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c  rwise, Expr.x.pL
10e40 69 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64  ist is .** valid
10e50 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65  ..**.** An expre
10e60 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
10e70 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65  m ID or ID.ID re
10e80 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  fers to a column
10e90 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   in a table..** 
10ea0 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73  For such express
10eb0 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73  ions, Expr.op is
10ec0 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d   set to TK_COLUM
10ed0 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c  N and Expr.iTabl
10ee0 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65  e is.** the inte
10ef0 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ger cursor numbe
10f00 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73  r of a VDBE curs
10f10 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
10f20 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a  hat table and.**
10f30 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73   Expr.iColumn is
10f40 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
10f50 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  er for the speci
10f60 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  fic column.  If 
10f70 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  the.** expressio
10f80 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72  n is used as a r
10f90 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72  esult in an aggr
10fa0 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68  egate SELECT, th
10fb0 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
10fc0 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69  is also stored i
10fd0 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20  n the Expr.iAgg 
10fe0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67  column in the ag
10ff0 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a  gregate so that.
11000 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  ** it can be acc
11010 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20  essed after all 
11020 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63  aggregates are c
11030 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  omputed..**.** I
11040 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
11050 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76   is an unbound v
11060 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28  ariable marker (
11070 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20  a question mark 
11080 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f  .** character '?
11090 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  ' in the origina
110a0 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20  l SQL) then the 
110b0 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64  Expr.iTable hold
110c0 73 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  s the index .** 
110d0 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20  number for that 
110e0 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  variable..**.** 
110f0 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
11100 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20  n is a subquery 
11110 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d  then Expr.iColum
11120 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  n holds an integ
11130 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e  er.** register n
11140 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67  umber containing
11150 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
11160 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66  he subquery.  If
11170 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79   the.** subquery
11180 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e   gives a constan
11190 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69  t result, then i
111a0 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66  Table is -1.  If
111b0 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a   the subquery.**
111c0 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65   gives a differe
111d0 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66  nt answer at dif
111e0 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72  ferent times dur
111f0 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72  ing statement pr
11200 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e  ocessing.** then
11210 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61   iTable is the a
11220 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72  ddress of a subr
11230 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70  outine that comp
11240 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72  utes the subquer
11250 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  y..**.** If the 
11260 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20  Expr is of type 
11270 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74  OP_Column, and t
11280 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73  he table it is s
11290 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a  electing from.**
112a0 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65   is a disk table
112b0 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20   or the "old.*" 
112c0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68  pseudo-table, th
112d0 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74  en pTab points t
112e0 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  o the.** corresp
112f0 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66  onding table def
11300 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41  inition..**.** A
11310 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a  LLOCATION NOTES:
11320 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65  .**.** Expr obje
11330 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f  cts can use a lo
11340 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  t of memory spac
11350 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63  e in database sc
11360 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c  hema.  To.** hel
11370 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20  p reduce memory 
11380 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f  requirements, so
11390 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20  metimes an Expr 
113a0 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a  object will be.*
113b0 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e  * truncated.  An
113c0 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20  d to reduce the 
113d0 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
113e0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f   allocations, so
113f0 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f  metimes.** two o
11400 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65  r more Expr obje
11410 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  cts will be stor
11420 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d  ed in a single m
11430 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
11440 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69  ,.** together wi
11450 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73  th Expr.zToken s
11460 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  trings..**.** If
11470 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
11480 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  and EP_TokenOnly
11490 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77   flags are set w
114a0 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f  hen.** an Expr o
114b0 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74  bject is truncat
114c0 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64  ed.  When EP_Red
114d0 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65  uced is set, the
114e0 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69  n all.** the chi
114f0 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ld Expr objects 
11500 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66  in the Expr.pLef
11510 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68  t and Expr.pRigh
11520 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72  t subtrees.** ar
11530 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68  e contained with
11540 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f  in the same memo
11550 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  ry allocation.  
11560 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74  Note, however, t
11570 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72  hat.** the subtr
11580 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c  ees in Expr.x.pL
11590 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53  ist or Expr.x.pS
115a0 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73  elect are always
115b0 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61   separately.** a
115c0 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64  llocated, regard
115d0 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
115e0 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65  or not EP_Reduce
115f0 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72  d is set..*/.str
11600 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20  uct Expr {.  u8 
11610 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
11620 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e      /* Operation
11630 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68   performed by th
11640 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61  is node */.  cha
11650 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
11660 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
11670 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ity of the colum
11680 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20  n or 0 if not a 
11690 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 31 36 20  column */.  u16 
116a0 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
116b0 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c     /* Various fl
116c0 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62  ags.  EP_* See b
116d0 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  elow */.  union 
116e0 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b  {.    char *zTok
116f0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  en;          /* 
11700 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72  Token value. Zer
11710 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64  o terminated and
11720 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20   dequoted */.   
11730 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20   int iValue;    
11740 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e          /* Non-n
11750 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20  egative integer 
11760 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56  value if EP_IntV
11770 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a  alue */.  } u;..
11780 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54    /* If the EP_T
11790 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73  okenOnly flag is
117a0 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
117b0 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
117c0 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
117d0 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
117e0 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
117f0 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
11800 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
11810 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
11820 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
11830 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
11840 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a  ction. .  ******
11850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
11890 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b  ..  Expr *pLeft;
118a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
118b0 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20  ft subnode */.  
118c0 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20  Expr *pRight;   
118d0 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20         /* Right 
118e0 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69  subnode */.  uni
118f0 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73  on {.    ExprLis
11900 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a  t *pList;     /*
11910 20 46 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   Function argume
11920 6e 74 73 20 6f 72 20 69 6e 20 22 3c 65 78 70 72  nts or in "<expr
11930 3e 20 49 4e 20 28 3c 65 78 70 72 2d 6c 69 73 74  > IN (<expr-list
11940 29 22 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  )" */.    Select
11950 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
11960 2a 20 55 73 65 64 20 66 6f 72 20 73 75 62 2d 73  * Used for sub-s
11970 65 6c 65 63 74 73 20 61 6e 64 20 22 3c 65 78 70  elects and "<exp
11980 72 3e 20 49 4e 20 28 3c 73 65 6c 65 63 74 3e 29  r> IN (<select>)
11990 22 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f  " */.  } x;..  /
119a0 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
119b0 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
119c0 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
119d0 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
119e0 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
119f0 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
11a00 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
11a10 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
11a20 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
11a30 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
11a40 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
11a50 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
11a60 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
11a70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11aa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
11ab0 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
11ac0 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
11ad0 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
11ae0 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
11af0 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
11b00 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
11b10 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
11b20 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
11b30 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
11b40 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
11b50 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
11b60 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
11b70 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
11b80 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
11b90 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bb0 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
11bc0 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
11bd0 3e 20 6f 6c 64 20 2a 2f 0a 20 20 79 6e 56 61 72  > old */.  ynVar
11be0 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
11bf0 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
11c00 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d  column index.  -
11c10 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20  1 for rowid..   
11c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c30 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49        ** TK_VARI
11c40 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e  ABLE: variable n
11c50 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d  umber (always >=
11c60 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41   1). */.  i16 iA
11c70 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gg;             
11c80 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20   /* Which entry 
11c90 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f  in pAggInfo->aCo
11ca0 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d  l[] or ->aFunc[]
11cb0 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74   */.  i16 iRight
11cc0 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20  JoinTable;   /* 
11cd0 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20  If EP_FromJoin, 
11ce0 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20  the right table 
11cf0 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20  of the join */. 
11d00 20 75 38 20 66 6c 61 67 73 32 3b 20 20 20 20 20   u8 flags2;     
11d10 20 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e          /* Secon
11d20 64 20 73 65 74 20 6f 66 20 66 6c 61 67 73 2e 20  d set of flags. 
11d30 20 45 50 32 5f 2e 2e 2e 20 2a 2f 0a 20 20 75 38   EP2_... */.  u8
11d40 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20   op2;           
11d50 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53       /* TK_REGIS
11d60 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61  TER: original va
11d70 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20  lue of Expr.op. 
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d90 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f          ** TK_CO
11da0 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20  LUMN: the value 
11db0 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c  of p5 for OP_Col
11dc0 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
11dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
11de0 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a  TK_AGG_FUNCTION:
11df0 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a   nesting depth *
11e00 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
11e10 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73  gInfo;     /* Us
11e20 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c  ed by TK_AGG_COL
11e30 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46  UMN and TK_AGG_F
11e40 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62  UNCTION */.  Tab
11e50 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
11e60 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72      /* Table for
11e70 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65   TK_COLUMN expre
11e80 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f  ssions. */.};../
11e90 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
11ea0 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69  ng are the meani
11eb0 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74  ngs of bits in t
11ec0 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  he Expr.flags fi
11ed0 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
11ee0 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 20 30 78  EP_FromJoin   0x
11ef0 30 30 30 31 20 20 2f 2a 20 4f 72 69 67 69 6e 61  0001  /* Origina
11f00 74 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49  ted in ON or USI
11f10 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
11f20 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  oin */.#define E
11f30 50 5f 41 67 67 20 20 20 20 20 20 20 20 30 78 30  P_Agg        0x0
11f40 30 30 32 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  002  /* Contains
11f50 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   one or more agg
11f60 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
11f70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
11f80 65 73 6f 6c 76 65 64 20 20 20 30 78 30 30 30 34  esolved   0x0004
11f90 20 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65    /* IDs have be
11fa0 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43  en resolved to C
11fb0 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e  OLUMNs */.#defin
11fc0 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 20  e EP_Error      
11fd0 30 78 30 30 30 38 20 20 2f 2a 20 45 78 70 72 65  0x0008  /* Expre
11fe0 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f  ssion contains o
11ff0 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72  ne or more error
12000 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
12010 44 69 73 74 69 6e 63 74 20 20 20 30 78 30 30 31  Distinct   0x001
12020 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  0  /* Aggregate 
12030 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49  function with DI
12040 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a  STINCT keyword *
12050 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72  /.#define EP_Var
12060 53 65 6c 65 63 74 20 20 30 78 30 30 32 30 20 20  Select  0x0020  
12070 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f  /* pSelect is co
12080 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f  rrelated, not co
12090 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  nstant */.#defin
120a0 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 20  e EP_DblQuoted  
120b0 30 78 30 30 34 30 20 20 2f 2a 20 74 6f 6b 65 6e  0x0040  /* token
120c0 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  .z was originall
120d0 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64  y in "..." */.#d
120e0 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75  efine EP_InfixFu
120f0 6e 63 20 20 30 78 30 30 38 30 20 20 2f 2a 20 54  nc  0x0080  /* T
12100 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78  rue for an infix
12110 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c   function: LIKE,
12120 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64   GLOB, etc */.#d
12130 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65  efine EP_Collate
12140 20 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20 54      0x0100  /* T
12150 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54  ree contains a T
12160 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 61 72 74  K_COLLATE opeart
12170 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  or */.#define EP
12180 5f 46 69 78 65 64 44 65 73 74 20 20 30 78 30 32  _FixedDest  0x02
12190 30 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 6e 65  00  /* Result ne
121a0 65 64 65 64 20 69 6e 20 61 20 73 70 65 63 69 66  eded in a specif
121b0 69 63 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 23  ic register */.#
121c0 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c  define EP_IntVal
121d0 75 65 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20  ue   0x0400  /* 
121e0 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f  Integer value co
121f0 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61  ntained in u.iVa
12200 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  lue */.#define E
12210 50 5f 78 49 73 53 65 6c 65 63 74 20 20 30 78 30  P_xIsSelect  0x0
12220 38 30 30 20 20 2f 2a 20 78 2e 70 53 65 6c 65 63  800  /* x.pSelec
12230 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65  t is valid (othe
12240 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73  rwise x.pList is
12250 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
12260 48 69 6e 74 20 20 20 20 20 20 20 30 78 31 30 30  Hint       0x100
12270 30 20 20 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a  0  /* Not used *
12280 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64  /.#define EP_Red
12290 75 63 65 64 20 20 20 20 30 78 32 30 30 30 20 20  uced    0x2000  
122a0 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 69  /* Expr struct i
122b0 73 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  s EXPR_REDUCEDSI
122c0 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
122d0 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65  .#define EP_Toke
122e0 6e 4f 6e 6c 79 20 20 30 78 34 30 30 30 20 20 2f  nOnly  0x4000  /
122f0 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 69 73  * Expr struct is
12300 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
12310 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
12320 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61  /.#define EP_Sta
12330 74 69 63 20 20 20 20 20 30 78 38 30 30 30 20 20  tic     0x8000  
12340 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72  /* Held in memor
12350 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66  y not obtained f
12360 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  rom malloc() */.
12370 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
12380 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61  wing are the mea
12390 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e  nings of bits in
123a0 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 32   the Expr.flags2
123b0 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
123c0 6e 65 20 45 50 32 5f 4d 61 6c 6c 6f 63 65 64 54  ne EP2_MallocedT
123d0 6f 6b 65 6e 20 20 30 78 30 30 30 31 20 20 2f 2a  oken  0x0001  /*
123e0 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33   Need to sqlite3
123f0 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54  DbFree() Expr.zT
12400 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oken */.#define 
12410 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65 20  EP2_Irreducible 
12420 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 43 61     0x0002  /* Ca
12430 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44  nnot EXPRDUP_RED
12440 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f  UCE this Expr */
12450 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 70 73 65 75  ../*.** The pseu
12460 64 6f 2d 72 6f 75 74 69 6e 65 20 73 71 6c 69 74  do-routine sqlit
12470 65 33 45 78 70 72 53 65 74 49 72 72 65 64 75 63  e3ExprSetIrreduc
12480 69 62 6c 65 20 73 65 74 73 20 74 68 65 20 45 50  ible sets the EP
12490 32 5f 49 72 72 65 64 75 63 69 62 6c 65 0a 2a 2a  2_Irreducible.**
124a0 20 66 6c 61 67 20 6f 6e 20 61 6e 20 65 78 70 72   flag on an expr
124b0 65 73 73 69 6f 6e 20 73 74 72 75 63 74 75 72 65  ession structure
124c0 2e 20 20 54 68 69 73 20 66 6c 61 67 20 69 73 20  .  This flag is 
124d0 75 73 65 64 20 66 6f 72 20 56 56 26 41 20 6f 6e  used for VV&A on
124e0 6c 79 2e 20 20 54 68 65 0a 2a 2a 20 72 6f 75 74  ly.  The.** rout
124f0 69 6e 65 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  ine is implement
12500 65 64 20 61 73 20 61 20 6d 61 63 72 6f 20 74 68  ed as a macro th
12510 61 74 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 77 68  at only works wh
12520 65 6e 20 69 6e 20 64 65 62 75 67 67 69 6e 67 20  en in debugging 
12530 6d 6f 64 65 2c 0a 2a 2a 20 73 6f 20 61 73 20 6e  mode,.** so as n
12540 6f 74 20 74 6f 20 62 75 72 64 65 6e 20 70 72 6f  ot to burden pro
12550 64 75 63 74 69 6f 6e 20 63 6f 64 65 2e 0a 2a 2f  duction code..*/
12560 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
12570 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78  EBUG.# define Ex
12580 70 72 53 65 74 49 72 72 65 64 75 63 69 62 6c 65  prSetIrreducible
12590 28 58 29 20 20 28 58 29 2d 3e 66 6c 61 67 73 32  (X)  (X)->flags2
125a0 20 7c 3d 20 45 50 32 5f 49 72 72 65 64 75 63 69   |= EP2_Irreduci
125b0 62 6c 65 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ble.#else.# defi
125c0 6e 65 20 45 78 70 72 53 65 74 49 72 72 65 64 75  ne ExprSetIrredu
125d0 63 69 62 6c 65 28 58 29 0a 23 65 6e 64 69 66 0a  cible(X).#endif.
125e0 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
125f0 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
12600 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
12610 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
12620 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  he .** Expr.flag
12630 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
12640 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65  ine ExprHasPrope
12650 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28  rty(E,P)     (((
12660 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  E)->flags&(P))==
12670 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70  (P)).#define Exp
12680 72 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  rHasAnyProperty(
12690 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61  E,P)  (((E)->fla
126a0 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
126b0 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ine ExprSetPrope
126c0 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29  rty(E,P)     (E)
126d0 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
126e0 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72  fine ExprClearPr
126f0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45  operty(E,P)   (E
12700 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  )->flags&=~(P)..
12710 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
12720 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
12730 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65  mber of bytes re
12740 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d  quired by a norm
12750 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75  al Expr .** stru
12760 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75  ct, an Expr stru
12770 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52  ct with the EP_R
12780 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20  educed flag set 
12790 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a  in Expr.flags .*
127a0 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74  * and an Expr st
127b0 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
127c0 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
127d0 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
127e0 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20  EXPR_FULLSIZE   
127f0 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45          sizeof(E
12800 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f  xpr)           /
12810 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23  * Full size */.#
12820 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55  define EXPR_REDU
12830 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f  CEDSIZE        o
12840 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61  ffsetof(Expr,iTa
12850 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20  ble)  /* Common 
12860 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66  features */.#def
12870 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  ine EXPR_TOKENON
12880 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73  LYSIZE      offs
12890 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29  etof(Expr,pLeft)
128a0 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74     /* Fewer feat
128b0 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46  ures */../*.** F
128c0 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74  lags passed to t
128d0 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  he sqlite3ExprDu
128e0 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65  p() function. Se
128f0 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d  e the header com
12900 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73  ment .** above s
12910 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
12920 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
12930 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f  #define EXPRDUP_
12940 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30  REDUCE         0
12950 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72  x0001  /* Used r
12960 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72  educed-size Expr
12970 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   nodes */../*.**
12980 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
12990 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78  ssions.  Each ex
129a0 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74  pression may opt
129b0 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a  ionally have a.*
129c0 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72  * name.  An expr
129d0 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f  /name combinatio
129e0 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  n can be used in
129f0 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73   several ways, s
12a00 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69  uch.** as the li
12a10 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49  st of "expr AS I
12a20 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77  D" fields follow
12a30 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f  ing a "SELECT" o
12a40 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74  r in the.** list
12a50 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20   of "ID = expr" 
12a60 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41  items in an UPDA
12a70 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65  TE.  A list of e
12a80 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a  xpressions can.*
12a90 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61  * also be used a
12aa0 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  s the argument t
12ab0 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e  o a function, in
12ac0 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
12ad0 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64  a.zName.** field
12ae0 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
12af0 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74  .** By default t
12b00 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69  he Expr.zSpan fi
12b10 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61  eld holds a huma
12b20 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72  n-readable descr
12b30 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  iption of.** the
12b40 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
12b50 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20   is used in the 
12b60 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72  generation of er
12b70 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64  ror messages and
12b80 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c  .** column label
12b90 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  s.  In this case
12ba0 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20  , Expr.zSpan is 
12bb0 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65  typically the te
12bc0 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d  xt of a.** colum
12bd0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20  n expression as 
12be0 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53  it exists in a S
12bf0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
12c00 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a    However, if.**
12c10 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20   the bSpanIsTab 
12c20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
12c30 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c  n zSpan is overl
12c40 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68  oaded to mean th
12c50 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65  e name.** of the
12c60 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69   result column i
12c70 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41  n the form: DATA
12c80 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  BASE.TABLE.COLUM
12c90 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a  N.  This later.*
12ca0 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66  * form is used f
12cb0 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69  or name resoluti
12cc0 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46  on with nested F
12cd0 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a  ROM clauses..*/.
12ce0 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20  struct ExprList 
12cf0 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20  {.  int nExpr;  
12d00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
12d10 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69  mber of expressi
12d20 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ons on the list 
12d30 2a 2f 0a 20 20 69 6e 74 20 69 45 43 75 72 73 6f  */.  int iECurso
12d40 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  r;          /* V
12d50 44 42 45 20 43 75 72 73 6f 72 20 61 73 73 6f 63  DBE Cursor assoc
12d60 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
12d70 45 78 70 72 4c 69 73 74 20 2a 2f 0a 20 20 73 74  ExprList */.  st
12d80 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74  ruct ExprList_it
12d90 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68  em { /* For each
12da0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
12db0 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45  he list */.    E
12dc0 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
12dd0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69         /* The li
12de0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
12df0 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  s */.    char *z
12e00 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
12e10 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69   /* Token associ
12e20 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65  ated with this e
12e30 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
12e40 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20   char *zSpan;   
12e50 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67           /* Orig
12e60 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65  inal text of the
12e70 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
12e80 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b     u8 sortOrder;
12e90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20             /* 1 
12ea0 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f  for DESC or 0 fo
12eb0 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73  r ASC */.    uns
12ec0 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20  igned done :1;  
12ed0 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74       /* A flag t
12ee0 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20  o indicate when 
12ef0 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69  processing is fi
12f00 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e  nished */.    un
12f10 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61  signed bSpanIsTa
12f20 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68  b :1; /* zSpan h
12f30 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f  olds DB.TABLE.CO
12f40 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 31 36 20  LUMN */.    u16 
12f50 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20  iOrderByCol;    
12f60 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52      /* For ORDER
12f70 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   BY, column numb
12f80 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74  er in result set
12f90 20 2a 2f 0a 20 20 20 20 75 31 36 20 69 41 6c 69   */.    u16 iAli
12fa0 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  as;             
12fb0 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61  /* Index into Pa
12fc0 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72  rse.aAlias[] for
12fd0 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61   zName */.  } *a
12fe0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
12ff0 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f     /* Alloc a po
13000 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74  wer of two great
13010 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e  er or equal to n
13020 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  Expr */.};../*.*
13030 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
13040 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
13050 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  is used by the p
13060 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20  arser to record 
13070 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73  both.** the pars
13080 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78  e tree for an ex
13090 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65  pression and the
130a0 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74   span of input t
130b0 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78  ext for an.** ex
130c0 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  pression..*/.str
130d0 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20  uct ExprSpan {. 
130e0 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
130f0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78         /* The ex
13100 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74  pression parse t
13110 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ree */.  const c
13120 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f  har *zStart;   /
13130 2a 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65  * First characte
13140 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  r of input text 
13150 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
13160 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e  *zEnd;     /* On
13170 65 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74  e character past
13180 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75   the end of inpu
13190 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  t text */.};../*
131a0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
131b0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
131c0 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d  e can hold a sim
131d0 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e  ple list of iden
131e0 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68  tifiers,.** such
131f0 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c   as the list "a,
13200 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c  b,c" in the foll
13210 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73  owing statements
13220 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53  :.**.**      INS
13230 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
13240 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a  ) VALUES ...;.**
13250 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44        CREATE IND
13260 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c  EX idx ON t(a,b,
13270 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  c);.**      CREA
13280 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20  TE TRIGGER trig 
13290 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e  BEFORE UPDATE ON
132a0 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a   t(a,b,c) ...;.*
132b0 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e  *.** The IdList.
132c0 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75  a.idx field is u
132d0 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c  sed when the IdL
132e0 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  ist represents t
132f0 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f  he list of.** co
13300 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72  lumn names after
13310 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e   a table name in
13320 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
13330 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74  ment.  In the st
13340 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20  atement.**.**   
13350 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
13360 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a  a,b,c) ....**.**
13370 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b   If "a" is the k
13380 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61  -th column of ta
13390 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64  ble "t", then Id
133a0 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b  List.a[0].idx==k
133b0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69  ..*/.struct IdLi
133c0 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64  st {.  struct Id
133d0 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
133e0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
133f0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
13400 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20   identifier */. 
13410 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20     int idx;     
13420 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
13430 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c   some Table.aCol
13440 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e  [] of a column n
13450 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  amed zName */.  
13460 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b  } *a;.  int nId;
13470 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13480 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  er of identifier
13490 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
134a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62  .};../*.** The b
134b0 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20  itmask datatype 
134c0 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73  defined below is
134d0 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75   used for variou
134e0 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
134f0 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
13500 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62  this from a 64-b
13510 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74  it to a 32-bit t
13520 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e  ype limits the n
13530 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c  umber of.** tabl
13540 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20  es in a join to 
13550 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34  32 instead of 64
13560 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72  .  But it also r
13570 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a  educes the size.
13580 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ** of the librar
13590 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f  y by 738 bytes o
135a0 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64  n ix86..*/.typed
135b0 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a  ef u64 Bitmask;.
135c0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
135d0 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42  r of bits in a B
135e0 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d  itmask.  "BMS" m
135f0 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69  eans "BitMask Si
13600 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ze"..*/.#define 
13610 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65  BMS  ((int)(size
13620 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a  of(Bitmask)*8)).
13630 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20  ./*.** A bit in 
13640 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65  a Bitmask.*/.#de
13650 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20  fine MASKBIT(n) 
13660 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c    (((Bitmask)1)<
13670 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  <(n))../*.** The
13680 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
13690 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74  ture describes t
136a0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
136b0 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
136c0 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61  ment..** Each ta
136d0 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
136e0 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
136f0 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65  se is a separate
13700 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74   element of.** t
13710 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61  he SrcList.a[] a
13720 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68  rray..**.** With
13730 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66   the addition of
13740 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
13750 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20  se support, the 
13760 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
13770 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20  ure.** can also 
13780 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72  be used to descr
13790 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72  ibe a particular
137a0 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74   table such as t
137b0 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a  he table that.**
137c0 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20   is modified by 
137d0 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
137e0 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  E, or UPDATE sta
137f0 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e  tement.  In stan
13800 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63  dard SQL,.** suc
13810 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62  h a table must b
13820 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a  e a simple name:
13830 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c   ID.  But in SQL
13840 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63  ite, the table c
13850 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65  an.** now be ide
13860 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74  ntified by a dat
13870 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f  abase name, a do
13880 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  t, then the tabl
13890 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a  e name: ID.ID..*
138a0 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70  *.** The jointyp
138b0 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f  e starts out sho
138c0 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79  wing the join ty
138d0 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63  pe between the c
138e0 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20  urrent table.** 
138f0 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62  and the next tab
13900 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20  le on the list. 
13910 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c   The parser buil
13920 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73  ds the list this
13930 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c   way..** But sql
13940 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
13950 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72  JoinType() later
13960 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e   shifts the join
13970 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61  types so that ea
13980 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65  ch.** jointype e
13990 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69  xpresses the joi
139a0 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61  n between the ta
139b0 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
139c0 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  ious table..**.*
139d0 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64  * In the colUsed
139e0 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68   field, the high
139f0 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20  -order bit (bit 
13a00 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68  63) is set if th
13a10 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61  e table.** conta
13a20 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33  ins more than 63
13a30 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65   columns and the
13a40 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20   64-th or later 
13a50 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a  column is used..
13a60 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73  */.struct SrcLis
13a70 74 20 7b 0a 20 20 75 38 20 6e 53 72 63 3b 20 20  t {.  u8 nSrc;  
13a80 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13a90 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62  of tables or sub
13aa0 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46  queries in the F
13ab0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
13ac0 75 38 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  u8 nAlloc;      
13ad0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
13ae0 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69  ries allocated i
13af0 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20  n a[] below */. 
13b00 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
13b10 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d  item {.    Schem
13b20 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20  a *pSchema;  /* 
13b30 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20  Schema to which 
13b40 74 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78  this item is fix
13b50 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ed */.    char *
13b60 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e  zDatabase;  /* N
13b70 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
13b80 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62  holding this tab
13b90 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
13ba0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
13bb0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
13bc0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41   */.    char *zA
13bd0 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65  lias;     /* The
13be0 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22   "B" part of a "
13bf0 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20  A AS B" phrase. 
13c00 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41   zName is the "A
13c10 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  " */.    Table *
13c20 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e  pTab;      /* An
13c30 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65   SQL table corre
13c40 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d  sponding to zNam
13c50 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  e */.    Select 
13c60 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20  *pSelect;  /* A 
13c70 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
13c80 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f   used in place o
13c90 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a  f a table name *
13ca0 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69  /.    int addrFi
13cb0 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65  llSub;  /* Addre
13cc0 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65  ss of subroutine
13cd0 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73   to manifest a s
13ce0 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69  ubquery */.    i
13cf0 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20  nt regReturn;   
13d00 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
13d10 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72  ding return addr
13d20 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53  ess of addrFillS
13d30 75 62 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69  ub */.    u8 joi
13d40 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54  ntype;      /* T
13d50 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77  ype of join betw
13d60 65 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e  een this able an
13d70 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a  d the previous *
13d80 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e  /.    unsigned n
13d90 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20  otIndexed :1;   
13da0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
13db0 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58  e is a NOT INDEX
13dc0 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  ED clause */.   
13dd0 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72   unsigned isCorr
13de0 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54  elated :1;  /* T
13df0 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79  rue if sub-query
13e00 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a   is correlated *
13e10 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76  /.    unsigned v
13e20 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20  iaCoroutine :1; 
13e30 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20   /* Implemented 
13e40 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  as a co-routine 
13e50 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
13e60 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
13e70 20 20 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b     u8 iSelectId;
13e80 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65       /* If pSele
13e90 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66  ct!=0, the id of
13ea0 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20   the sub-select 
13eb0 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66  in EQP */.#endif
13ec0 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72  .    int iCursor
13ed0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44  ;      /* The VD
13ee0 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  BE cursor number
13ef0 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
13f00 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
13f10 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20    Expr *pOn;    
13f20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c      /* The ON cl
13f30 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
13f40 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55  /.    IdList *pU
13f50 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55  sing;   /* The U
13f60 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  SING clause of a
13f70 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74   join */.    Bit
13f80 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f  mask colUsed;  /
13f90 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73  * Bit N (1<<N) s
13fa0 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f  et if column N o
13fb0 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a  f pTab is used *
13fc0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64  /.    char *zInd
13fd0 65 78 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e 74  ex;     /* Ident
13fe0 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45  ifier from "INDE
13ff0 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22  XED BY <zIndex>"
14000 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 49   clause */.    I
14010 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
14020 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74   /* Index struct
14030 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ure correspondin
14040 67 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20  g to zIndex, if 
14050 61 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  any */.  } a[1];
14060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14070 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
14080 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e  ch identifier on
14090 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
140a0 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64  ./*.** Permitted
140b0 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53   values of the S
140c0 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70  rcList.a.jointyp
140d0 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69  e field.*/.#defi
140e0 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20  ne JT_INNER     
140f0 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79  0x0001    /* Any
14100 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f   kind of inner o
14110 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a  r cross join */.
14120 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53  #define JT_CROSS
14130 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
14140 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f  * Explicit use o
14150 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77  f the CROSS keyw
14160 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ord */.#define J
14170 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30  T_NATURAL   0x00
14180 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  04    /* True fo
14190 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f  r a "natural" jo
141a0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
141b0 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30  _LEFT      0x000
141c0 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74  8    /* Left out
141d0 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
141e0 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20  ne JT_RIGHT     
141f0 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67  0x0010    /* Rig
14200 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ht outer join */
14210 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45  .#define JT_OUTE
14220 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20  R     0x0020    
14230 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b  /* The "OUTER" k
14240 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
14250 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  t */.#define JT_
14260 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30  ERROR     0x0040
14270 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f      /* unknown o
14280 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f  r unsupported jo
14290 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a  in type */.../*.
142a0 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72  ** Flags appropr
142b0 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74  iate for the wct
142c0 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65  rlFlags paramete
142d0 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72  r of sqlite3Wher
142e0 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20  eBegin().** and 
142f0 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63  the WhereInfo.wc
14300 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e  trlFlags member.
14310 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52  .*/.#define WHER
14320 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c  E_ORDERBY_NORMAL
14330 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d     0x0000 /* No-
14340 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  op */.#define WH
14350 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20  ERE_ORDERBY_MIN 
14360 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f       0x0001 /* O
14370 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
14380 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e  ng for min() fun
14390 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
143a0 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20  RE_ORDERBY_MAX  
143b0 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52      0x0002 /* OR
143c0 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
143d0 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63  g for max() func
143e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
143f0 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45  E_ONEPASS_DESIRE
14400 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e  D  0x0004 /* Wan
14410 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73  t to do one-pass
14420 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a   UPDATE/DELETE *
14430 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14440 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20  DUPLICATES_OK   
14450 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f   0x0008 /* Ok to
14460 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f   return a row mo
14470 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a  re than once */.
14480 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d  #define WHERE_OM
14490 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30  IT_OPEN_CLOSE  0
144a0 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63  x0010 /* Table c
144b0 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61  ursors are alrea
144c0 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69  dy open */.#defi
144d0 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54  ne WHERE_FORCE_T
144e0 41 42 4c 45 20 20 20 20 20 20 30 78 30 30 32 30  ABLE      0x0020
144f0 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61   /* Do not use a
14500 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61  n index-only sea
14510 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  rch */.#define W
14520 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e  HERE_ONETABLE_ON
14530 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20  LY    0x0040 /* 
14540 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73  Only code the 1s
14550 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c  t table in pTabL
14560 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ist */.#define W
14570 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20  HERE_AND_ONLY   
14580 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20        0x0080 /* 
14590 44 6f 6e 27 74 20 75 73 65 20 69 6e 64 69 63 65  Don't use indice
145a0 73 20 66 6f 72 20 4f 52 20 74 65 72 6d 73 20 2a  s for OR terms *
145b0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
145c0 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20  GROUPBY         
145d0 20 30 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65   0x0100 /* pOrde
145e0 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rBy is really a 
145f0 47 52 4f 55 50 20 42 59 20 2a 2f 0a 0a 2f 2a 20  GROUP BY */../* 
14600 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
14610 6f 72 20 57 68 65 72 65 49 6e 66 6f 2e 65 44 69  or WhereInfo.eDi
14620 73 74 69 6e 63 74 20 61 6e 64 20 44 69 73 74 69  stinct and Disti
14630 6e 63 74 43 74 78 2e 65 54 6e 63 74 54 79 70 65  nctCtx.eTnctType
14640 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
14650 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20  E_DISTINCT_NOOP 
14660 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49       0  /* DISTI
14670 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20  NCT keyword not 
14680 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
14690 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
146a0 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e  NIQUE    1  /* N
146b0 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a  o duplicates */.
146c0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
146d0 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20  STINCT_ORDERED  
146e0 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69   2  /* All dupli
146f0 63 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65  cates are adjace
14700 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nt */.#define WH
14710 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f  ERE_DISTINCT_UNO
14720 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70  RDERED 3  /* Dup
14730 6c 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74  licates are scat
14740 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tered */../*.** 
14750 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65  A NameContext de
14760 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20  fines a context 
14770 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f  in which to reso
14780 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f  lve table and co
14790 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20  lumn.** names.  
147a0 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73  The context cons
147b0 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f  ists of a list o
147c0 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53  f tables (the pS
147d0 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e  rcList) field an
147e0 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e  d.** a list of n
147f0 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
14800 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e  (pEList).  The n
14810 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
14820 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e  list may.** be N
14830 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63  ULL.  The pSrc c
14840 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
14850 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
14860 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20   a SELECT or.** 
14870 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  to the table bei
14880 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62  ng operated on b
14890 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
148a0 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68  , or DELETE.  Th
148b0 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72  e.** pEList corr
148c0 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72  esponds to the r
148d0 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53  esult set of a S
148e0 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c  ELECT and is NUL
148f0 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73  L for.** other s
14900 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
14910 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61   NameContexts ca
14920 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68  n be nested.  Wh
14930 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  en resolving nam
14940 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f  es, the inner-mo
14950 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  st .** context i
14960 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74  s searched first
14970 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69  .  If no match i
14980 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78  s found, the nex
14990 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65  t outer.** conte
149a0 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  xt is checked.  
149b0 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c  If there is stil
149c0 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20  l no match, the 
149d0 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20  next context.** 
149e0 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69  is checked.  Thi
149f0 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e  s process contin
14a00 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72  ues until either
14a10 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
14a20 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74  d.** or all cont
14a30 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20  exts are check. 
14a40 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73   When a match is
14a50 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66   found, the nRef
14a60 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68   member of.** th
14a70 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69  e context contai
14a80 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69  ning the match i
14a90 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a  s incremented. .
14aa0 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75  **.** Each subqu
14ab0 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e  ery gets a new N
14ac0 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65  ameContext.  The
14ad0 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69   pNext field poi
14ae0 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61  nts to the.** Na
14af0 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65  meContext in the
14b00 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20   parent query.  
14b10 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73  Thus the process
14b20 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65   of scanning the
14b30 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
14b40 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  list corresponds
14b50 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68   to searching th
14b60 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65  rough successive
14b70 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71  ly outer.** subq
14b80 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66  ueries looking f
14b90 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73  or a match..*/.s
14ba0 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
14bb0 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  t {.  Parse *pPa
14bc0 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  rse;       /* Th
14bd0 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72  e parser */.  Sr
14be0 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
14bf0 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
14c00 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f  e tables used to
14c10 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a   resolve names *
14c20 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
14c30 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69  List;    /* Opti
14c40 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 6e 61 6d  onal list of nam
14c50 65 64 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  ed expressions *
14c60 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
14c70 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f  gInfo;   /* Info
14c80 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67  rmation about ag
14c90 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73  gregates at this
14ca0 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65   level */.  Name
14cb0 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20  Context *pNext; 
14cc0 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e   /* Next outer n
14cd0 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55  ame context.  NU
14ce0 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74  LL for outermost
14cf0 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
14d00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
14d10 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65  mber of names re
14d20 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63  solved by this c
14d30 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20  ontext */.  int 
14d40 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
14d50 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
14d60 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  rors encountered
14d70 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67   while resolving
14d80 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20 6e   names */.  u8 n
14d90 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  cFlags;         
14da0 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65   /* Zero or more
14db0 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69   NC_* flags defi
14dc0 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  ned below */.};.
14dd0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
14de0 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61  alues for the Na
14df0 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61  meContext, ncFla
14e00 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
14e10 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67  fine NC_AllowAgg
14e20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 41 67 67    0x01    /* Agg
14e30 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
14e40 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72   are allowed her
14e50 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  e */.#define NC_
14e60 48 61 73 41 67 67 20 20 20 20 30 78 30 32 20 20  HasAgg    0x02  
14e70 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
14e80 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
14e90 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65  ions seen */.#de
14ea0 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20  fine NC_IsCheck 
14eb0 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 72 75    0x04    /* Tru
14ec0 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e  e if resolving n
14ed0 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20  ames in a CHECK 
14ee0 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
14ef0 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75  efine NC_InAggFu
14f00 6e 63 20 30 78 30 38 20 20 20 20 2f 2a 20 54 72  nc 0x08    /* Tr
14f10 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20  ue if analyzing 
14f20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20  arguments to an 
14f30 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  agg func */.#def
14f40 69 6e 65 20 4e 43 5f 41 73 4d 61 79 62 65 20 20  ine NC_AsMaybe  
14f50 20 30 78 31 30 20 20 20 20 2f 2a 20 52 65 73 6f   0x10    /* Reso
14f60 6c 76 65 20 74 6f 20 41 53 20 74 65 72 6d 73 20  lve to AS terms 
14f70 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  of the result se
14f80 74 20 6f 6e 6c 79 0a 20 20 20 20 20 20 20 20 20  t only.         
14f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fa0 20 20 20 20 2a 2a 20 69 66 20 6e 6f 20 6f 74 68      ** if no oth
14fb0 65 72 20 72 65 73 6f 6c 75 74 69 6f 6e 20 69 73  er resolution is
14fc0 20 61 76 61 69 6c 61 62 6c 65 20 2a 2f 0a 0a 2f   available */../
14fd0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
14fe0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
14ff0 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
15000 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61  ains all informa
15010 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74  tion.** needed t
15020 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20  o generate code 
15030 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c  for a single SEL
15040 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
15050 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73  *.** nLimit is s
15060 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72  et to -1 if ther
15070 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  e is no LIMIT cl
15080 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69  ause.  nOffset i
15090 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49  s set to 0..** I
150a0 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d  f there is a LIM
150b0 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70  IT clause, the p
150c0 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69  arser sets nLimi
150d0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
150e0 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61  f the.** limit a
150f0 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68  nd nOffset to th
15100 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  e value of the o
15110 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74  ffset (or 0 if t
15120 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  here is not.** o
15130 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74  ffset).  But lat
15140 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e  er on, nLimit an
15150 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65  d nOffset become
15160 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
15170 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tions.** in the 
15180 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64  VDBE that record
15190 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f   the limit and o
151a0 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a  ffset counters..
151b0 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70  **.** addrOpenEp
151c0 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  hm[] entries con
151d0 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73  tain the address
151e0 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   of OP_OpenEphem
151f0 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  eral opcodes..**
15200 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73   These addresses
15210 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20   must be stored 
15220 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67  so that we can g
15230 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20  o back and fill 
15240 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59  in.** the P4_KEY
15250 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61  INFO and P2 para
15260 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e  meters later.  N
15270 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e  either the KeyIn
15280 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75  fo nor.** the nu
15290 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
152a0 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d  in P2 can be com
152b0 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d  puted at the sam
152c0 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65  e time.** as the
152d0 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73   OP_OpenEphm ins
152e0 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65  truction is code
152f0 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a  d because not.**
15300 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74   enough informat
15310 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f  ion about the co
15320 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20  mpound query is 
15330 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f  known at that po
15340 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49  int..** The KeyI
15350 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
15360 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20  Tran[0] and [1] 
15370 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
15380 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20  ng sequences.** 
15390 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  for the result s
153a0 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  et.  The KeyInfo
153b0 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68   for addrOpenEph
153c0 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f  m[2] contains co
153d0 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65  llating.** seque
153e0 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44  nces for the ORD
153f0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f  ER BY clause..*/
15400 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b  .struct Select {
15410 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
15420 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  ist;      /* The
15430 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72   fields of the r
15440 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70  esult */.  u8 op
15450 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15460 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f    /* One of: TK_
15470 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f  UNION TK_ALL TK_
15480 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43  INTERSECT TK_EXC
15490 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c  EPT */.  u16 sel
154a0 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
154b0 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20  /* Various SF_* 
154c0 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
154d0 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b  iLimit, iOffset;
154e0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
154f0 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c  isters holding L
15500 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f  IMIT & OFFSET co
15510 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20  unters */.  int 
15520 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b  addrOpenEphm[3];
15530 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
15540 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
15550 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
15560 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65  t */.  u64 nSele
15570 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a  ctRow;        /*
15580 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
15590 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
155a0 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
155b0 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
155c0 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
155d0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
155e0 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
155f0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
15600 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
15610 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
15620 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
15630 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
15640 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
15650 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
15660 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
15670 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
15680 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
15690 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
156a0 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
156b0 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
156c0 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
156d0 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
156e0 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
156f0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
15700 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
15710 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
15720 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 53 65 6c 65  mpound */.  Sele
15730 63 74 20 2a 70 52 69 67 68 74 6d 6f 73 74 3b 20  ct *pRightmost; 
15740 20 20 20 2f 2a 20 52 69 67 68 74 2d 6d 6f 73 74     /* Right-most
15750 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d   select in a com
15760 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61  pound select sta
15770 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72  tement */.  Expr
15780 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
15790 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
157a0 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
157b0 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
157c0 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b    Expr *pOffset;
157d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53           /* OFFS
157e0 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  ET expression. N
157f0 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
15800 65 64 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ed. */.};../*.**
15810 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
15820 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c  for Select.selFl
15830 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70  ags.  The "SF" p
15840 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72  refix stands for
15850 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67  .** "Select Flag
15860 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  "..*/.#define SF
15870 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20  _Distinct       
15880 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70   0x0001  /* Outp
15890 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53  ut should be DIS
158a0 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  TINCT */.#define
158b0 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20   SF_Resolved    
158c0 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49      0x0002  /* I
158d0 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20  dentifiers have 
158e0 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f  been resolved */
158f0 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72  .#define SF_Aggr
15900 65 67 61 74 65 20 20 20 20 20 20 20 30 78 30 30  egate       0x00
15910 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  04  /* Contains 
15920 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
15930 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ons */.#define S
15940 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20  F_UsesEphemeral 
15950 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65    0x0008  /* Use
15960 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65  s the OpenEpheme
15970 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64  ral opcode */.#d
15980 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65  efine SF_Expande
15990 64 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20  d        0x0010 
159a0 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63   /* sqlite3Selec
159b0 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64  tExpand() called
159c0 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66   on this */.#def
159d0 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e  ine SF_HasTypeIn
159e0 66 6f 20 20 20 20 20 30 78 30 30 32 30 20 20 2f  fo     0x0020  /
159f0 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65  * FROM subquerie
15a00 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74  s have Table met
15a10 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65  adata */.#define
15a20 20 53 46 5f 55 73 65 53 6f 72 74 65 72 20 20 20   SF_UseSorter   
15a30 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 53      0x0040  /* S
15a40 6f 72 74 20 75 73 69 6e 67 20 61 20 73 6f 72 74  ort using a sort
15a50 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  er */.#define SF
15a60 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
15a70 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74   0x0080  /* Synt
15a80 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
15a90 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  UES clause */.#d
15aa0 65 66 69 6e 65 20 53 46 5f 4d 61 74 65 72 69 61  efine SF_Materia
15ab0 6c 69 7a 65 20 20 20 20 20 30 78 30 31 30 30 20  lize     0x0100 
15ac0 20 2f 2a 20 46 6f 72 63 65 20 6d 61 74 65 72 69   /* Force materi
15ad0 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 76 69 65  alization of vie
15ae0 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ws */.#define SF
15af0 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20  _NestedFrom     
15b00 20 30 78 30 32 30 30 20 20 2f 2a 20 50 61 72 74   0x0200  /* Part
15b10 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69   of a parenthesi
15b20 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  zed FROM clause 
15b30 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72  */.../*.** The r
15b40 65 73 75 6c 74 73 20 6f 66 20 61 20 73 65 6c 65  esults of a sele
15b50 63 74 20 63 61 6e 20 62 65 20 64 69 73 74 72 69  ct can be distri
15b60 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c  buted in several
15b70 20 77 61 79 73 2e 20 20 54 68 65 0a 2a 2a 20 22   ways.  The.** "
15b80 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e  SRT" prefix mean
15b90 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74  s "SELECT Result
15ba0 20 54 79 70 65 22 2e 0a 2a 2f 0a 23 64 65 66 69   Type"..*/.#defi
15bb0 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
15bc0 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
15bd0 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
15be0 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
15bf0 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
15c00 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
15c10 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
15c20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
15c30 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
15c40 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
15c50 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
15c60 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
15c70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
15c80 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
15c90 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
15ca0 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
15cb0 77 68 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65  where */../* The
15cc0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
15cd0 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20   is ignored for 
15ce0 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  all of the above
15cf0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f   */.#define Igno
15d00 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20  rableOrderby(X) 
15d10 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54  ((X->eDest)<=SRT
15d20 5f 44 69 73 63 61 72 64 29 0a 0a 23 64 65 66 69  _Discard)..#defi
15d30 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20  ne SRT_Output   
15d40 20 20 20 20 35 20 20 2f 2a 20 4f 75 74 70 75 74      5  /* Output
15d50 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73   each row of res
15d60 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
15d70 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 20  RT_Mem          
15d80 36 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  6  /* Store resu
15d90 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63  lt in a memory c
15da0 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ell */.#define S
15db0 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 20  RT_Set          
15dc0 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  7  /* Store resu
15dd0 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61  lts as keys in a
15de0 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
15df0 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20  ne SRT_Table    
15e00 20 20 20 20 38 20 20 2f 2a 20 53 74 6f 72 65 20      8  /* Store 
15e10 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
15e20 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
15e30 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
15e40 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
15e50 20 20 20 39 20 20 2f 2a 20 43 72 65 61 74 65 20     9  /* Create 
15e60 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
15e70 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
15e80 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
15e90 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
15ea0 20 20 31 30 20 20 2f 2a 20 47 65 6e 65 72 61 74    10  /* Generat
15eb0 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
15ec0 66 20 72 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a  f result */../*.
15ed0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
15ee0 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65  f this object de
15ef0 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f  scribes where to
15f00 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75   put of the resu
15f10 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45  lts of.** a SELE
15f20 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  CT statement..*/
15f30 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65  .struct SelectDe
15f40 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b  st {.  u8 eDest;
15f50 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
15f60 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  to dispose of th
15f70 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f  e results.  On o
15f80 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a  f SRT_* above. *
15f90 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74  /.  char affSdst
15fa0 3b 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74  ;     /* Affinit
15fb0 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73  y used when eDes
15fc0 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20  t==SRT_Set */.  
15fd0 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20  int iSDParm;    
15fe0 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72    /* A parameter
15ff0 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65   used by the eDe
16000 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68  st disposal meth
16010 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73  od */.  int iSds
16020 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73  t;        /* Bas
16030 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65  e register where
16040 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69   results are wri
16050 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  tten */.  int nS
16060 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  dst;        /* N
16070 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
16080 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a  rs allocated */.
16090 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67  };../*.** During
160a0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
160b0 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74   of statements t
160c0 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69  hat do inserts i
160d0 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  nto AUTOINCREMEN
160e0 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68  T .** tables, th
160f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f  e following info
16100 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63  rmation is attac
16110 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65  hed to the Table
16120 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20  .u.autoInc.p.** 
16130 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20  pointer of each 
16140 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61  autoincrement ta
16150 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f  ble to record so
16160 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74  me side informat
16170 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ion that.** the 
16180 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e  code generator n
16190 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74  eeds.  We have t
161a0 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65  o keep per-table
161b0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a   autoincrement.*
161c0 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  * information in
161d0 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72   case inserts ar
161e0 65 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72  e down within tr
161f0 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72  iggers.  Trigger
16200 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d  s do not.** norm
16210 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20  ally coordinate 
16220 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73  their activities
16230 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64  , but we do need
16240 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74   to coordinate t
16250 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e  he.** loading an
16260 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f  d saving of auto
16270 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d  increment inform
16280 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
16290 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20   AutoincInfo {. 
162a0 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e   AutoincInfo *pN
162b0 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69  ext;   /* Next i
162c0 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c  nfo block in a l
162d0 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20  ist of them all 
162e0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
162f0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
16300 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c  ble this info bl
16310 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f  ock refers to */
16320 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
16330 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
16340 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  x in sqlite3.aDb
16350 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  [] of database h
16360 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20  olding pTab */. 
16370 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20   int regCtr;    
16380 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
16390 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
163a0 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e  g the rowid coun
163b0 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ter */.};../*.**
163c0 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c   Size of the col
163d0 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66  umn cache.*/.#if
163e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  ndef SQLITE_N_CO
163f0 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20  LCACHE.# define 
16400 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
16410 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E 10.#endif../*.
16420 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20  ** At least one 
16430 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
16440 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
16450 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ure is created f
16460 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67  or each .** trig
16470 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20  ger that may be 
16480 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73  fired while pars
16490 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55  ing an INSERT, U
164a0 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a  PDATE or DELETE.
164b0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c  ** statement. Al
164c0 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61  l such objects a
164d0 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
164e0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
164f0 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e  ded at.** Parse.
16500 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20  pTriggerPrg and 
16510 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61  deleted once sta
16520 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69  tement compilati
16530 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63  on has been.** c
16540 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  ompleted..**.** 
16550 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72  A Vdbe sub-progr
16560 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  am that implemen
16570 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20  ts the body and 
16580 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
16590 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65  rigger.** Trigge
165a0 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61  rPrg.pTrigger, a
165b0 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c  ssuming a defaul
165c0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  t ON CONFLICT cl
165d0 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67  ause of.** Trigg
165e0 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73  erPrg.orconf, is
165f0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54   stored in the T
16600 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72  riggerPrg.pProgr
16610 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20  am variable..** 
16620 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67  The Parse.pTrigg
16630 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72  erPrg list never
16640 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e   contains two en
16650 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73  tries with the s
16660 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f  ame.** values fo
16670 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20  r both pTrigger 
16680 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a  and orconf..**.*
16690 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67  * The TriggerPrg
166a0 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72  .aColmask[0] var
166b0 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
166c0 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  a mask of old.* 
166d0 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73  columns.** acces
166e0 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30  sed (or set to 0
166f0 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69   for triggers fi
16700 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  red as a result 
16710 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74  of INSERT .** st
16720 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c  atements). Simil
16730 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65  arly, the Trigge
16740 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d  rPrg.aColmask[1]
16750 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
16760 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66   to.** a mask of
16770 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75   new.* columns u
16780 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
16790 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  am..*/.struct Tr
167a0 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69  iggerPrg {.  Tri
167b0 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
167c0 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
167d0 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73  this program was
167e0 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20   coded from */. 
167f0 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65   TriggerPrg *pNe
16800 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
16810 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e   entry in Parse.
16820 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
16830 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
16840 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
16850 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65   Program impleme
16860 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f  nting pTrigger/o
16870 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f  rconf */.  int o
16880 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
16890 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
168a0 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
168b0 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61   */.  u32 aColma
168c0 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  sk[2];        /*
168d0 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c   Masks of old.*,
168e0 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61   new.* columns a
168f0 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  ccessed */.};../
16900 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b  *.** The yDbMask
16910 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68   datatype for th
16920 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c  e bitmask of all
16930 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
16940 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ses..*/.#if SQLI
16950 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
16960 33 30 0a 20 20 74 79 70 65 64 65 66 20 73 71 6c  30.  typedef sql
16970 69 74 65 33 5f 75 69 6e 74 36 34 20 79 44 62 4d  ite3_uint64 yDbM
16980 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ask;.#else.  typ
16990 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
169a0 74 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6e 64 69  t yDbMask;.#endi
169b0 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20  f../*.** An SQL 
169c0 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  parser context. 
169d0 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20   A copy of this 
169e0 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
169f0 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  sed through.** t
16a00 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f  he parser and do
16a10 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20  wn into all the 
16a20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f  parser action ro
16a30 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
16a40 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e  o.** carry aroun
16a50 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  d information th
16a60 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20  at is global to 
16a70 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65  the entire parse
16a80 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75  ..**.** The stru
16a90 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64  cture is divided
16aa0 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e   into two parts.
16ab0 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65    When the parse
16ac0 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65  r and code.** ge
16ad0 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d  nerate call them
16ae0 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65  selves recursive
16af0 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61  ly, the first pa
16b00 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74  rt of the struct
16b10 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61  ure.** is consta
16b20 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e  nt but the secon
16b30 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20  d part is reset 
16b40 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
16b50 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65   and end of.** e
16b60 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a  ach recursion..*
16b70 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c  *.** The nTableL
16b80 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f  ock and aTableLo
16b90 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ck variables are
16ba0 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68   only used if th
16bb0 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a  e shared-cache .
16bc0 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  ** feature is en
16bd0 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65  abled (if sqlite
16be0 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65  3Tsd()->useShare
16bf0 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20  dData is true). 
16c00 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64  They are.** used
16c10 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65   to store the se
16c20 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73  t of table-locks
16c30 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
16c40 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
16c50 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75  .** compiled. Fu
16c60 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61  nction sqlite3Ta
16c70 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65  bleLock() is use
16c80 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73  d to add entries
16c90 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e   to the.** list.
16ca0 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65  .*/.struct Parse
16cb0 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
16cc0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
16cd0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73   main database s
16ce0 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68  tructure */.  ch
16cf0 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
16d00 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d     /* An error m
16d10 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65  essage */.  Vdbe
16d20 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
16d30 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f   /* An engine fo
16d40 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61  r executing data
16d50 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f  base bytecode */
16d60 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
16d70 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
16d80 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63  n code from exec
16d90 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f  ution */.  u8 co
16da0 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20  lNamesSet;      
16db0 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50  /* TRUE after OP
16dc0 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20  _ColumnName has 
16dd0 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70  been issued to p
16de0 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65  Vdbe */.  u8 che
16df0 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f  ckSchema;      /
16e00 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20  * Causes schema 
16e10 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74  cookie check aft
16e20 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20  er an error */. 
16e30 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20   u8 nested;     
16e40 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16e50 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
16e60 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f  to the parser/co
16e70 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
16e80 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20    u8 nTempReg;  
16e90 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16ea0 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65   of temporary re
16eb0 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70  gisters in aTemp
16ec0 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54  Reg[] */.  u8 nT
16ed0 65 6d 70 49 6e 55 73 65 3b 20 20 20 20 20 20 20  empInUse;       
16ee0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 54 65  /* Number of aTe
16ef0 6d 70 52 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c  mpReg[] currentl
16f00 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f  y checked out */
16f10 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b  .  u8 nColCache;
16f20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16f30 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
16f40 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20  aColCache[] */. 
16f50 20 75 38 20 69 43 6f 6c 43 61 63 68 65 3b 20 20   u8 iColCache;  
16f60 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
16f70 74 72 79 20 69 6e 20 61 43 6f 6c 43 61 63 68 65  try in aColCache
16f80 5b 5d 20 74 6f 20 72 65 70 6c 61 63 65 20 2a 2f  [] to replace */
16f90 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69  .  u8 isMultiWri
16fa0 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  te;     /* True 
16fb0 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
16fc0 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d   modify/insert m
16fd0 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
16fe0 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20    u8 mayAbort;  
16ff0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
17000 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
17010 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
17020 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  xception */.  in
17030 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
17040 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72     /* Holding ar
17050 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ea for temporary
17060 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20   registers */.  
17070 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20  int nRangeReg;  
17080 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
17090 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65  the temporary re
170a0 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
170b0 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b    int iRangeReg;
170c0 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
170d0 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70  register in temp
170e0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
170f0 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  lock */.  int nE
17100 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
17110 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
17120 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  rs seen */.  int
17130 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20   nTab;          
17140 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
17150 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61  reviously alloca
17160 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73  ted VDBE cursors
17170 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
17180 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17190 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
171a0 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72  ells used so far
171b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20   */.  int nSet; 
171c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
171d0 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73 65  mber of sets use
171e0 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
171f0 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20  t nOnce;        
17200 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17210 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74  OP_Once instruct
17220 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ions so far */. 
17230 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20   int ckBase;    
17240 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
17250 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64  gister of data d
17260 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73  uring check cons
17270 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
17280 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20   iCacheLevel;   
17290 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61    /* ColCache va
172a0 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63  lid when aColCac
172b0 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61  he[].iLevel<=iCa
172c0 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  cheLevel */.  in
172d0 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20  t iCacheCnt;    
172e0 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73     /* Counter us
172f0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
17300 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76  ColCache[].lru v
17310 61 6c 75 65 73 20 2a 2f 0a 20 20 73 74 72 75 63  alues */.  struc
17320 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20  t yColCache {.  
17330 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
17340 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
17350 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
17360 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d  /.    int iColum
17370 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
17380 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62  able column numb
17390 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d  er */.    u8 tem
173a0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20  pReg;           
173b0 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65 6d  /* iReg is a tem
173c0 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  p register that 
173d0 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65 65  needs to be free
173e0 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65  d */.    int iLe
173f0 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  vel;           /
17400 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20  * Nesting level 
17410 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b  */.    int iReg;
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17430 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f  Reg with value o
17440 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30  f this column. 0
17450 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a   means none. */.
17460 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20      int lru;    
17470 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61            /* Lea
17480 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64  st recently used
17490 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20 73   entry has the s
174a0 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f  mallest value */
174b0 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53  .  } aColCache[S
174c0 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
174d0 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65  ];  /* One for e
174e0 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  ach column cache
174f0 20 65 6e 74 72 79 20 2a 2f 0a 20 20 79 44 62 4d   entry */.  yDbM
17500 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  ask writeMask;  
17510 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74   /* Start a writ
17520 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  e transaction on
17530 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73   these databases
17540 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f   */.  yDbMask co
17550 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69  okieMask;  /* Bi
17560 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20  tmask of schema 
17570 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73  verified databas
17580 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b  es */.  int cook
17590 69 65 47 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20  ieGoto;      /* 
175a0 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f  Address of OP_Go
175b0 74 6f 20 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72  to to cookie ver
175c0 69 66 69 65 72 20 73 75 62 72 6f 75 74 69 6e 65  ifier subroutine
175d0 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65   */.  int cookie
175e0 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58  Value[SQLITE_MAX
175f0 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f  _ATTACHED+2];  /
17600 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b  * Values of cook
17610 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f  ies to verify */
17620 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
17630 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
17640 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
17650 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
17660 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
17670 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
17680 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
17690 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
176a0 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
176b0 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
176c0 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
176d0 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
176e0 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
176f0 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
17700 72 61 6d 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63  ram */.  Token c
17710 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a  onstraintName;/*
17720 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
17730 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c  straint currentl
17740 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a  y being parsed *
17750 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
17760 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
17770 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c  HE.  int nTableL
17780 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ock;        /* N
17790 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69  umber of locks i
177a0 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a  n aTableLock */.
177b0 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61    TableLock *aTa
177c0 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75  bleLock; /* Requ
177d0 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73  ired table locks
177e0 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   for shared-cach
177f0 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  e mode */.#endif
17800 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
17810 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72  pAinc;  /* Infor
17820 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54  mation about AUT
17830 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74  OINCREMENT count
17840 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66  ers */..  /* Inf
17850 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68  ormation used wh
17860 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67  ile coding trigg
17870 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a  er programs. */.
17880 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76    Parse *pToplev
17890 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20  el;    /* Parse 
178a0 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61  structure for ma
178b0 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e  in program (or N
178c0 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ULL) */.  Table 
178d0 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f  *pTriggerTab;  /
178e0 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73  * Table triggers
178f0 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64   are being coded
17900 20 66 6f 72 20 2a 2f 0a 20 20 75 33 32 20 67 72   for */.  u32 gr
17910 65 70 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 2f  ep nQueryLoop; /
17920 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20  * Est number of 
17930 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20  iterations of a 
17940 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e  query (10*log2(N
17950 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d  )) */.  u32 oldm
17960 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
17970 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  Mask of old.* co
17980 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
17990 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73   */.  u32 newmas
179a0 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
179b0 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
179c0 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
179d0 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f  /.  u8 eTriggerO
179e0 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55  p;       /* TK_U
179f0 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
17a00 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f   or TK_DELETE */
17a10 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20  .  u8 eOrconf;  
17a20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
17a30 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
17a40 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65  olicy for trigge
17a50 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20  r steps */.  u8 
17a60 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b  disableTriggers;
17a70 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
17a80 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
17a90 0a 0a 20 20 2f 2a 20 41 62 6f 76 65 20 69 73 20  ..  /* Above is 
17aa0 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
17ab0 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
17ac0 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
17ad0 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
17ae0 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
17af0 6e 20 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72  n */..  int nVar
17b00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
17b10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27    /* Number of '
17b20 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65  ?' variables see
17b30 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20  n in the SQL so 
17b40 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56  far */.  int nzV
17b50 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
17b60 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17b70 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20  available slots 
17b80 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20  in azVar[] */.  
17b90 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20  u8 explain;     
17ba0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
17bb0 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e  e if the EXPLAIN
17bc0 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f   flag is found o
17bd0 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23  n the query */.#
17be0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
17bf0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
17c00 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62    u8 declareVtab
17c10 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
17c20 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71  rue if inside sq
17c30 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
17c40 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ab() */.  int nV
17c50 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  tabLock;        
17c60 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17c70 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
17c80 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69  to lock */.#endi
17c90 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20  f.  int nAlias; 
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17cb0 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73   Number of alias
17cc0 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f  ed result set co
17cd0 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  lumns */.  int n
17ce0 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
17cf0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
17d00 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f  on tree height o
17d10 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65  f current sub-se
17d20 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lect */.#ifndef 
17d30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
17d40 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63  AIN.  int iSelec
17d50 74 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  tId;            
17d60 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74  /* ID of current
17d70 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c   select for EXPL
17d80 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20  AIN output */.  
17d90 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49  int iNextSelectI
17da0 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
17db0 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65  t available sele
17dc0 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49  ct ID for EXPLAI
17dd0 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64  N output */.#end
17de0 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61  if.  char **azVa
17df0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
17e00 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61  * Pointers to na
17e10 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  mes of parameter
17e20 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65  s */.  Vdbe *pRe
17e30 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20  prepare;        
17e40 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70   /* VM being rep
17e50 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33  repared (sqlite3
17e60 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a  Reprepare()) */.
17e70 20 20 69 6e 74 20 2a 61 41 6c 69 61 73 3b 20 20    int *aAlias;  
17e80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
17e90 65 67 69 73 74 65 72 20 75 73 65 64 20 74 6f 20  egister used to 
17ea0 68 6f 6c 64 20 61 6c 69 61 73 65 64 20 72 65 73  hold aliased res
17eb0 75 6c 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ult */.  const c
17ec0 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20  har *zTail;     
17ed0 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65     /* All SQL te
17ee0 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  xt past the last
17ef0 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65   semicolon parse
17f00 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  d */.  Table *pN
17f10 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  ewTable;        
17f20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e   /* A table bein
17f30 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
17f40 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
17f50 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77  .  Trigger *pNew
17f60 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20  Trigger;     /* 
17f70 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f  Trigger under co
17f80 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45  nstruct by a CRE
17f90 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20  ATE TRIGGER */. 
17fa0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
17fb0 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68  thContext; /* Th
17fc0 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20  e 6th parameter 
17fd0 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c  to db->xAuth cal
17fe0 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65  lbacks */.  Toke
17ff0 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20  n sNameToken;   
18000 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77        /* Token w
18010 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20  ith unqualified 
18020 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61  schema object na
18030 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c  me */.  Token sL
18040 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  astToken;       
18050 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f    /* The last to
18060 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23 69  ken parsed */.#i
18070 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
18080 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
18090 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20   Token sArg;    
180a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
180b0 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61  mplete text of a
180c0 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74   module argument
180d0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70   */.  Table **ap
180e0 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20  VtabLock;       
180f0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69  /* Pointer to vi
18100 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65  rtual tables nee
18110 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a  ding locking */.
18120 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a  #endif.  Table *
18130 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20  pZombieTab;     
18140 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61     /* List of Ta
18150 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64  ble objects to d
18160 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65  elete after code
18170 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65   gen */.  Trigge
18180 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72  rPrg *pTriggerPr
18190 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69  g;  /* Linked li
181a0 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67  st of coded trig
181b0 67 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  gers */.};../*.*
181c0 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
181d0 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
181e0 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
181f0 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
18200 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
18210 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
18220 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
18230 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
18240 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
18250 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
18260 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72   (pParse->declar
18270 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f  eVtab).#endif../
18280 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
18290 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
182a0 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
182b0 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
182c0 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
182d0 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
182e0 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
182f0 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
18300 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
18310 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
18320 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
18330 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
18340 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
18350 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
18360 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
18370 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
18380 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
18390 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
183a0 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
183b0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
183c0 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20  ld flags for P5 
183d0 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73  value in various
183e0 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65   opcodes..*/.#de
183f0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41  fine OPFLAG_NCHA
18400 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20  NGE       0x01  
18410 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61    /* Set to upda
18420 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
18430 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
18440 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30  _LASTROWID     0
18450 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x02    /* Set to
18460 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74   update db->last
18470 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  Rowid */.#define
18480 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
18490 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a        0x04    /*
184a0 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20   This OP_Insert 
184b0 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45  is an sql UPDATE
184c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
184d0 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20  AG_APPEND       
184e0 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73   0x08    /* This
184f0 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
18500 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64   an append */.#d
18510 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45  efine OPFLAG_USE
18520 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20  SEEKRESULT 0x10 
18530 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f     /* Try to avo
18540 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72  id a seek in Btr
18550 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64  eeInsert() */.#d
18560 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 43 4c 45  efine OPFLAG_CLE
18570 41 52 43 41 43 48 45 20 20 20 20 30 78 32 30 20  ARCACHE    0x20 
18580 20 20 20 2f 2a 20 43 6c 65 61 72 20 70 73 65 75     /* Clear pseu
18590 64 6f 2d 74 61 62 6c 65 20 63 61 63 68 65 20 69  do-table cache i
185a0 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 23  n OP_Column */.#
185b0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45  define OPFLAG_LE
185c0 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30  NGTHARG     0x40
185d0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
185e0 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c   only used for l
185f0 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69  ength() */.#defi
18600 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  ne OPFLAG_TYPEOF
18610 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20  ARG     0x80    
18620 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
18630 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f  y used for typeo
18640 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  f() */.#define O
18650 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
18660 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
18670 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f  P_Open** used to
18680 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f   open bulk curso
18690 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
186a0 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
186b0 20 20 30 78 30 32 20 20 20 20 2f 2a 20 50 32 20    0x02    /* P2 
186c0 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
186d0 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
186e0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
186f0 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
18700 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
18710 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
18720 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
18730 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67  ./*. * Each trig
18740 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
18750 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
18760 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  ma is stored as 
18770 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20  an instance of. 
18780 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  * struct Trigger
18790 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72  . . *. * Pointer
187a0 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f  s to instances o
187b0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
187c0 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
187d0 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49  wo ways.. * 1. I
187e0 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22  n the "trigHash"
187f0 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72   hash table (par
18800 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  t of the sqlite3
18810 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74  * that represent
18820 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74  s the . *    dat
18830 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c  abase). This all
18840 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75  ows Trigger stru
18850 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74  ctures to be ret
18860 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a  rieved by name..
18870 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65   * 2. All trigge
18880 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
18890 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  th a single tabl
188a0 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20  e form a linked 
188b0 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a  list, using the.
188c0 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62   *    pNext memb
188d0 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  er of struct Tri
188e0 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20  gger. A pointer 
188f0 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
18900 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20  ment of the. *  
18910 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73    linked list is
18920 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22   stored as the "
18930 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72  pTrigger" member
18940 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   of the associat
18950 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20  ed. *    struct 
18960 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65  Table.. *. * The
18970 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
18980 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  ber points to th
18990 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
189a0 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  of a linked list
189b0 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  . * containing t
189c0 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
189d0 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
189e0 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
189f0 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  am.. */.struct T
18a00 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20  rigger {.  char 
18a10 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
18a20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f     /* The name o
18a30 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20  f the trigger   
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a50 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a       */.  char *
18a60 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  table;          
18a70 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f    /* The table o
18a80 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
18a90 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c  the trigger appl
18aa0 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ies */.  u8 op; 
18ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ac0 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
18ad0 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
18ae0 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20   TK_INSERT      
18af0 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d     */.  u8 tr_tm
18b00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18b10 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45  /* One of TRIGGE
18b20 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45  R_BEFORE, TRIGGE
18b30 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70  R_AFTER */.  Exp
18b40 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20  r *pWhen;       
18b50 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e       /* The WHEN
18b60 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65   clause of the e
18b70 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62  xpression (may b
18b80 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c  e NULL) */.  IdL
18b90 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20  ist *pColumns;  
18ba0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
18bb0 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20  is an UPDATE OF 
18bc0 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72  <column-list> tr
18bd0 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  igger,.         
18be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bf0 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d      the <column-
18c00 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20  list> is stored 
18c10 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
18c20 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
18c30 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
18c40 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
18c50 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  er */.  Schema *
18c60 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20  pTabSchema;     
18c70 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
18c80 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a  ning the table *
18c90 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
18ca0 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c  *step_list; /* L
18cb0 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67  ink list of trig
18cc0 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70  ger program step
18cd0 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f  s             */
18ce0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78  .  Trigger *pNex
18cf0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
18d00 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63  xt trigger assoc
18d10 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
18d20 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  able */.};../*.*
18d30 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65  * A trigger is e
18d40 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f  ither a BEFORE o
18d50 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67  r an AFTER trigg
18d60 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  er.  The followi
18d70 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  ng constants.** 
18d80 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e  determine which.
18d90 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65   .**.** If there
18da0 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72   are multiple tr
18db0 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68  iggers, you migh
18dc0 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45  t of some BEFORE
18dd0 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e   and some AFTER.
18de0 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65  .** In that case
18df0 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73  s, the constants
18e00 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52   below can be OR
18e10 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a  ed together..*/.
18e20 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
18e30 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e  BEFORE  1.#defin
18e40 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  e TRIGGER_AFTER 
18e50 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e    2../*. * An in
18e60 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74  stance of struct
18e70 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20   TriggerStep is 
18e80 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20  used to store a 
18e90 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65  single SQL state
18ea0 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20  ment. * that is 
18eb0 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  a part of a trig
18ec0 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a  ger-program. . *
18ed0 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66  . * Instances of
18ee0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
18ef0 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69  tep are stored i
18f00 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65  n a singly linke
18f10 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20  d list (linked. 
18f20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65  * using the "pNe
18f30 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65  xt" member) refe
18f40 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73  renced by the "s
18f50 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
18f60 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f   of the . * asso
18f70 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72  ciated struct Tr
18f80 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20  igger instance. 
18f90 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
18fa0 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20  t of the linked 
18fb0 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66  list is. * the f
18fc0 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65  irst step of the
18fd0 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
18fe0 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70  .. * . * The "op
18ff0 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
19000 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
19010 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
19020 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
19030 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
19040 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
19050 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
19060 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
19070 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
19080 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20  he . * value of 
19090 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  "op" as follows:
190a0 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
190b0 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f  _INSERT). * orco
190c0 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20  nf    -> stores 
190d0 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
190e0 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65  algorithm. * pSe
190f0 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69  lect   -> If thi
19100 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
19110 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e  NTO ... SELECT .
19120 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
19130 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
19140 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61     this stores a
19150 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
19160 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
19170 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
19180 2e 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d  .. * target    -
19190 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e  > A token holdin
191a0 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d  g the quoted nam
191b0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
191c0 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20  o insert into.. 
191d0 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49  * pExprList -> I
191e0 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
191f0 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c  ERT INTO ... VAL
19200 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  UES ... statemen
19210 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
19220 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
19230 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65  res values to be
19240 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72   inserted. Other
19250 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49  wise NULL.. * pI
19260 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68  dList   -> If th
19270 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
19280 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d  INTO ... (<colum
19290 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53  n-names>) VALUES
192a0 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20   ... . *        
192b0 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c        statement,
192c0 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65   then this store
192d0 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d  s the column-nam
192e0 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20  es to be. *     
192f0 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65           inserte
19300 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f  d into.. *. * (o
19310 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a  p == TK_DELETE).
19320 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
19330 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
19340 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
19350 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
19360 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20  delete from.. * 
19370 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
19380 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
19390 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
193a0 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
193b0 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
193c0 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
193d0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20  wise NULL.. * . 
193e0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41  * (op == TK_UPDA
193f0 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20  TE). * target   
19400 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
19410 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e  ing the quoted n
19420 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
19430 20 74 6f 20 75 70 64 61 74 65 20 72 6f 77 73 20   to update rows 
19440 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  of.. * pWhere   
19450 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
19460 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41  ause of the UPDA
19470 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
19480 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
19490 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
194a0 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
194b0 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
194c0 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20  > A list of the 
194d0 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74  columns to updat
194e0 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  e and the expres
194f0 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a  sions to update.
19500 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
19510 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c  them to. See sql
19520 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63  ite3Update() doc
19530 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70  umentation of "p
19540 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20  Changes". *     
19550 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e           argumen
19560 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63  t.. * . */.struc
19570 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a  t TriggerStep {.
19580 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
19590 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
195a0 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
195b0 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
195c0 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20  , TK_SELECT */. 
195d0 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20   u8 orconf;     
195e0 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c        /* OE_Roll
195f0 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54  back etc. */.  T
19600 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20  rigger *pTrig;  
19610 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67      /* The trigg
19620 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65  er that this ste
19630 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a  p is a part of *
19640 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
19650 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect;     /* SELE
19660 43 54 20 73 74 61 74 6d 65 6e 74 20 6f 72 20 52  CT statment or R
19670 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54  HS of INSERT INT
19680 4f 20 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20  O .. SELECT ... 
19690 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67 65  */.  Token targe
196a0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 72  t;        /* Tar
196b0 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45  get table for DE
196c0 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e  LETE, UPDATE, IN
196d0 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a  SERT */.  Expr *
196e0 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f  pWhere;        /
196f0 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
19700 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72  se for DELETE or
19710 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f   UPDATE steps */
19720 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78  .  ExprList *pEx
19730 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63  prList; /* SET c
19740 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45  lause for UPDATE
19750 2e 20 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  .  VALUES clause
19760 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20   for INSERT */. 
19770 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74   IdList *pIdList
19780 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  ;     /* Column 
19790 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54  names for INSERT
197a0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
197b0 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  p *pNext;  /* Ne
197c0 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c  xt in the link-l
197d0 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ist */.  Trigger
197e0 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a  Step *pLast;  /*
197f0 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e   Last element in
19800 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69   link-list. Vali
19810 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f  d for 1st elem o
19820 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  nly */.};../*.**
19830 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
19840 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
19850 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  s information us
19860 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
19870 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e  Fix....** routin
19880 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20  es as they walk 
19890 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 74  the parse tree t
198a0 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20  o make database 
198b0 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78  references.** ex
198c0 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70  plicit.  .*/.typ
198d0 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69  edef struct DbFi
198e0 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72  xer DbFixer;.str
198f0 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20  uct DbFixer {.  
19900 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
19910 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69      /* The parsi
19920 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72  ng context.  Err
19930 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74  or messages writ
19940 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  ten here */.  Sc
19950 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
19960 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74    /* Fix items t
19970 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  o this schema */
19980 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
19990 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  Db;    /* Make s
199a0 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20  ure all objects 
199b0 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  are contained in
199c0 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
199d0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
199e0 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20  zType;  /* Type 
199f0 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
19a00 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
19a10 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20  r messages */.  
19a20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61  const Token *pNa
19a30 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  me; /* Name of t
19a40 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75  he container - u
19a50 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65  sed for error me
19a60 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ssages */.};../*
19a70 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20  .** An objected 
19a80 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61  used to accumula
19a90 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  te the text of a
19aa0 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65   string where we
19ab0 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73  .** do not neces
19ac0 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20  sarily know how 
19ad0 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77  big the string w
19ae0 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e  ill be in the en
19af0 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72  d..*/.struct Str
19b00 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65  Accum {.  sqlite
19b10 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
19b20 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62  * Optional datab
19b30 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64  ase for lookasid
19b40 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20  e.  Can be NULL 
19b50 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65  */.  char *zBase
19b60 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62  ;         /* A b
19b70 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  ase allocation. 
19b80 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63   Not from malloc
19b90 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65  . */.  char *zTe
19ba0 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  xt;         /* T
19bb0 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63  he string collec
19bc0 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ted so far */.  
19bd0 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20 20  int  nChar;     
19be0 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
19bf0 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20  f the string so 
19c00 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41  far */.  int  nA
19c10 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  lloc;         /*
19c20 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65   Amount of space
19c30 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54   allocated in zT
19c40 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78  ext */.  int  mx
19c50 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
19c60 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64   Maximum allowed
19c70 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a   string length *
19c80 2f 0a 20 20 75 38 20 20 20 6d 61 6c 6c 6f 63 46  /.  u8   mallocF
19c90 61 69 6c 65 64 3b 20 20 20 2f 2a 20 42 65 63 6f  ailed;   /* Beco
19ca0 6d 65 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  mes true if any 
19cb0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
19cc0 6e 20 66 61 69 6c 73 20 2a 2f 0a 20 20 75 38 20  n fails */.  u8 
19cd0 20 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20    useMalloc;    
19ce0 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20 31    /* 0: none,  1
19cf0 3a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  : sqlite3DbMallo
19d00 63 2c 20 20 32 3a 20 73 71 6c 69 74 65 33 5f 6d  c,  2: sqlite3_m
19d10 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20 20 20  alloc */.  u8   
19d20 74 6f 6f 42 69 67 3b 20 20 20 20 20 20 20 20 20  tooBig;         
19d30 2f 2a 20 42 65 63 6f 6d 65 73 20 74 72 75 65 20  /* Becomes true 
19d40 69 66 20 73 74 72 69 6e 67 20 73 69 7a 65 20 65  if string size e
19d50 78 63 65 65 64 73 20 6c 69 6d 69 74 73 20 2a 2f  xceeds limits */
19d60 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69  .};../*.** A poi
19d70 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
19d80 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
19d90 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
19da0 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
19db0 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e  m sqlite3Init an
19dc0 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  d OP_ParseSchema
19dd0 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65   into the sqlite
19de0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a  3InitCallback..*
19df0 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
19e00 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
19e10 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
19e20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69  database being i
19e30 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
19e40 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b  char **pzErrMsg;
19e50 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
19e60 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65  sage stored here
19e70 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
19e80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66            /* 0 f
19e90 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  or main database
19ea0 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32  .  1 for TEMP, 2
19eb0 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20  .. for ATTACHed 
19ec0 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
19ed0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
19ee0 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68  lt code stored h
19ef0 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74  ere */.} InitDat
19f00 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74  a;../*.** Struct
19f10 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67  ure containing g
19f20 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74  lobal configurat
19f30 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65  ion data for the
19f40 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
19f50 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
19f60 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61  cture also conta
19f70 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69  ins some state i
19f80 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
19f90 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
19fa0 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d  fig {.  int bMem
19fb0 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20  stat;           
19fc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
19fd0 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f  e to enable memo
19fe0 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69  ry status */.  i
19ff0 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20  nt bCoreMutex;  
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a010 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1a020 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67  le core mutexing
1a030 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d   */.  int bFullM
1a040 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1a050 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1a060 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d  to enable full m
1a070 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
1a080 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20   bOpenUri;      
1a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a0a0 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70  * True to interp
1a0b0 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73  ret filenames as
1a0c0 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62   URIs */.  int b
1a0d0 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20  UseCis;         
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a0f0 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  Use covering ind
1a100 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63  ices for full-sc
1a110 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53  ans */.  int mxS
1a120 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  trlen;          
1a130 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1a140 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e  ximum string len
1a150 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c  gth */.  int szL
1a160 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
1a170 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
1a180 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
1a190 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20  buffer size */. 
1a1a0 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b   int nLookaside;
1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1c0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
1a1d0 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63  okaside buffer c
1a1e0 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ount */.  sqlite
1a1f0 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b  3_mem_methods m;
1a200 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1a210 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20  ow-level memory 
1a220 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72  allocation inter
1a230 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
1a240 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
1a250 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c  mutex;      /* L
1a260 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69  ow-level mutex i
1a270 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
1a280 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
1a290 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20  hods2 pcache2;  
1a2a0 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67  /* Low-level pag
1a2b0 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63  e-cache interfac
1a2c0 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65  e */.  void *pHe
1a2d0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1a2e0 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70           /* Heap
1a2f0 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a   storage space *
1a300 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20  /.  int nHeap;  
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a320 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1a330 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e   pHeap[] */.  in
1a340 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20  t mnReq, mxReq; 
1a350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a360 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68  /* Min and max h
1a370 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a  eap requests siz
1a380 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  es */.  sqlite3_
1a390 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20  int64 szMmap;   
1a3a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61            /* mma
1a3b0 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70  p() space per op
1a3c0 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c  en file */.  sql
1a3d0 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61  ite3_int64 mxMma
1a3e0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
1a3f0 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  * Maximum value 
1a400 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20  for szMmap */.  
1a410 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20  void *pScratch; 
1a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a430 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d    /* Scratch mem
1a440 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53  ory */.  int szS
1a450 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
1a460 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1a470 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72 61 74  ze of each scrat
1a480 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69  ch buffer */.  i
1a490 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20  nt nScratch;    
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63   /* Number of sc
1a4c0 72 61 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f  ratch buffers */
1a4d0 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20  .  void *pPage; 
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4f0 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63       /* Page cac
1a500 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  he memory */.  i
1a510 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20  nt szPage;      
1a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a530 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
1a540 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d   page in pPage[]
1a550 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b   */.  int nPage;
1a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a570 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a580 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50  r of pages in pP
1a590 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  age[] */.  int m
1a5a0 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20  xParserStack;   
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a5c0 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66  maximum depth of
1a5d0 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63   the parser stac
1a5e0 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65  k */.  int share
1a5f0 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20  dCacheEnabled;  
1a600 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65           /* true
1a610 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65   if shared-cache
1a620 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f   mode enabled */
1a630 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20  .  /* The above 
1a640 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c  might be initial
1a650 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  ized to non-zero
1a660 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1a670 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a   need to always.
1a680 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62    ** initially b
1a690 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e  e zero, however.
1a6a0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74   */.  int isInit
1a6b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a6c0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1a6d0 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61  after initializa
1a6e0 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65  tion has finishe
1a6f0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f  d */.  int inPro
1a700 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20  gress;          
1a710 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1a720 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a   while initializ
1a730 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
1a740 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74  s */.  int isMut
1a750 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  exInit;         
1a760 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1a770 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61   after mutexes a
1a780 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  re initialized *
1a790 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63  /.  int isMalloc
1a7a0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1a7b0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1a7c0 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
1a7d0 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
1a7e0 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b  nt isPCacheInit;
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a800 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1a810 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
1a820 69 7a 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ized */.  sqlite
1a830 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75  3_mutex *pInitMu
1a840 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  tex;        /* M
1a850 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c  utex used by sql
1a860 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28  ite3_initialize(
1a870 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49  ) */.  int nRefI
1a880 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
1a890 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1a8a0 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70  er of users of p
1a8b0 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 76  InitMutex */.  v
1a8c0 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64  oid (*xLog)(void
1a8d0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
1a8e0 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  *); /* Function 
1a8f0 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20  for logging */. 
1a900 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20   void *pLogArg; 
1a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a920 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
1a930 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28  rgument to xLog(
1a940 29 20 2a 2f 0a 20 20 69 6e 74 20 62 4c 6f 63 61  ) */.  int bLoca
1a950 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20  ltimeFault;     
1a960 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1a970 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69   to fail localti
1a980 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 69  me() calls */.#i
1a990 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1a9a0 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64  LE_SQLLOG.  void
1a9b0 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a  (*xSqllog)(void*
1a9c0 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
1a9d0 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  char*, int);.  v
1a9e0 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b  oid *pSqllogArg;
1a9f0 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
1aa00 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  * Context pointe
1aa10 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68  r passed down th
1aa20 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77  rough the tree-w
1aa30 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  alk..*/.struct W
1aa40 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  alker {.  int (*
1aa50 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57  xExprCallback)(W
1aa60 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20  alker*, Expr*); 
1aa70 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
1aa80 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20  for expressions 
1aa90 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65  */.  int (*xSele
1aaa0 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  ctCallback)(Walk
1aab0 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f  er*,Select*);  /
1aac0 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  * Callback for S
1aad0 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73  ELECTs */.  Pars
1aae0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1aaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab00 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20        /* Parser 
1ab10 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69  context.  */.  i
1ab20 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20  nt walkerDepth; 
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ab50 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73  er of subqueries
1ab60 20 2a 2f 0a 20 20 75 38 20 62 53 65 6c 65 63 74   */.  u8 bSelect
1ab70 44 65 70 74 68 46 69 72 73 74 3b 20 20 20 20 20  DepthFirst;     
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab90 2f 2a 20 44 6f 20 73 75 62 71 75 65 72 69 65 73  /* Do subqueries
1aba0 20 66 69 72 73 74 20 2a 2f 0a 20 20 75 6e 69 6f   first */.  unio
1abb0 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  n {             
1abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abd0 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64        /* Extra d
1abe0 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b  ata for callback
1abf0 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74   */.    NameCont
1ac00 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20  ext *pNC;       
1ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e     /* Naming con
1ac30 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  text */.    int 
1ac40 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
1ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac60 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
1ac70 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 53  r value */.    S
1ac80 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
1ac90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1aca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f            /* FRO
1acb0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  M clause */.    
1acc0 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20  struct SrcCount 
1acd0 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20  *pSrcCount;     
1ace0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
1acf0 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
1ad00 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
1ad10 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72  u;.};../* Forwar
1ad20 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a  d declarations *
1ad30 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  /.int sqlite3Wal
1ad40 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45  kExpr(Walker*, E
1ad50 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
1ad60 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57  e3WalkExprList(W
1ad70 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  alker*, ExprList
1ad80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1ad90 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72  alkSelect(Walker
1ada0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
1adb0 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
1adc0 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  ctExpr(Walker*, 
1add0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
1ade0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46  lite3WalkSelectF
1adf0 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rom(Walker*, Sel
1ae00 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65  ect*);../*.** Re
1ae10 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
1ae20 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
1ae30 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
1ae40 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
1ae50 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
1ae60 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
1ae70 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
1ae80 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
1ae90 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
1aea0 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
1aeb0 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
1aec0 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
1aed0 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
1aee0 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
1aef0 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
1af00 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
1af10 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
1af20 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20  ./*.** Assuming 
1af30 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  zIn points to th
1af40 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
1af50 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  a UTF-8 characte
1af60 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49  r,.** advance zI
1af70 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  n to point to th
1af80 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
1af90 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63  the next UTF-8 c
1afa0 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65  haracter..*/.#de
1afb0 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50  fine SQLITE_SKIP
1afc0 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20  _UTF8(zIn) {    
1afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afe0 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a      \.  if( (*(z
1aff0 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20  In++))>=0xc0 ){ 
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b010 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
1b020 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20     while( (*zIn 
1b030 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b  & 0xc0)==0x80 ){
1b040 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20   zIn++; }       
1b050 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20        \.  }     
1b060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1b090 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  .}../*.** The SQ
1b0a0 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72  LITE_*_BKPT macr
1b0b0 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74  os are substitut
1b0c0 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72  es for the error
1b0d0 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74   codes with.** t
1b0e0 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74  he same name but
1b0f0 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b   without the _BK
1b100 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73  PT suffix.  Thes
1b110 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a  e macros invoke.
1b120 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74  ** routines that
1b130 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65   report the line
1b140 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68  -number on which
1b150 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69   the error origi
1b160 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73  nated.** using s
1b170 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54  qlite3_log().  T
1b180 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f  he routines also
1b190 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65   provide a conve
1b1a0 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74  nient place.** t
1b1b0 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72  o set a debugger
1b1c0 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a   breakpoint..*/.
1b1d0 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
1b1e0 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  ptError(int);.in
1b1f0 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  t sqlite3MisuseE
1b200 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
1b210 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
1b220 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e  ror(int);.#defin
1b230 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
1b240 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72  _BKPT sqlite3Cor
1b250 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
1b260 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
1b270 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73  TE_MISUSE_BKPT s
1b280 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
1b290 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
1b2a0 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ine SQLITE_CANTO
1b2b0 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  PEN_BKPT sqlite3
1b2c0 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f  CantopenError(__
1b2d0 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20  LINE__).../*.** 
1b2e0 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61  FTS4 is really a
1b2f0 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20  n extension for 
1b300 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61  FTS3.  It is ena
1b310 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a  bled using the.*
1b320 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
1b330 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74  FTS3 macro.  But
1b340 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   to avoid confus
1b350 69 6f 6e 20 77 65 20 61 6c 73 6f 20 61 6c 6c 0a  ion we also all.
1b360 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  ** the SQLITE_EN
1b370 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20  ABLE_FTS4 macro 
1b380 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61  to serve as an a
1b390 6c 69 73 73 65 20 66 6f 72 20 53 51 4c 49 54 45  lisse for SQLITE
1b3a0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f  _ENABLE_FTS3..*/
1b3b0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1b3c0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29  ITE_ENABLE_FTS4)
1b3d0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1b3e0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
1b3f0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1b400 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 65 6e  _ENABLE_FTS3.#en
1b410 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
1b420 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73  type.h header is
1b430 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d   needed for non-
1b440 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20  ASCII systems.  
1b450 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65  It is also.** ne
1b460 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65  eded by FTS3 whe
1b470 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64  n FTS3 is includ
1b480 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61  ed in the amalga
1b490 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21  mation..*/.#if !
1b4a0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
1b4b0 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28  SCII) || \.    (
1b4c0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
1b4d0 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64  NABLE_FTS3) && d
1b4e0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d  efined(SQLITE_AM
1b4f0 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69  ALGAMATION)).# i
1b500 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e  nclude <ctype.h>
1b510 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
1b520 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1b530 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74  ros mimic the st
1b540 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66  andard library f
1b550 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72  unctions toupper
1b560 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29  (),.** isspace()
1b570 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64  , isalnum(), isd
1b580 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69  igit() and isxdi
1b590 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76  git(), respectiv
1b5a0 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69  ely. The.** sqli
1b5b0 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79  te versions only
1b5c0 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20   work for ASCII 
1b5d0 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61  characters, rega
1b5e0 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65  rdless of locale
1b5f0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1b600 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e  TE_ASCII.# defin
1b610 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
1b620 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69  (x)  ((x)&~(sqli
1b630 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1b640 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1b650 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0x20)).# define 
1b660 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
1b670 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1b680 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1b690 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23  har)(x)]&0x01).#
1b6a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1b6b0 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c  salnum(x)   (sql
1b6c0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1b6d0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1b6e0 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20  &0x06).# define 
1b6f0 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
1b700 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1b710 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1b720 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23  har)(x)]&0x02).#
1b730 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1b740 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c  sdigit(x)   (sql
1b750 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1b760 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1b770 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20  &0x04).# define 
1b780 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
1b790 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  x)  (sqlite3Ctyp
1b7a0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1b7b0 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23  har)(x)]&0x08).#
1b7c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1b7d0 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c  olower(x)   (sql
1b7e0 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
1b7f0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1b800 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65  (x)]).#else.# de
1b810 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
1b820 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72  per(x)   toupper
1b830 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1b840 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1b850 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
1b860 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67    isspace((unsig
1b870 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1b880 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1b890 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e  alnum(x)   isaln
1b8a0 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
1b8b0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1b8c0 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
1b8d0 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73  )   isalpha((uns
1b8e0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1b8f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1b900 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64  Isdigit(x)   isd
1b910 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
1b920 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1b930 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
1b940 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28  t(x)  isxdigit((
1b950 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1b960 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1b970 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
1b980 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65  tolower((unsigne
1b990 64 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64  d char)(x)).#end
1b9a0 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e  if../*.** Intern
1b9b0 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74  al function prot
1b9c0 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e  otypes.*/.#defin
1b9d0 65 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  e sqlite3StrICmp
1b9e0 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70   sqlite3_stricmp
1b9f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c  .int sqlite3Strl
1ba00 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a  en30(const char*
1ba10 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
1ba20 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74  e3StrNICmp sqlit
1ba30 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74  e3_strnicmp..int
1ba40 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e   sqlite3MallocIn
1ba50 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  it(void);.void s
1ba60 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28  qlite3MallocEnd(
1ba70 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  void);.void *sql
1ba80 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  ite3Malloc(int);
1ba90 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
1baa0 6c 6c 6f 63 5a 65 72 6f 28 69 6e 74 29 3b 0a 76  llocZero(int);.v
1bab0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
1bac0 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33  llocZero(sqlite3
1bad0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
1bae0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
1baf0 77 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  w(sqlite3*, int)
1bb00 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
1bb10 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a  bStrDup(sqlite3*
1bb20 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63  ,const char*);.c
1bb30 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
1bb40 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  rNDup(sqlite3*,c
1bb50 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
1bb60 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  ;.void *sqlite3R
1bb70 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 69 6e  ealloc(void*, in
1bb80 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1bb90 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65  3DbReallocOrFree
1bba0 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
1bbb0 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a   *, int);.void *
1bbc0 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
1bbd0 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
1bbe0 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73   *, int);.void s
1bbf0 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c  qlite3DbFree(sql
1bc00 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69  ite3*, void*);.i
1bc10 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
1bc20 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74  Size(void*);.int
1bc30 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
1bc40 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Size(sqlite3*, v
1bc50 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
1bc60 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f  ite3ScratchMallo
1bc70 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  c(int);.void sql
1bc80 69 74 65 33 53 63 72 61 74 63 68 46 72 65 65 28  ite3ScratchFree(
1bc90 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
1bca0 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28  lite3PageMalloc(
1bcb0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1bcc0 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a  e3PageFree(void*
1bcd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
1bce0 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69  emSetDefault(voi
1bcf0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
1bd00 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b  BenignMallocHook
1bd10 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  s(void (*)(void)
1bd20 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  , void (*)(void)
1bd30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65  );.int sqlite3He
1bd40 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69  apNearlyFull(voi
1bd50 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79  d);../*.** On sy
1bd60 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65  stems with ample
1bd70 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64   stack space and
1bd80 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c   that support al
1bd90 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20  loca(), make.** 
1bda0 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20  use of alloca() 
1bdb0 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  to obtain space 
1bdc0 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61  for large automa
1bdd0 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79  tic objects.  By
1bde0 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74   default,.** obt
1bdf0 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d  ain space from m
1be00 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54  alloc()..**.** T
1be10 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74  he alloca() rout
1be20 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e  ine never return
1be30 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69  s NULL.  This wi
1be40 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61  ll cause code pa
1be50 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c  ths.** that deal
1be60 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61   with sqlite3Sta
1be70 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72  ckAlloc() failur
1be80 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68  es to be unreach
1be90 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  able..*/.#ifdef 
1bea0 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43  SQLITE_USE_ALLOC
1beb0 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  A.# define sqlit
1bec0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
1bed0 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29  D,N)   alloca(N)
1bee0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1bef0 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
1bf00 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c  D,N)  memset(all
1bf10 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20  oca(N), 0, N).# 
1bf20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1bf30 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
1bf40 20 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69     .#else.# defi
1bf50 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1bf60 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73  llocRaw(D,N)   s
1bf70 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
1bf80 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  w(D,N).# define 
1bf90 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
1bfa0 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69  cZero(D,N)  sqli
1bfb0 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
1bfc0 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
1bfd0 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
1bfe0 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65  ,P)       sqlite
1bff0 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e  3DbFree(D,P).#en
1c000 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
1c010 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
1c020 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  3.const sqlite3_
1c030 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
1c040 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
1c050 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  3(void);.#endif.
1c060 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1c070 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e  ABLE_MEMSYS5.con
1c080 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
1c090 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
1c0a0 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69  emGetMemsys5(voi
1c0b0 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  d);.#endif...#if
1c0c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45  ndef SQLITE_MUTE
1c0d0 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33  X_OMIT.  sqlite3
1c0e0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
1c0f0 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66  onst *sqlite3Def
1c100 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b  aultMutex(void);
1c110 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1c120 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
1c130 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78  sqlite3NoopMutex
1c140 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
1c150 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
1c160 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b  MutexAlloc(int);
1c170 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
1c180 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20  texInit(void);. 
1c190 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
1c1a0 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64  xEnd(void);.#end
1c1b0 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  if..int sqlite3S
1c1c0 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b  tatusValue(int);
1c1d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
1c1e0 74 75 73 41 64 64 28 69 6e 74 2c 20 69 6e 74 29  tusAdd(int, int)
1c1f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
1c200 61 74 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74  atusSet(int, int
1c210 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
1c220 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
1c230 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c  _POINT.  int sql
1c240 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65  ite3IsNaN(double
1c250 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
1c260 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58  e sqlite3IsNaN(X
1c270 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  )  0.#endif..voi
1c280 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74  d sqlite3VXPrint
1c290 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 69 6e 74  f(StrAccum*, int
1c2a0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  , const char*, v
1c2b0 61 5f 6c 69 73 74 29 3b 0a 23 69 66 6e 64 65 66  a_list);.#ifndef
1c2c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
1c2d0 43 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58  CE.void sqlite3X
1c2e0 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
1c2f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
1c300 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 63 68 61 72  ..);.#endif.char
1c310 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66   *sqlite3MPrintf
1c320 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1c330 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61  char*, ...);.cha
1c340 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e  r *sqlite3VMPrin
1c350 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
1c360 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
1c370 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1c380 4d 41 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33  MAppendf(sqlite3
1c390 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  *,char*,const ch
1c3a0 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64 65  ar*,...);.#if de
1c3b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
1c3c0 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
1c3d0 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f  LITE_DEBUG).  vo
1c3e0 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  id sqlite3DebugP
1c3f0 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72  rintf(const char
1c400 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a  *, ...);.#endif.
1c410 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1c420 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20  TE_TEST).  void 
1c430 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74  *sqlite3TestText
1c440 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72  ToPtr(const char
1c450 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  *);.#endif../* O
1c460 75 74 70 75 74 20 66 6f 72 6d 61 74 74 69 6e 67  utput formatting
1c470 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 53 54   for SQLITE_TEST
1c480 43 54 52 4c 5f 45 58 50 4c 41 49 4e 20 2a 2f 0a  CTRL_EXPLAIN */.
1c490 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1c4a0 54 45 5f 45 4e 41 42 4c 45 5f 54 52 45 45 5f 45  TE_ENABLE_TREE_E
1c4b0 58 50 4c 41 49 4e 29 0a 20 20 76 6f 69 64 20 73  XPLAIN).  void s
1c4c0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42 65 67  qlite3ExplainBeg
1c4d0 69 6e 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  in(Vdbe*);.  voi
1c4e0 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1c4f0 50 72 69 6e 74 66 28 56 64 62 65 2a 2c 20 63 6f  Printf(Vdbe*, co
1c500 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
1c510 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
1c520 78 70 6c 61 69 6e 4e 4c 28 56 64 62 65 2a 29 3b  xplainNL(Vdbe*);
1c530 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
1c540 78 70 6c 61 69 6e 50 75 73 68 28 56 64 62 65 2a  xplainPush(Vdbe*
1c550 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1c560 33 45 78 70 6c 61 69 6e 50 6f 70 28 56 64 62 65  3ExplainPop(Vdbe
1c570 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1c580 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28  e3ExplainFinish(
1c590 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Vdbe*);.  void s
1c5a0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53 65 6c  qlite3ExplainSel
1c5b0 65 63 74 28 56 64 62 65 2a 2c 20 53 65 6c 65 63  ect(Vdbe*, Selec
1c5c0 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
1c5d0 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 28 56  te3ExplainExpr(V
1c5e0 64 62 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20  dbe*, Expr*);.  
1c5f0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
1c600 61 69 6e 45 78 70 72 4c 69 73 74 28 56 64 62 65  ainExprList(Vdbe
1c610 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20  *, ExprList*);. 
1c620 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c   const char *sql
1c630 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74  ite3VdbeExplanat
1c640 69 6f 6e 28 56 64 62 65 2a 29 3b 0a 23 65 6c 73  ion(Vdbe*);.#els
1c650 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1c660 65 33 45 78 70 6c 61 69 6e 42 65 67 69 6e 28 58  e3ExplainBegin(X
1c670 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1c680 65 33 45 78 70 6c 61 69 6e 53 65 6c 65 63 74 28  e3ExplainSelect(
1c690 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
1c6a0 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72  lite3ExplainExpr
1c6b0 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
1c6c0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70  qlite3ExplainExp
1c6d0 72 4c 69 73 74 28 41 2c 42 29 0a 23 20 64 65 66  rList(A,B).# def
1c6e0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
1c6f0 69 6e 46 69 6e 69 73 68 28 58 29 0a 23 20 64 65  inFinish(X).# de
1c700 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65  fine sqlite3Vdbe
1c710 45 78 70 6c 61 6e 61 74 69 6f 6e 28 58 29 20 30  Explanation(X) 0
1c720 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73  .#endif...void s
1c730 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
1c740 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33  char **, sqlite3
1c750 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
1c760 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
1c770 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65  e3ErrorMsg(Parse
1c780 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
1c790 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ...);.int sqlite
1c7a0 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b  3Dequote(char*);
1c7b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77  .int sqlite3Keyw
1c7c0 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e  ordCode(const un
1c7d0 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e  signed char*, in
1c7e0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
1c7f0 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c  unParser(Parse*,
1c800 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68   const char*, ch
1c810 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ar **);.void sql
1c820 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67  ite3FinishCoding
1c830 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
1c840 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28  lite3GetTempReg(
1c850 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1c860 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70  lite3ReleaseTemp
1c870 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  Reg(Parse*,int);
1c880 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
1c890 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
1c8a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1c8b0 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e  e3ReleaseTempRan
1c8c0 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e  ge(Parse*,int,in
1c8d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1c8e0 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68  ClearTempRegCach
1c8f0 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20  e(Parse*);.Expr 
1c900 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f  *sqlite3ExprAllo
1c910 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  c(sqlite3*,int,c
1c920 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29  onst Token*,int)
1c930 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
1c940 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  xpr(sqlite3*,int
1c950 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
1c960 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
1c970 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71  ttachSubtrees(sq
1c980 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70  lite3*,Expr*,Exp
1c990 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  r*,Expr*);.Expr 
1c9a0 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61  *sqlite3PExpr(Pa
1c9b0 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a  rse*, int, Expr*
1c9c0 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54  , Expr*, const T
1c9d0 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71  oken*);.Expr *sq
1c9e0 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c  lite3ExprAnd(sql
1c9f0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70  ite3*,Expr*, Exp
1ca00 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
1ca10 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50  e3ExprFunction(P
1ca20 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
1ca30 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
1ca40 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e  qlite3ExprAssign
1ca50 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a  VarNumber(Parse*
1ca60 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
1ca70 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65  qlite3ExprDelete
1ca80 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a  (sqlite3*, Expr*
1ca90 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
1caa0 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65  ite3ExprListAppe
1cab0 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  nd(Parse*,ExprLi
1cac0 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  st*,Expr*);.void
1cad0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
1cae0 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45  SetName(Parse*,E
1caf0 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c  xprList*,Token*,
1cb00 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1cb10 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61  e3ExprListSetSpa
1cb20 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
1cb30 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76  t*,ExprSpan*);.v
1cb40 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
1cb50 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
1cb60 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  3*, ExprList*);.
1cb70 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28  int sqlite3Init(
1cb80 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a  sqlite3*, char**
1cb90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
1cba0 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a  itCallback(void*
1cbb0 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63  , int, char**, c
1cbc0 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har**);.void sql
1cbd0 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65  ite3Pragma(Parse
1cbe0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
1cbf0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Token*,int);.voi
1cc00 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c  d sqlite3ResetAl
1cc10 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
1cc20 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a  tion(sqlite3*);.
1cc30 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65  void sqlite3Rese
1cc40 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74  tOneSchema(sqlit
1cc50 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
1cc60 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61  qlite3CollapseDa
1cc70 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69  tabaseArray(sqli
1cc80 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
1cc90 74 65 33 42 65 67 69 6e 50 61 72 73 65 28 50 61  te3BeginParse(Pa
1cca0 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
1ccb0 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74  sqlite3CommitInt
1ccc0 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c  ernalChanges(sql
1ccd0 69 74 65 33 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  ite3*);.Table *s
1cce0 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f  qlite3ResultSetO
1ccf0 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53  fSelect(Parse*,S
1cd00 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71  elect*);.void sq
1cd10 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54  lite3OpenMasterT
1cd20 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e  able(Parse *, in
1cd30 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1cd40 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65  StartTable(Parse
1cd50 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
1cd60 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  int,int,int,int)
1cd70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1cd80 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54  dColumn(Parse*,T
1cd90 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
1cda0 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50  ite3AddNotNull(P
1cdb0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
1cdc0 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d  d sqlite3AddPrim
1cdd0 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  aryKey(Parse*, E
1cde0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
1cdf0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1ce00 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f  qlite3AddCheckCo
1ce10 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
1ce20 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
1ce30 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79  lite3AddColumnTy
1ce40 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  pe(Parse*,Token*
1ce50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1ce60 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50  ddDefaultValue(P
1ce70 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29  arse*,ExprSpan*)
1ce80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1ce90 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72  dCollateType(Par
1cea0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
1ceb0 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62  id sqlite3EndTab
1cec0 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
1ced0 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 29  ,Token*,Select*)
1cee0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72  ;.int sqlite3Par
1cef0 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72  seUri(const char
1cf00 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e  *,const char*,un
1cf10 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20  signed int*,.   
1cf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf30 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63   sqlite3_vfs**,c
1cf40 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a  har**,char **);.
1cf50 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62  Btree *sqlite3Db
1cf60 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69  NameToBtree(sqli
1cf70 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1cf80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
1cf90 64 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b  deOnce(Parse *);
1cfa0 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65  ..Bitvec *sqlite
1cfb0 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33  3BitvecCreate(u3
1cfc0 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
1cfd0 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63  itvecTest(Bitvec
1cfe0 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
1cff0 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69  ite3BitvecSet(Bi
1d000 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69  tvec*, u32);.voi
1d010 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43  d sqlite3BitvecC
1d020 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33  lear(Bitvec*, u3
1d030 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  2, void*);.void 
1d040 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73  sqlite3BitvecDes
1d050 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75  troy(Bitvec*);.u
1d060 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  32 sqlite3Bitvec
1d070 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 69  Size(Bitvec*);.i
1d080 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
1d090 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c  BuiltinTest(int,
1d0a0 69 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65 74 20 2a  int*);..RowSet *
1d0b0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69  sqlite3RowSetIni
1d0c0 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  t(sqlite3*, void
1d0d0 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29  *, unsigned int)
1d0e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
1d0f0 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74  wSetClear(RowSet
1d100 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d110 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77  RowSetInsert(Row
1d120 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20  Set*, i64);.int 
1d130 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
1d140 74 28 52 6f 77 53 65 74 2a 2c 20 75 38 20 69 42  t(RowSet*, u8 iB
1d150 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20  atch, i64);.int 
1d160 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
1d170 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29  t(RowSet*, i64*)
1d180 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  ;..void sqlite3C
1d190 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a  reateView(Parse*
1d1a0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
1d1b0 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  oken*,Select*,in
1d1c0 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  t,int);..#if !de
1d1d0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1d1e0 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69  T_VIEW) || !defi
1d1f0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1d200 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20  VIRTUALTABLE).  
1d210 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47  int sqlite3ViewG
1d220 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61  etColumnNames(Pa
1d230 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  rse*,Table*);.#e
1d240 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1d250 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
1d260 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65  nNames(A,B) 0.#e
1d270 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
1d280 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  e3DropTable(Pars
1d290 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
1d2a0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1d2b0 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62  lite3CodeDropTab
1d2c0 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  le(Parse*, Table
1d2d0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
1d2e0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
1d2f0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
1d300 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Table*);.#ifndef
1d310 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
1d320 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69  OINCREMENT.  voi
1d330 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
1d340 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73  rementBegin(Pars
1d350 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f  e *pParse);.  vo
1d360 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
1d370 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65  crementEnd(Parse
1d380 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65   *pParse);.#else
1d390 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1d3a0 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
1d3b0 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
1d3c0 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
1d3d0 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69  mentEnd(X).#endi
1d3e0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  f.int sqlite3Cod
1d3f0 65 43 6f 72 6f 75 74 69 6e 65 28 50 61 72 73 65  eCoroutine(Parse
1d400 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65  *, Select*, Sele
1d410 63 74 44 65 73 74 2a 29 3b 0a 76 6f 69 64 20 73  ctDest*);.void s
1d420 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72  qlite3Insert(Par
1d430 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
1d440 78 70 72 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74  xprList*, Select
1d450 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29  *, IdList*, int)
1d460 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41  ;.void *sqlite3A
1d470 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c  rrayAllocate(sql
1d480 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c  ite3*,void*,int,
1d490 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69  int*,int*);.IdLi
1d4a0 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
1d4b0 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
1d4c0 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  , IdList*, Token
1d4d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
1d4e0 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73  dListIndex(IdLis
1d4f0 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
1d500 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
1d510 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28  3SrcListEnlarge(
1d520 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
1d530 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53  t*, int, int);.S
1d540 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
1d550 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  rcListAppend(sql
1d560 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
1d570 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
1d580 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
1d590 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46  e3SrcListAppendF
1d5a0 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20  romTerm(Parse*, 
1d5b0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
1d5c0 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  , Token*,.      
1d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5f0 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c  Token*, Select*,
1d600 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29   Expr*, IdList*)
1d610 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
1d620 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50  cListIndexedBy(P
1d630 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
1d640 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74  *, Token *);.int
1d650 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42   sqlite3IndexedB
1d660 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c  yLookup(Parse *,
1d670 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
1d680 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71  item *);.void sq
1d690 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
1d6a0 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73  tJoinType(SrcLis
1d6b0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1d6c0 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75  3SrcListAssignCu
1d6d0 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72  rsors(Parse*, Sr
1d6e0 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
1d6f0 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74  lite3IdListDelet
1d700 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  e(sqlite3*, IdLi
1d710 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
1d720 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28  e3SrcListDelete(
1d730 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
1d740 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  t*);.Index *sqli
1d750 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
1d760 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
1d770 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
1d780 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
1d790 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1d7a0 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e             Token
1d7b0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
1d7c0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
1d7d0 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
1d7e0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
1d7f0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61  sqlite3Select(Pa
1d800 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53  rse*, Select*, S
1d810 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c  electDest*);.Sel
1d820 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
1d830 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70  ctNew(Parse*,Exp
1d840 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
1d850 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
1d860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d870 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
1d880 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78  ExprList*,u16,Ex
1d890 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  pr*,Expr*);.void
1d8a0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
1d8b0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
1d8c0 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
1d8d0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f  sqlite3SrcListLo
1d8e0 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63  okup(Parse*, Src
1d8f0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1d900 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61  te3IsReadOnly(Pa
1d910 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
1d920 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1d930 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a  OpenTable(Parse*
1d940 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20  , int iCur, int 
1d950 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  iDb, Table*, int
1d960 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
1d970 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
1d980 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
1d990 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
1d9a0 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45  LITE_OMIT_SUBQUE
1d9b0 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  RY).Expr *sqlite
1d9c0 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73  3LimitWhere(Pars
1d9d0 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
1d9e0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
1d9f0 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a  *,Expr*,char*);.
1da00 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
1da10 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61  te3DeleteFrom(Pa
1da20 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1da30 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
1da40 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65  ite3Update(Parse
1da50 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
1da60 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69  rList*, Expr*, i
1da70 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a  nt);.WhereInfo *
1da80 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
1da90 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  n(Parse*,SrcList
1daa0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
1dab0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
1dac0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1dad0 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65  e3WhereEnd(Where
1dae0 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69  Info*);.u64 sqli
1daf0 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f  te3WhereOutputRo
1db00 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f  wCount(WhereInfo
1db10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1db20 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57  hereIsDistinct(W
1db30 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
1db40 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72  sqlite3WhereIsOr
1db50 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  dered(WhereInfo*
1db60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
1db70 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c  ereContinueLabel
1db80 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
1db90 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72  t sqlite3WhereBr
1dba0 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e  eakLabel(WhereIn
1dbb0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
1dbc0 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28  3WhereOkOnePass(
1dbd0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
1dbe0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1dbf0 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  GetColumn(Parse*
1dc00 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1dc10 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
1dc20 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
1dc30 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62  deGetColumnOfTab
1dc40 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  le(Vdbe*, Table*
1dc50 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1dc60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1dc70 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65  prCodeMove(Parse
1dc80 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1dc90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1dca0 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61  xprCacheStore(Pa
1dcb0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
1dcc0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1dcd0 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28  e3ExprCachePush(
1dce0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1dcf0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f  lite3ExprCachePo
1dd00 70 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  p(Parse*, int);.
1dd10 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1dd20 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73  CacheRemove(Pars
1dd30 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
1dd40 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1dd50 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a  acheClear(Parse*
1dd60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1dd70 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79  xprCacheAffinity
1dd80 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69  Change(Parse*, i
1dd90 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1dda0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
1ddb0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1ddc0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1ddd0 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
1dde0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
1ddf0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1de00 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
1de10 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
1de20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1de30 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
1de40 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
1de50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1de60 72 43 6f 64 65 43 6f 6e 73 74 61 6e 74 73 28 50  rCodeConstants(P
1de70 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  arse*, Expr*);.i
1de80 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1de90 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  deExprList(Parse
1dea0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
1deb0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1dec0 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
1ded0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
1dee0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1def0 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
1df00 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
1df10 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c   int, int);.Tabl
1df20 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61  e *sqlite3FindTa
1df30 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ble(sqlite3*,con
1df40 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
1df50 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
1df60 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
1df70 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56  e(Parse*,int isV
1df80 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  iew,const char*,
1df90 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
1dfa0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
1dfb0 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72  ateTableItem(Par
1dfc0 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73  se*,int isView,s
1dfd0 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
1dfe0 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  em *);.Index *sq
1dff0 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73  lite3FindIndex(s
1e000 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1e010 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
1e020 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
1e030 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
1e040 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ble(sqlite3*,int
1e050 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
1e060 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
1e070 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
1e080 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
1e090 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
1e0a0 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61  sqlite3Vacuum(Pa
1e0b0 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
1e0c0 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72  e3RunVacuum(char
1e0d0 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  **, sqlite3*);.c
1e0e0 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65  har *sqlite3Name
1e0f0 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65  FromToken(sqlite
1e100 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
1e110 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
1e120 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  are(Expr*, Expr*
1e130 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1e140 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78  prListCompare(Ex
1e150 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  prList*, ExprLis
1e160 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1e170 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
1e180 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
1e190 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
1e1a0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
1e1b0 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
1e1c0 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
1e1d0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1e1e0 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
1e1f0 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
1e200 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
1e210 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
1e220 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e230 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f  PrngSaveState(vo
1e240 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1e250 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
1e260 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
1e270 6c 69 74 65 33 50 72 6e 67 52 65 73 65 74 53 74  lite3PrngResetSt
1e280 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
1e290 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
1e2a0 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ll(sqlite3*,int)
1e2b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1e2c0 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50  deVerifySchema(P
1e2d0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
1e2e0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
1e2f0 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50  ifyNamedSchema(P
1e300 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
1e310 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71  r *zDb);.void sq
1e320 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61  lite3BeginTransa
1e330 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ction(Parse*, in
1e340 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e350 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f  CommitTransactio
1e360 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
1e370 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54  sqlite3RollbackT
1e380 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
1e390 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e3a0 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
1e3b0 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
1e3c0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
1e3d0 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
1e3e0 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
1e3f0 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
1e400 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
1e410 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
1e420 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
1e430 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t(Expr*);.int sq
1e440 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
1e450 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a  antNotJoin(Expr*
1e460 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1e470 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75  prIsConstantOrFu
1e480 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69  nction(Expr*);.i
1e490 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
1e4a0 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
1e4b0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
1e4c0 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
1e4d0 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f 69  onst Expr*);.voi
1e4e0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
1e4f0 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62 65  eIsNullJump(Vdbe
1e500 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  *, const Expr*, 
1e510 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
1e520 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e  qlite3ExprNeedsN
1e530 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  oAffinityChange(
1e540 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61  const Expr*, cha
1e550 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  r);.int sqlite3I
1e560 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61  sRowid(const cha
1e570 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1e580 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65  3GenerateRowDele
1e590 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
1e5a0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1e5b0 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
1e5c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
1e5d0 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
1e5e0 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
1e5f0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 29  ble*, int, int*)
1e600 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e  ;.int sqlite3Gen
1e610 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61  erateIndexKey(Pa
1e620 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
1e630 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
1e640 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
1e650 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
1e660 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
1e670 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20  ,int,int,.      
1e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1e6a0 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  nt*,int,int,int,
1e6b0 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20  int,int*);.void 
1e6c0 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49  sqlite3CompleteI
1e6d0 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsertion(Parse*,
1e6e0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1e6f0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20 69 6e  t, int*, int, in
1e700 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
1e710 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
1e720 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
1e730 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1e740 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1e750 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
1e760 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  on(Parse*, int, 
1e770 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e780 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72  e3MultiWrite(Par
1e790 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
1e7a0 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65  e3MayAbort(Parse
1e7b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e7c0 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50  HaltConstraint(P
1e7d0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
1e7e0 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 45 78   char*, int);.Ex
1e7f0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44  pr *sqlite3ExprD
1e800 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
1e810 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74  *,int);.ExprList
1e820 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
1e830 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  tDup(sqlite3*,Ex
1e840 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72  prList*,int);.Sr
1e850 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
1e860 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  cListDup(sqlite3
1e870 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b  *,SrcList*,int);
1e880 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
1e890 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  IdListDup(sqlite
1e8a0 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c  3*,IdList*);.Sel
1e8b0 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
1e8c0 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  ctDup(sqlite3*,S
1e8d0 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69  elect*,int);.voi
1e8e0 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66  d sqlite3FuncDef
1e8f0 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48 61  Insert(FuncDefHa
1e900 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a  sh*, FuncDef*);.
1e910 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
1e920 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  FindFunction(sql
1e930 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1e940 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29  *,int,int,u8,u8)
1e950 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1e960 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e  gisterBuiltinFun
1e970 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  ctions(sqlite3*)
1e980 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1e990 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75  gisterDateTimeFu
1e9a0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
1e9b0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
1e9c0 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f  terGlobalFunctio
1e9d0 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ns(void);.int sq
1e9e0 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
1e9f0 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  Ok(sqlite3*);.in
1ea00 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
1ea10 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c  heckSickOrOk(sql
1ea20 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
1ea30 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65  ite3ChangeCookie
1ea40 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a  (Parse*, int);..
1ea50 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1ea60 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26  ITE_OMIT_VIEW) &
1ea70 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
1ea80 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
1ea90 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65  void sqlite3Mate
1eaa0 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73  rializeView(Pars
1eab0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
1eac0 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  *, int);.#endif.
1ead0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1eae0 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76  OMIT_TRIGGER.  v
1eaf0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
1eb00 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
1eb10 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
1eb20 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72  t,int,IdList*,Sr
1eb30 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  cList*,.        
1eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb50 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e     Expr*,int, in
1eb60 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
1eb70 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28  e3FinishTrigger(
1eb80 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53  Parse*, TriggerS
1eb90 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20  tep*, Token*);. 
1eba0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
1ebb0 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  pTrigger(Parse*,
1ebc0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
1ebd0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
1ebe0 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61  ropTriggerPtr(Pa
1ebf0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  rse*, Trigger*);
1ec00 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
1ec10 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
1ec20 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a  (Parse *, Table*
1ec30 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
1ec40 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20  , int *pMask);. 
1ec50 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
1ec60 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72  3TriggerList(Par
1ec70 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  se *, Table *);.
1ec80 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
1ec90 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72  deRowTrigger(Par
1eca0 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  se*, Trigger *, 
1ecb0 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
1ecc0 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20  int, Table *,.  
1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ece0 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69            int, i
1ecf0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
1ed00 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
1ed10 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72  riggerDirect(Par
1ed20 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  se *, Trigger *,
1ed30 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
1ed40 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
1ed50 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67   sqliteViewTrigg
1ed60 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ers(Parse*, Tabl
1ed70 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
1ed80 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f  ExprList*);.  vo
1ed90 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
1eda0 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69  TriggerStep(sqli
1edb0 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65  te3*, TriggerSte
1edc0 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  p*);.  TriggerSt
1edd0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
1ede0 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c  erSelectStep(sql
1edf0 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  ite3*,Select*);.
1ee00 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
1ee10 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73  qlite3TriggerIns
1ee20 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ertStep(sqlite3*
1ee30 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a  ,Token*, IdList*
1ee40 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee60 20 20 20 20 20 20 20 20 20 20 45 78 70 72 4c 69            ExprLi
1ee70 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 75 38 29 3b  st*,Select*,u8);
1ee80 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1ee90 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70  sqlite3TriggerUp
1eea0 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  dateStep(sqlite3
1eeb0 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
1eec0 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  t*, Expr*, u8);.
1eed0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
1eee0 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c  qlite3TriggerDel
1eef0 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  eteStep(sqlite3*
1ef00 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b  ,Token*, Expr*);
1ef10 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
1ef20 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
1ef30 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29  ite3*, Trigger*)
1ef40 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1ef50 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
1ef60 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
1ef70 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
1ef80 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54  ;.  u32 sqlite3T
1ef90 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61  riggerColmask(Pa
1efa0 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78  rse*,Trigger*,Ex
1efb0 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c  prList*,int,int,
1efc0 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64  Table*,int);.# d
1efd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
1efe0 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  seToplevel(p) ((
1eff0 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20  p)->pToplevel ? 
1f000 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a  (p)->pToplevel :
1f010 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64 65   (p)).#else.# de
1f020 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
1f030 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c  gersExist(B,C,D,
1f040 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20  E,F) 0.# define 
1f050 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
1f060 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69  gger(A,B).# defi
1f070 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  ne sqlite3DropTr
1f080 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20  iggerPtr(A,B).# 
1f090 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e  define sqlite3Un
1f0a0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
1f0b0 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65  gger(A,B,C).# de
1f0c0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
1f0d0 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43  RowTrigger(A,B,C
1f0e0 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20  ,D,E,F,G,H,I).# 
1f0f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
1f100 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
1f110 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a  ct(A,B,C,D,E,F).
1f120 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1f130 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59  TriggerList(X, Y
1f140 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
1f150 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
1f160 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20  l(p) p.# define 
1f170 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
1f180 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c  lmask(A,B,C,D,E,
1f190 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69  F,G) 0.#endif..i
1f1a0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79  nt sqlite3JoinTy
1f1b0 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
1f1c0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
1f1d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f1e0 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79  CreateForeignKey
1f1f0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
1f200 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  t*, Token*, Expr
1f210 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
1f220 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f  d sqlite3DeferFo
1f230 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
1f240 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53   int);.#ifndef S
1f250 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
1f260 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  RIZATION.  void 
1f270 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
1f280 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68  Parse*,Expr*,Sch
1f290 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a  ema*,SrcList*);.
1f2a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
1f2b0 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e  hCheck(Parse*,in
1f2c0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
1f2d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
1f2e0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
1f2f0 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
1f300 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c  textPush(Parse*,
1f310 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63   AuthContext*, c
1f320 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
1f330 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
1f340 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f  ontextPop(AuthCo
1f350 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73  ntext*);.  int s
1f360 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f  qlite3AuthReadCo
1f370 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  l(Parse*, const 
1f380 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68  char *, const ch
1f390 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  ar *, int);.#els
1f3a0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1f3b0 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63  e3AuthRead(a,b,c
1f3c0 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,d).# define sql
1f3d0 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c  ite3AuthCheck(a,
1f3e0 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49  b,c,d,e)    SQLI
1f3f0 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73  TE_OK.# define s
1f400 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
1f410 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64  tPush(a,b,c).# d
1f420 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
1f430 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20  hContextPop(a)  
1f440 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64  ((void)(a)).#end
1f450 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
1f460 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  ttach(Parse*, Ex
1f470 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  pr*, Expr*, Expr
1f480 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f490 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Detach(Parse*, E
1f4a0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
1f4b0 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65  e3FixInit(DbFixe
1f4c0 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c  r*, Parse*, int,
1f4d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
1f4e0 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  nst Token*);.int
1f4f0 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69   sqlite3FixSrcLi
1f500 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63  st(DbFixer*, Src
1f510 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1f520 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46  te3FixSelect(DbF
1f530 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ixer*, Select*);
1f540 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
1f550 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78  xpr(DbFixer*, Ex
1f560 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1f570 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46  3FixExprList(DbF
1f580 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ixer*, ExprList*
1f590 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
1f5a0 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46  xTriggerStep(DbF
1f5b0 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74  ixer*, TriggerSt
1f5c0 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ep*);.int sqlite
1f5d0 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72  3AtoF(const char
1f5e0 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e   *z, double*, in
1f5f0 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
1f600 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73  te3GetInt32(cons
1f610 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b  t char *, int*);
1f620 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
1f630 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  (const char*);.i
1f640 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42  nt sqlite3Utf16B
1f650 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69  yteLen(const voi
1f660 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43  d *pData, int nC
1f670 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
1f680 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e  3Utf8CharLen(con
1f690 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20  st char *pData, 
1f6a0 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20  int nByte);.u32 
1f6b0 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28  sqlite3Utf8Read(
1f6c0 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 0a 2f 2a  const u8**);../*
1f6d0 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20  .** Routines to 
1f6e0 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76  read and write v
1f6f0 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
1f700 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20  ntegers.  These 
1f710 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65  used to.** be de
1f720 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62  fined locally, b
1f730 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68  ut now we use th
1f740 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65  e varint routine
1f750 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a  s in the util.c.
1f760 2a 2a 20 66 69 6c 65 2e 20 20 43 6f 64 65 20 73  ** file.  Code s
1f770 68 6f 75 6c 64 20 75 73 65 20 74 68 65 20 4d 41  hould use the MA
1f780 43 52 4f 20 66 6f 72 6d 73 20 62 65 6c 6f 77 2c  CRO forms below,
1f790 20 61 73 20 74 68 65 20 56 61 72 69 6e 74 33 32   as the Varint32
1f7a0 20 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 61 72 65   versions.** are
1f7b0 20 63 6f 64 65 64 20 74 6f 20 61 73 73 75 6d 65   coded to assume
1f7c0 20 74 68 65 20 73 69 6e 67 6c 65 20 62 79 74 65   the single byte
1f7d0 20 63 61 73 65 20 69 73 20 61 6c 72 65 61 64 79   case is already
1f7e0 20 68 61 6e 64 6c 65 64 20 28 77 68 69 63 68 20   handled (which 
1f7f0 0a 2a 2a 20 74 68 65 20 4d 41 43 52 4f 20 66 6f  .** the MACRO fo
1f800 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69 6e 74  rm does)..*/.int
1f810 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
1f820 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t(unsigned char*
1f830 2c 20 75 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , u64);.int sqli
1f840 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 75  te3PutVarint32(u
1f850 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75  nsigned char*, u
1f860 33 32 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47  32);.u8 sqlite3G
1f870 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75  etVarint(const u
1f880 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
1f890 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74  u64 *);.u8 sqlit
1f8a0 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f  e3GetVarint32(co
1f8b0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
1f8c0 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74  r *, u32 *);.int
1f8d0 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
1f8e0 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a  n(u64 v);../*.**
1f8f0 20 54 68 65 20 68 65 61 64 65 72 20 6f 66 20 61   The header of a
1f900 20 72 65 63 6f 72 64 20 63 6f 6e 73 69 73 74 73   record consists
1f910 20 6f 66 20 61 20 73 65 71 75 65 6e 63 65 20 76   of a sequence v
1f920 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
1f930 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73  ntegers..** Thes
1f940 65 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 61  e integers are a
1f950 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 73 6d 61  lmost always sma
1f960 6c 6c 20 61 6e 64 20 61 72 65 20 65 6e 63 6f 64  ll and are encod
1f970 65 64 20 61 73 20 61 20 73 69 6e 67 6c 65 20 62  ed as a single b
1f980 79 74 65 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  yte..** The foll
1f990 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 74 61 6b  owing macros tak
1f9a0 65 20 61 64 76 61 6e 74 61 67 65 20 74 68 69 73  e advantage this
1f9b0 20 66 61 63 74 20 74 6f 20 70 72 6f 76 69 64 65   fact to provide
1f9c0 20 61 20 66 61 73 74 20 65 6e 63 6f 64 65 0a 2a   a fast encode.*
1f9d0 2a 20 61 6e 64 20 64 65 63 6f 64 65 20 6f 66 20  * and decode of 
1f9e0 74 68 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20  the integers in 
1f9f0 61 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 2e  a record header.
1fa00 20 20 49 74 20 69 73 20 66 61 73 74 65 72 20 66    It is faster f
1fa10 6f 72 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a  or the common.**
1fa20 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20   case where the 
1fa30 69 6e 74 65 67 65 72 20 69 73 20 61 20 73 69 6e  integer is a sin
1fa40 67 6c 65 20 62 79 74 65 2e 20 20 49 74 20 69 73  gle byte.  It is
1fa50 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77 65 72   a little slower
1fa60 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 69 6e 74   when the.** int
1fa70 65 67 65 72 20 69 73 20 74 77 6f 20 6f 72 20 6d  eger is two or m
1fa80 6f 72 65 20 62 79 74 65 73 2e 20 20 42 75 74 20  ore bytes.  But 
1fa90 6f 76 65 72 61 6c 6c 20 69 74 20 69 73 20 66 61  overall it is fa
1faa0 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ster..**.** The 
1fab0 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65 73  following expres
1fac0 73 69 6f 6e 73 20 61 72 65 20 65 71 75 69 76 61  sions are equiva
1fad0 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  lent:.**.**     
1fae0 78 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61  x = sqlite3GetVa
1faf0 72 69 6e 74 33 32 28 20 41 2c 20 26 42 20 29 3b  rint32( A, &B );
1fb00 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c 69  .**     x = sqli
1fb10 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 20  te3PutVarint32( 
1fb20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 20 20  A, B );.**.**   
1fb30 20 20 78 20 3d 20 67 65 74 56 61 72 69 6e 74 33    x = getVarint3
1fb40 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 20 20 20  2( A, B );.**   
1fb50 20 20 78 20 3d 20 70 75 74 56 61 72 69 6e 74 33    x = putVarint3
1fb60 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2f  2( A, B );.**.*/
1fb70 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
1fb80 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
1fb90 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78  u8)((*(A)<(u8)0x
1fba0 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28  80)?((B)=(u32)*(
1fbb0 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74  A)),1:sqlite3Get
1fbc0 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33  Varint32((A),(u3
1fbd0 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69  2 *)&(B))).#defi
1fbe0 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41  ne putVarint32(A
1fbf0 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28  ,B)  \.  (u8)(((
1fc00 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38  u32)(B)<(u32)0x8
1fc10 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e  0)?(*(A)=(unsign
1fc20 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c  ed char)(B)),1:\
1fc30 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  .  sqlite3PutVar
1fc40 69 6e 74 33 32 28 28 41 29 2c 28 42 29 29 29 0a  int32((A),(B))).
1fc50 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
1fc60 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56  t    sqlite3GetV
1fc70 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75  arint.#define pu
1fc80 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
1fc90 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f  e3PutVarint...co
1fca0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
1fcb0 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
1fcc0 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20  r(Vdbe *, Index 
1fcd0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1fce0 54 61 62 6c 65 41 66 66 69 6e 69 74 79 53 74 72  TableAffinityStr
1fcf0 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a  (Vdbe *, Table *
1fd00 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43  );.char sqlite3C
1fd10 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45  ompareAffinity(E
1fd20 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
1fd30 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69   aff2);.int sqli
1fd40 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
1fd50 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  Ok(Expr *pExpr, 
1fd60 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74  char idx_affinit
1fd70 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  y);.char sqlite3
1fd80 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70  ExprAffinity(Exp
1fd90 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
1fda0 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e  qlite3Atoi64(con
1fdb0 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20  st char*, i64*, 
1fdc0 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
1fdd0 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69  qlite3Error(sqli
1fde0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
1fdf0 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69   char*,...);.voi
1fe00 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
1fe10 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  lob(sqlite3*, co
1fe20 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
1fe30 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48   n);.u8 sqlite3H
1fe40 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a  exToInt(int h);.
1fe50 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61  int sqlite3TwoPa
1fe60 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  rtName(Parse *, 
1fe70 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
1fe80 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69  , Token **);..#i
1fe90 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
1fea0 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
1feb0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
1fec0 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  || \.    defined
1fed0 28 53 51 4c 49 54 45 5f 44 45 42 55 47 5f 4f 53  (SQLITE_DEBUG_OS
1fee0 5f 54 52 41 43 45 29 0a 63 6f 6e 73 74 20 63 68  _TRACE).const ch
1fef0 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61  ar *sqlite3ErrNa
1ff00 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  me(int);.#endif.
1ff10 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
1ff20 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
1ff30 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
1ff40 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
1ff50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
1ff60 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
1ff70 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
1ff80 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
1ff90 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  int);.CollSeq *s
1ffa0 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c  qlite3LocateColl
1ffb0 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
1ffc0 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e  e, const char*zN
1ffd0 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ame);.CollSeq *s
1ffe0 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
1fff0 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
20000 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45   Expr *pExpr);.E
20010 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
20020 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28  AddCollateToken(
20030 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
20040 78 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 45  xpr*, Token*);.E
20050 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
20060 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67  AddCollateString
20070 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
20080 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72  nst char*);.Expr
20090 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69   *sqlite3ExprSki
200a0 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b  pCollate(Expr*);
200b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
200c0 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
200d0 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
200e0 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
200f0 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
20100 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
20110 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
20120 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
20130 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  te3 *, int);.int
20140 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
20150 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
20160 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
20170 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
20180 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69  qlite3MulInt64(i
20190 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
201a0 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e  lite3AbsInt32(in
201b0 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
201c0 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
201d0 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  ES.void sqlite3F
201e0 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74  ileSuffix3(const
201f0 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a   char*, char*);.
20200 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
20210 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
20220 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38  3(X,Y).#endif.u8
20230 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
20240 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  an(const char *z
20250 2c 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  ,int);..const vo
20260 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
20270 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
20280 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
20290 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
202a0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
202b0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
202c0 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
202d0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
202e0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
202f0 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  8, .            
20300 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
20310 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
20320 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  d sqlite3ValueFr
20330 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ee(sqlite3_value
20340 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  *);.sqlite3_valu
20350 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
20360 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63  ew(sqlite3 *);.c
20370 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
20380 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
20390 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
203a0 2c 20 75 38 29 3b 0a 23 69 66 64 65 66 20 53 51  , u8);.#ifdef SQ
203b0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
203c0 33 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  3.char *sqlite3U
203d0 74 66 38 74 6f 31 36 28 73 71 6c 69 74 65 33 20  tf8to16(sqlite3 
203e0 2a 2c 20 75 38 2c 20 63 68 61 72 20 2a 2c 20 69  *, u8, char *, i
203f0 6e 74 2c 20 69 6e 74 20 2a 29 3b 0a 23 65 6e 64  nt, int *);.#end
20400 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  if.int sqlite3Va
20410 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69  lueFromExpr(sqli
20420 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  te3 *, Expr *, u
20430 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  8, u8, sqlite3_v
20440 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  alue **);.void s
20450 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
20460 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
20470 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38  _value *, u8, u8
20480 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
20490 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65  E_AMALGAMATION.e
204a0 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
204b0 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
204c0 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
204d0 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
204e0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
204f0 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
20500 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  r[];.extern cons
20510 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
20520 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
20530 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
20540 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74  Token sqlite3Int
20550 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e  Tokens[];.extern
20560 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75   SQLITE_WSD stru
20570 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
20580 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a   sqlite3Config;.
20590 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
205a0 44 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71  D FuncDefHash sq
205b0 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74  lite3GlobalFunct
205c0 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51  ions;.#ifndef SQ
205d0 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78  LITE_OMIT_WSD.ex
205e0 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
205f0 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e  PendingByte;.#en
20600 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  dif.#endif.void 
20610 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
20620 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69  oved(sqlite3*, i
20630 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
20640 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64  oid sqlite3Reind
20650 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ex(Parse*, Token
20660 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
20670 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e   sqlite3AlterFun
20680 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
20690 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52  id sqlite3AlterR
206a0 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65  enameTable(Parse
206b0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
206c0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
206d0 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20  3GetToken(const 
206e0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
206f0 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71   int *);.void sq
20700 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65  lite3NestedParse
20710 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
20720 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
20730 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
20740 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
20750 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
20760 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65  sqlite3CodeSubse
20770 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78  lect(Parse *, Ex
20780 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  pr *, int, int);
20790 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
207a0 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20  ectPrep(Parse*, 
207b0 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
207c0 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  text*);.int sqli
207d0 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65  te3MatchSpanName
207e0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  (const char*, co
207f0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
20800 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
20810 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
20820 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65  3ResolveExprName
20830 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
20840 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
20850 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63  ite3ResolveSelec
20860 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53  tNames(Parse*, S
20870 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
20880 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ext*);.int sqlit
20890 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72  e3ResolveOrderGr
208a0 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65  oupBy(Parse*, Se
208b0 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lect*, ExprList*
208c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
208d0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
208e0 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a  mnDefault(Vdbe *
208f0 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
20900 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20910 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64  e3AlterFinishAdd
20920 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
20930 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
20940 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e  qlite3AlterBegin
20950 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
20960 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43  *, SrcList *);.C
20970 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47  ollSeq *sqlite3G
20980 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a  etCollSeq(Parse*
20990 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c  , u8, CollSeq *,
209a0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63   const char*);.c
209b0 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e  har sqlite3Affin
209c0 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68  ityType(const ch
209d0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
209e0 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a  e3Analyze(Parse*
209f0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
20a00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
20a10 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28  vokeBusyHandler(
20a20 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69  BusyHandler*);.i
20a30 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
20a40 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
20a50 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
20a60 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65  indDbName(sqlite
20a70 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
20a80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
20a90 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69  nalysisLoad(sqli
20aa0 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76  te3*,int iDB);.v
20ab0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
20ac0 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71  eIndexSamples(sq
20ad0 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a  lite3*,Index*);.
20ae0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61  void sqlite3Defa
20af0 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a  ultRowEst(Index*
20b00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
20b10 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74  egisterLikeFunct
20b20 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ions(sqlite3*, i
20b30 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
20b40 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73  IsLikeFunction(s
20b50 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
20b60 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  t*,char*);.void 
20b70 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69  sqlite3MinimumFi
20b80 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c  leFormat(Parse*,
20b90 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
20ba0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
20bb0 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68  ear(void *);.Sch
20bc0 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65  ema *sqlite3Sche
20bd0 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c  maGet(sqlite3 *,
20be0 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73   Btree *);.int s
20bf0 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e  qlite3SchemaToIn
20c00 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  dex(sqlite3 *db,
20c10 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49   Schema *);.KeyI
20c20 6e 66 6f 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  nfo *sqlite3Inde
20c30 78 4b 65 79 69 6e 66 6f 28 50 61 72 73 65 20 2a  xKeyinfo(Parse *
20c40 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 69 6e 74 20  , Index *);.int 
20c50 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
20c60 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  c(sqlite3 *, con
20c70 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20  st char *, int, 
20c80 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20  int, void *, .  
20c90 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
20ca0 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
20cb0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
20cc0 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
20cd0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
20ce0 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
20cf0 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  *), void (*)(sql
20d00 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
20d10 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
20d20 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b   *pDestructor.);
20d30 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45  .int sqlite3ApiE
20d40 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  xit(sqlite3 *db,
20d50 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
20d60 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
20d70 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f  se(Parse *);..vo
20d80 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
20d90 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a  umInit(StrAccum*
20da0 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e  , char*, int, in
20db0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
20dc0 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53  StrAccumAppend(S
20dd0 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
20de0 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  har*,int);.void 
20df0 73 71 6c 69 74 65 33 41 70 70 65 6e 64 53 70 61  sqlite3AppendSpa
20e00 63 65 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74  ce(StrAccum*,int
20e10 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
20e20 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53  StrAccumFinish(S
20e30 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
20e40 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52  sqlite3StrAccumR
20e50 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b  eset(StrAccum*);
20e60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
20e70 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65  ectDestInit(Sele
20e80 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29  ctDest*,int,int)
20e90 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43  ;.Expr *sqlite3C
20ea0 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28  reateColumnExpr(
20eb0 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69  sqlite3 *, SrcLi
20ec0 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  st *, int, int);
20ed0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ..void sqlite3Ba
20ee0 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69  ckupRestart(sqli
20ef0 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76  te3_backup *);.v
20f00 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
20f10 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f  pUpdate(sqlite3_
20f20 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20  backup *, Pgno, 
20f30 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 2f 2a  const u8 *);../*
20f40 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
20f50 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67  e to the LEMON-g
20f60 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a  enerated parser.
20f70 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
20f80 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64  ParserAlloc(void
20f90 2a 28 2a 29 28 73 69 7a 65 5f 74 29 29 3b 0a 76  *(*)(size_t));.v
20fa0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
20fb0 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69  rFree(void*, voi
20fc0 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
20fd0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
20fe0 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b  (void*, int, Tok
20ff0 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66  en, Parse*);.#if
21000 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54  def YYTRACKMAXST
21010 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73  ACKDEPTH.  int s
21020 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63  qlite3ParserStac
21030 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65  kPeak(void*);.#e
21040 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
21050 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73  e3AutoLoadExtens
21060 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
21070 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21080 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
21090 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
210a0 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
210b0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73  (sqlite3*);.#els
210c0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
210d0 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
210e0 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  s(X).#endif..#if
210f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
21100 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
21110 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
21120 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69  eLock(Parse *, i
21130 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e  nt, int, u8, con
21140 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73  st char *);.#els
21150 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
21160 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77  te3TableLock(v,w
21170 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a  ,x,y,z).#endif..
21180 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
21190 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ST.  int sqlite3
211a0 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64  Utf8To8(unsigned
211b0 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
211c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
211d0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
211e0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
211f0 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23  e3VtabClear(Y).#
21200 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
21210 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51  VtabSync(X,Y) SQ
21220 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
21230 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  e sqlite3VtabRol
21240 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69  lback(X).#  defi
21250 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  ne sqlite3VtabCo
21260 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e  mmit(X).#  defin
21270 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
21280 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66  ync(db) 0.#  def
21290 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ine sqlite3VtabL
212a0 6f 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e  ock(X) .#  defin
212b0 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
212c0 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
212d0 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
212e0 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66  ckList(X).#  def
212f0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
21300 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a  avepoint(X, Y, Z
21310 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
21320 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74  efine sqlite3Get
21330 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56  VTable(X,Y)  ((V
21340 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a  Table*)0).#else.
21350 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
21360 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33  tabClear(sqlite3
21370 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20   *db, Table*);. 
21380 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
21390 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c  abDisconnect(sql
213a0 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20  ite3 *db, Table 
213b0 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  *p);.   int sqli
213c0 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69  te3VtabSync(sqli
213d0 74 65 33 20 2a 64 62 2c 20 63 68 61 72 20 2a 2a  te3 *db, char **
213e0 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
213f0 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71  3VtabRollback(sq
21400 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69  lite3 *db);.   i
21410 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  nt sqlite3VtabCo
21420 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  mmit(sqlite3 *db
21430 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
21440 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c  e3VtabLock(VTabl
21450 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
21460 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
21470 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
21480 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
21490 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33  lockList(sqlite3
214a0 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
214b0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
214c0 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20  sqlite3 *, int, 
214d0 69 6e 74 29 3b 0a 20 20 20 56 54 61 62 6c 65 20  int);.   VTable 
214e0 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c  *sqlite3GetVTabl
214f0 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
21500 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73  e*);.#  define s
21510 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
21520 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72  (db) ((db)->nVTr
21530 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61  ans>0 && (db)->a
21540 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69  VTrans==0).#endi
21550 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  f.void sqlite3Vt
21560 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50  abMakeWritable(P
21570 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76  arse*,Table*);.v
21580 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42  oid sqlite3VtabB
21590 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
215a0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
215b0 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  , Token*, int);.
215c0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
215d0 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73  FinishParse(Pars
215e0 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
215f0 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
21600 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Init(Parse*);.vo
21610 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
21620 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20  gExtend(Parse*, 
21630 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
21640 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
21650 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  te(sqlite3*, int
21660 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
21670 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71  char **);.int sq
21680 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e  lite3VtabCallCon
21690 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62  nect(Parse*, Tab
216a0 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
216b0 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
216c0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
216d0 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
216e0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  nt sqlite3VtabBe
216f0 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56  gin(sqlite3 *, V
21700 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65  Table *);.FuncDe
21710 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76  f *sqlite3VtabOv
21720 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73  erloadFunction(s
21730 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66  qlite3 *,FuncDef
21740 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70  *, int nArg, Exp
21750 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
21760 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e  3InvalidFunction
21770 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
21780 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
21790 6c 75 65 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lue**);.int sqli
217a0 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72  te3VdbeParameter
217b0 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e  Index(Vdbe*, con
217c0 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
217d0 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73  int sqlite3Trans
217e0 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69  ferBindings(sqli
217f0 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69  te3_stmt *, sqli
21800 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 69 6e 74  te3_stmt *);.int
21810 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72   sqlite3Reprepar
21820 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73  e(Vdbe*);.void s
21830 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68  qlite3ExprListCh
21840 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a  eckLength(Parse*
21850 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
21860 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53  st char*);.CollS
21870 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72  eq *sqlite3Binar
21880 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28  yCompareCollSeq(
21890 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
218a0 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71   Expr *);.int sq
218b0 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72  lite3TempInMemor
218c0 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a  y(const sqlite3*
218d0 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  );.const char *s
218e0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64  qlite3JournalMod
218f0 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e  ename(int);.#ifn
21900 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21910 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  WAL.  int sqlite
21920 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69  3Checkpoint(sqli
21930 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  te3*, int, int, 
21940 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69  int*, int*);.  i
21950 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66  nt sqlite3WalDef
21960 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73  aultHook(void*,s
21970 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
21980 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ar*,int);.#endif
21990 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e  ../* Declaration
219a0 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  s for functions 
219b0 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f  in fkey.c. All o
219c0 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c  f these are repl
219d0 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70  aced by.** no-op
219e0 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f   macros if OMIT_
219f0 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64  FOREIGN_KEY is d
21a00 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20  efined. In this 
21a10 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a  case no foreign.
21a20 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61  ** key functiona
21a30 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c  lity is availabl
21a40 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47  e. If OMIT_TRIGG
21a50 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75  ER is defined bu
21a60 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47  t.** OMIT_FOREIG
21a70 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e  N_KEY is not, on
21a80 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66  ly some of the f
21a90 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d  unctions are no-
21aa0 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73  oped. In.** this
21ab0 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65   case foreign ke
21ac0 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62  ys are parsed, b
21ad0 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63  ut no other func
21ae0 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a  tionality is .**
21af0 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72   provided (enfor
21b00 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e  cement of FK con
21b10 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65  straints require
21b20 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73  s the triggers s
21b30 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23  ub-system)..*/.#
21b40 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
21b50 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
21b60 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
21b70 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
21b80 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c  GGER).  void sql
21b90 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73  ite3FkCheck(Pars
21ba0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
21bb0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
21bc0 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
21bd0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
21be0 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76   *, Table*);.  v
21bf0 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74  oid sqlite3FkAct
21c00 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ions(Parse*, Tab
21c10 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  le*, ExprList*, 
21c20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
21c30 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
21c40 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
21c50 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
21c60 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
21c70 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
21c80 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
21c90 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
21ca0 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
21cb0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
21cc0 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
21cd0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
21ce0 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63  te3FkCheck(a,b,c
21cf0 2c 64 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,d).  #define sq
21d00 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
21d10 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e  (a,b,c).  #defin
21d20 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  e sqlite3FkOldma
21d30 73 6b 28 61 2c 62 29 20 20 20 20 20 20 30 0a 20  sk(a,b)      0. 
21d40 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
21d50 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63  FkRequired(a,b,c
21d60 2c 64 29 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ,d) 0.#endif.#if
21d70 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
21d80 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76  _FOREIGN_KEY.  v
21d90 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  oid sqlite3FkDel
21da0 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54  ete(sqlite3 *, T
21db0 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71  able*);.  int sq
21dc0 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
21dd0 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ex(Parse*,Table*
21de0 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69  ,FKey*,Index**,i
21df0 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt**);.#else.  #
21e00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
21e10 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64  Delete(a,b).  #d
21e20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c  efine sqlite3FkL
21e30 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63  ocateIndex(a,b,c
21e40 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ,d,e).#endif.../
21e50 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66  *.** Available f
21e60 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20  ault injectors. 
21e70 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65   Should be numbe
21e80 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  red beginning wi
21e90 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  th 0..*/.#define
21ea0 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
21eb0 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20  ECTOR_MALLOC    
21ec0 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54   0.#define SQLIT
21ed0 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
21ee0 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a  COUNT      1../*
21ef0 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
21f00 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e  e to the code in
21f10 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f   fault.c used fo
21f20 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62  r identifying "b
21f30 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63  enign".** malloc
21f40 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20   failures. This 
21f50 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20  is only present 
21f60 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  if SQLITE_OMIT_B
21f70 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69  UILTIN_TEST.** i
21f80 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a  s not defined..*
21f90 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
21fa0 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
21fb0 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ST.  void sqlite
21fc0 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
21fd0 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64  oc(void);.  void
21fe0 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
21ff0 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23  nMalloc(void);.#
22000 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
22010 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
22020 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66  nMalloc().  #def
22030 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65  ine sqlite3EndBe
22040 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e  nignMalloc().#en
22050 64 69 66 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f  dif..#define IN_
22060 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20  INDEX_ROWID     
22070 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20        1.#define 
22080 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20  IN_INDEX_EPH    
22090 20 20 20 20 20 20 20 20 20 32 0a 23 64 65 66 69           2.#defi
220a0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
220b0 58 5f 41 53 43 20 20 20 20 20 20 20 33 0a 23 64  X_ASC       3.#d
220c0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
220d0 4e 44 45 58 5f 44 45 53 43 20 20 20 20 20 20 34  NDEX_DESC      4
220e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
220f0 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c  InIndex(Parse *,
22100 20 45 78 70 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   Expr *, int*);.
22110 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
22120 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49  NABLE_ATOMIC_WRI
22130 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TE.  int sqlite3
22140 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
22150 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74  te3_vfs *, const
22160 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33   char *, sqlite3
22170 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  _file *, int, in
22180 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
22190 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c  3JournalSize(sql
221a0 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69  ite3_vfs *);.  i
221b0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
221c0 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f  lCreate(sqlite3_
221d0 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73  file *);.  int s
221e0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69  qlite3JournalExi
221f0 73 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  sts(sqlite3_file
22200 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64   *p);.#else.  #d
22210 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75  efine sqlite3Jou
22220 72 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28  rnalSize(pVfs) (
22230 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65  (pVfs)->szOsFile
22240 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
22250 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73  te3JournalExists
22260 28 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f  (p) 1.#endif..vo
22270 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  id sqlite3MemJou
22280 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
22290 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71  _file *);.int sq
222a0 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53  lite3MemJournalS
222b0 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ize(void);.int s
222c0 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e  qlite3IsMemJourn
222d0 61 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  al(sqlite3_file 
222e0 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  *);..#if SQLITE_
222f0 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
22300 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
22310 78 70 72 53 65 74 48 65 69 67 68 74 28 50 61 72  xprSetHeight(Par
22320 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
22330 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69   *p);.  int sqli
22340 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
22350 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20  ght(Select *);. 
22360 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72   int sqlite3Expr
22370 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73  CheckHeight(Pars
22380 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a  e*, int);.#else.
22390 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
223a0 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28 78  3ExprSetHeight(x
223b0 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
223c0 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
223d0 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65  eight(x) 0.  #de
223e0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
223f0 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29  CheckHeight(x,y)
22400 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c  .#endif..u32 sql
22410 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e  ite3Get4byte(con
22420 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  st u8*);.void sq
22430 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38  lite3Put4byte(u8
22440 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66  *, u32);..#ifdef
22450 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
22460 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76  NLOCK_NOTIFY.  v
22470 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
22480 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c  ctionBlocked(sql
22490 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20  ite3 *, sqlite3 
224a0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
224b0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
224c0 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  cked(sqlite3 *db
224d0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
224e0 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
224f0 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
22500 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
22510 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
22520 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20  nBlocked(x,y).  
22530 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
22540 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
22550 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73  d(x).  #define s
22560 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
22570 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66  Closed(x).#endif
22580 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
22590 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
225a0 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
225b0 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a  FILE*, char *);.
225c0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
225d0 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
225e0 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
225f0 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
22600 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
22610 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
22620 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
22630 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
22640 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
22650 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
22660 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69  messages. .*/.#i
22670 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
22680 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66  LE_IOTRACE.# def
22690 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20  ine IOTRACE(A)  
226a0 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61  if( sqlite3IoTra
226b0 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54  ce ){ sqlite3IoT
226c0 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64  race A; }.  void
226d0 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
226e0 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53  aceSql(Vdbe*);.S
226f0 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69  QLITE_EXTERN voi
22700 64 20 28 2a 73 71 6c 69 74 65 33 49 6f 54 72 61  d (*sqlite3IoTra
22710 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ce)(const char*,
22720 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ...);.#else.# de
22730 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a  fine IOTRACE(A).
22740 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22750 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58  VdbeIOTraceSql(X
22760 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
22770 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61  These routines a
22780 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  re available for
22790 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75   the mem2.c debu
227a0 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c  gging memory all
227b0 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20  ocator.** only. 
227c0 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74   They are used t
227d0 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69  o verify that di
227e0 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20  fferent "types" 
227f0 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c  of memory.** all
22800 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f  ocations are pro
22810 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79  perly tracked by
22820 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a   the system..**.
22830 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
22840 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73  ugSetType() sets
22850 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61   the "type" of a
22860 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20  n allocation to 
22870 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45  one of.** the ME
22880 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64  MTYPE_* macros d
22890 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54  efined below.  T
228a0 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20  he type must be 
228b0 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a  a bitmask with.*
228c0 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73  * a single bit s
228d0 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  et..**.** sqlite
228e0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
228f0 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
22900 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69  if any of the bi
22910 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
22920 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
22930 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
22940 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
22950 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
22960 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c  etType()..** sql
22970 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
22980 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65  ype() is intende
22990 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65  d for use inside
229a0 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
229b0 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  ents..**.** sqli
229c0 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
229d0 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
229e0 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20   if none of the 
229f0 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
22a00 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
22a10 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
22a20 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
22a30 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
22a40 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a  gSetType()..**.*
22a50 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f  * Perhaps the mo
22a60 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69  st important poi
22a70 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72  nt is the differ
22a80 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d  ence between MEM
22a90 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64  TYPE_HEAP.** and
22aa0 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
22ab0 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63  DE.  If an alloc
22ac0 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45  ation is MEMTYPE
22ad0 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74  _LOOKASIDE, that
22ae0 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67   means.** it mig
22af0 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c  ht have been all
22b00 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73  ocated by lookas
22b10 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20  ide, except the 
22b20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a  allocation was.*
22b30 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c  * too large or l
22b40 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72  ookaside was alr
22b50 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69  eady full.  It i
22b60 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76  s important to v
22b70 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c  erify.** that al
22b80 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d  locations that m
22b90 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73  ight have been s
22ba0 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b  atisfied by look
22bb0 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a  aside are not.**
22bc0 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20   passed back to 
22bd0 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
22be0 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20  ee() routines.  
22bf0 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20  Asserts such as 
22c00 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61  the.** example a
22c10 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20  bove are placed 
22c20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61  on the non-looka
22c30 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
22c40 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a  ines to verify.*
22c50 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e  * this constrain
22c60 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  t. .**.** All of
22c70 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66   this is no-op f
22c80 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20  or a production 
22c90 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20  build.  It only 
22ca0 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c  comes into.** pl
22cb0 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49  ay when the SQLI
22cc0 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70  TE_MEMDEBUG comp
22cd0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
22ce0 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64  is used..*/.#ifd
22cf0 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
22d00 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
22d10 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
22d20 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
22d30 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
22d40 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75  gHasType(void*,u
22d50 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
22d60 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
22d70 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65  void*,u8);.#else
22d80 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
22d90 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
22da0 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20  (X,Y)  /* no-op 
22db0 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  */.# define sqli
22dc0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
22dd0 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66  pe(X,Y)  1.# def
22de0 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
22df0 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20  bugNoType(X,Y)  
22e00 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e   1.#endif.#defin
22e10 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20  e MEMTYPE_HEAP  
22e20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65       0x01  /* Ge
22e30 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63  neral heap alloc
22e40 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
22e50 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  e MEMTYPE_LOOKAS
22e60 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 4d 69  IDE  0x02  /* Mi
22e70 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f  ght have been lo
22e80 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 20 2a  okaside memory *
22e90 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
22ea0 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30  E_SCRATCH    0x0
22eb0 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c  4  /* Scratch al
22ec0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
22ed0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
22ee0 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a  CHE     0x08  /*
22ef0 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
22f00 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
22f10 6e 65 20 4d 45 4d 54 59 50 45 5f 44 42 20 20 20  ne MEMTYPE_DB   
22f20 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 55        0x10  /* U
22f30 73 65 73 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  ses sqlite3DbMal
22f40 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c 69 74 65 5f  loc, not sqlite_
22f50 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 23 65 6e 64 69  malloc */..#endi
22f60 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f  f /* _SQLITEINT_
22f70 48 5f 20 2a 2f 0a                                H_ */.