/ Hex Artifact Content
Login

Artifact 9e12a56e05420b5c7aa40aca4d44ee4d9535b68a:


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 61 72 79 20 69 73 20 6d 75 6c 74  e libary is mult
1050: 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74  ithreaded - mult
1060: 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20  iple.** threads 
1070: 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61  can use SQLite a
1080: 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f  s long as no two
1090: 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20   threads try to 
10a0: 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20  use the same.** 
10b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
10c0: 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20  ion at the same 
10d0: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65  time..**.** Olde
10e0: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
10f0: 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74  Lite used an opt
1100: 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45  ional THREADSAFE
1110: 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75   macro..** We su
1120: 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c  pport that for l
1130: 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64  egacy..*/.#if !d
1140: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48  efined(SQLITE_TH
1150: 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20 64  READSAFE).# if d
1160: 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46  efined(THREADSAF
1170: 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  E).#   define SQ
1180: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
1190: 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73  THREADSAFE.# els
11a0: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
11b0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 31  ITE_THREADSAFE 1
11c0: 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32   /* IMP: R-07272
11d0: 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69  -22309 */.# endi
11e0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  f.#endif../*.** 
11f0: 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77 72  Powersafe overwr
1200: 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66  ite is on by def
1210: 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62  ault.  But can b
1220: 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69  e turned off usi
1230: 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49  ng.** the -DSQLI
1240: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
1250: 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64  RWRITE=0 command
1260: 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f  -line option..*/
1270: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1280: 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52  POWERSAFE_OVERWR
1290: 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ITE.# define SQL
12a0: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
12b0: 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66  ERWRITE 1.#endif
12c0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
12d0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54  TE_DEFAULT_MEMST
12e0: 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73 74 20  ATUS macro must 
12f0: 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 65 69  be defined as ei
1300: 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 20  ther 0 or 1..** 
1310: 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  It determines wh
1320: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
1330: 20 66 65 61 74 75 72 65 73 20 72 65 6c 61 74 65   features relate
1340: 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54 45 5f  d to .** SQLITE_
1350: 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55 53  CONFIG_MEMSTATUS
1360: 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62   are available b
1370: 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e 6f 74  y default or not
1380: 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63 61 6e  . This value can
1390: 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64 64 65  .** be overridde
13a0: 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69  n at runtime usi
13b0: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  ng the sqlite3_c
13c0: 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a 2f 0a  onfig() API..*/.
13d0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
13e0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
13f0: 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65 20  TATUS).# define 
1400: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
1410: 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64 69  EMSTATUS 1.#endi
1420: 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79  f../*.** Exactly
1430: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
1440: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73  owing macros mus
1450: 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e 20  t be defined in 
1460: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63  order to.** spec
1470: 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72 79  ify which memory
1480: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73   allocation subs
1490: 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a  ystem to use..**
14a0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 53  .**     SQLITE_S
14b0: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20  YSTEM_MALLOC    
14c0: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72        // Use nor
14d0: 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f  mal system mallo
14e0: 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  c().**     SQLIT
14f0: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20  E_WIN32_MALLOC  
1500: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
1510: 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61  Win32 native hea
1520: 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c  p API.**     SQL
1530: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20  ITE_ZERO_MALLOC 
1540: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73             // Us
1550: 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63 61 74  e a stub allocat
1560: 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73 20 66  or that always f
1570: 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c 49  ails.**     SQLI
1580: 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20 20  TE_MEMDEBUG     
1590: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65 62            // Deb
15a0: 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f  ugging version o
15b0: 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28  f system malloc(
15c0: 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f  ).**.** On Windo
15d0: 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c 49 54  ws, if the SQLIT
15e0: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56  E_WIN32_MALLOC_V
15f0: 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20 69 73  ALIDATE macro is
1600: 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74 68 65   defined and the
1610: 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d 61 63  .** assert() mac
1620: 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c 20 65  ro is enabled, e
1630: 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68  ach call into th
1640: 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68  e Win32 native h
1650: 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a 2a 2a  eap subsystem.**
1660: 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65 61 70   will cause Heap
1670: 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65 20 63  Validate to be c
1680: 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61 70 20  alled.  If heap 
1690: 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75 6c  validation shoul
16a0: 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73  d fail, an.** as
16b0: 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  sertion will be 
16c0: 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a  triggered..**.**
16d0: 20 28 48 69 73 74 6f 72 69 63 61 6c 20 6e 6f 74   (Historical not
16e0: 65 3a 20 20 54 68 65 72 65 20 75 73 65 64 20 74  e:  There used t
16f0: 6f 20 62 65 20 73 65 76 65 72 61 6c 20 6f 74 68  o be several oth
1700: 65 72 20 6f 70 74 69 6f 6e 73 2c 20 62 75 74 20  er options, but 
1710: 77 65 27 76 65 0a 2a 2a 20 70 61 72 65 64 20 69  we've.** pared i
1720: 74 20 64 6f 77 6e 20 74 6f 20 6a 75 73 74 20 74  t down to just t
1730: 68 65 73 65 20 74 68 72 65 65 2e 29 0a 2a 2a 0a  hese three.).**.
1740: 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ** If none of th
1750: 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66 69  e above are defi
1760: 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53 51  ned, then set SQ
1770: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
1780: 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65 66  OC as.** the def
1790: 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ault..*/.#if def
17a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54  ined(SQLITE_SYST
17b0: 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  EM_MALLOC) \.  +
17c0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
17d0: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a  WIN32_MALLOC) \.
17e0: 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49    + defined(SQLI
17f0: 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20  TE_ZERO_MALLOC) 
1800: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
1810: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e 31  LITE_MEMDEBUG)>1
1820: 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f 72  .# error "Two or
1830: 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f 6c   more of the fol
1840: 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d 74  lowing compile-t
1850: 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ime configuratio
1860: 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65 20  n options\. are 
1870: 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20 6d  defined but at m
1880: 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f 77  ost one is allow
1890: 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59 53  ed:\. SQLITE_SYS
18a0: 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49  TEM_MALLOC, SQLI
18b0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 2c  TE_WIN32_MALLOC,
18c0: 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
18d0: 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f  ,\. SQLITE_ZERO_
18e0: 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a 23  MALLOC".#endif.#
18f0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1900: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29  E_SYSTEM_MALLOC)
1910: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
1920: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
1930: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
1940: 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41  d(SQLITE_ZERO_MA
1950: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
1960: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45  ned(SQLITE_MEMDE
1970: 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65  BUG)==0.# define
1980: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
1990: 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a 0a  ALLOC 1.#endif..
19a0: 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  /*.** If SQLITE_
19b0: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
19c0: 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  T is not zero, t
19d0: 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70 20  hen try to keep 
19e0: 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66 20  the.** sizes of 
19f0: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1a00: 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76 61  ns below this va
1a10: 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69 62  lue where possib
1a20: 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  le..*/.#if !defi
1a30: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f  ned(SQLITE_MALLO
1a40: 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23 20  C_SOFT_LIMIT).# 
1a50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
1a60: 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20  LLOC_SOFT_LIMIT 
1a70: 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  1024.#endif../*.
1a80: 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65  ** We need to de
1a90: 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52  fine _XOPEN_SOUR
1aa0: 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69 6e  CE as follows in
1ab0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c 65   order to enable
1ac0: 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d 75  .** recursive mu
1ad0: 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55 6e  texes on most Un
1ae0: 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20 66  ix systems and f
1af0: 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e 42  chmod() on OpenB
1b00: 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50 45  SD..** But _XOPE
1b10: 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65 20  N_SOURCE define 
1b20: 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73 20  causes problems 
1b30: 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73 6f  for Mac OS X, so
1b40: 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a   omit.** it..*/.
1b50: 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58 4f  #if !defined(_XO
1b60: 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20 21  PEN_SOURCE) && !
1b70: 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49 4e  defined(__DARWIN
1b80: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
1b90: 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64 65  __APPLE__).#  de
1ba0: 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52  fine _XOPEN_SOUR
1bb0: 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a 2f  CE 600.#endif../
1bc0: 2a 0a 2a 2a 20 54 68 65 20 54 43 4c 20 68 65 61  *.** The TCL hea
1bd0: 64 65 72 73 20 61 72 65 20 6f 6e 6c 79 20 6e 65  ders are only ne
1be0: 65 64 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c  eded when compil
1bf0: 69 6e 67 20 74 68 65 20 54 43 4c 20 62 69 6e 64  ing the TCL bind
1c00: 69 6e 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ings..*/.#if def
1c10: 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 43 4c 29  ined(SQLITE_TCL)
1c20: 20 7c 7c 20 64 65 66 69 6e 65 64 28 54 43 4c 53   || defined(TCLS
1c30: 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 74 63  H).# include <tc
1c40: 6c 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l.h>.#endif../*.
1c50: 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53 51  ** NDEBUG and SQ
1c60: 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20 6f  LITE_DEBUG are o
1c70: 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73 68  pposites.  It sh
1c80: 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20 74  ould always be t
1c90: 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69  rue that.** defi
1ca0: 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64 65  ned(NDEBUG)==!de
1cb0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
1cc0: 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69 73  UG).  If this is
1cd0: 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 74   not currently t
1ce0: 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20  rue,.** make it 
1cf0: 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e 67  true by defining
1d00: 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e   or undefining N
1d10: 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74  DEBUG..**.** Set
1d20: 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b 65  ting NDEBUG make
1d30: 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c  s the code small
1d40: 65 72 20 61 6e 64 20 72 75 6e 20 66 61 73 74 65  er and run faste
1d50: 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74  r by disabling t
1d60: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 61 73 73  he.** number ass
1d70: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
1d80: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
1d90: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
1da0: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
1db0: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
1dc0: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
1dd0: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
1de0: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
1df0: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
1e00: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
1e10: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
1e20: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
1e30: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
1e40: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
1e50: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
1e60: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1e70: 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66  TE_DEBUG) .# def
1e80: 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e  ine NDEBUG 1.#en
1e90: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
1ea0: 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  NDEBUG) && defin
1eb0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
1ec0: 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a  .# undef NDEBUG.
1ed0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1ee0: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
1ef0: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
1f00: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
1f10: 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a  sting.  When .**
1f20: 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20   doing coverage 
1f30: 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e  testing, the con
1f40: 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68  dition inside th
1f50: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a  e argument to.**
1f60: 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74   testcase() must
1f70: 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f   be evaluated bo
1f80: 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  th true and fals
1f90: 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
1fa0: 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68   get full branch
1fb0: 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20   coverage.  The 
1fc0: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
1fd0: 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20   is inserted.** 
1fe0: 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61  to help ensure a
1ff0: 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76  dequate test cov
2000: 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20  erage in places 
2010: 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20  where simple.** 
2020: 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69  condition/decisi
2030: 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69  on coverage is i
2040: 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20  nadequate.  For 
2050: 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73  example, testcas
2060: 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  e().** can be us
2070: 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure 
2080: 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20  boundary values 
2090: 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72  are tested.  For
20a0: 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74  .** bitmask test
20b0: 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61  s, testcase() ca
20c0: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b  n be used to mak
20d0: 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a  e sure each bit.
20e0: 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e  ** is significan
20f0: 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65  t and used at le
2100: 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77  ast once.  On sw
2110: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a  itch statements.
2120: 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c  ** where multipl
2130: 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68  e cases go to th
2140: 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20  e same block of 
2150: 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29  code, testcase()
2160: 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74  .** can insure t
2170: 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72  hat all cases ar
2180: 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a  e evaluated..**.
2190: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
21a0: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20  _COVERAGE_TEST. 
21b0: 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76   void sqlite3Cov
21c0: 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65  erage(int);.# de
21d0: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
21e0: 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74    if( X ){ sqlit
21f0: 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e  e3Coverage(__LIN
2200: 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20  E__); }.#else.# 
2210: 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28  define testcase(
2220: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2230: 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61   The TESTONLY ma
2240: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65  cro is used to e
2250: 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20  nclose variable 
2260: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a  declarations or.
2270: 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66  ** other bits of
2280: 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e   code that are n
2290: 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74  eeded to support
22a0: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a   the arguments.*
22b0: 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73  * within testcas
22c0: 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29  e() and assert()
22d0: 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20   macros..*/.#if 
22e0: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
22f0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
2300: 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54  TE_COVERAGE_TEST
2310: 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f  ).# define TESTO
2320: 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a  NLY(X)  X.#else.
2330: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2340: 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Y(X).#endif../*.
2350: 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20  ** Sometimes we 
2360: 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f  need a small amo
2370: 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68  unt of code such
2380: 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69   as a variable i
2390: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
23a0: 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20   to setup for a 
23b0: 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73  later assert() s
23c0: 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f  tatement.  We do
23d0: 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63   not want this c
23e0: 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72  ode to.** appear
23f0: 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69   when assert() i
2400: 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65  s disabled.  The
2410: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
2420: 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a   is therefore.**
2430: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e   used to contain
2440: 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65   that setup code
2450: 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72  .  The "VVA" acr
2460: 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a  onym stands for.
2470: 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e  ** "Verification
2480: 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e  , Validation, an
2490: 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22  d Accreditation"
24a0: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
24b0: 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77  s, the.** code w
24c0: 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29  ithin VVA_ONLY()
24d0: 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64   will only run d
24e0: 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69  uring verificati
24f0: 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f  on processes..*/
2500: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
2510: 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c  # define VVA_ONL
2520: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2530: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2540: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2550: 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20   The ALWAYS and 
2560: 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72  NEVER macros sur
2570: 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78  round boolean ex
2580: 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20  pressions which 
2590: 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64  .** are intended
25a0: 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72   to always be tr
25b0: 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73  ue or false, res
25c0: 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68  pectively.  Such
25d0: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20  .** expressions 
25e0: 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64  could be omitted
25f0: 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63   from the code c
2600: 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20  ompletely.  But 
2610: 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c  they.** are incl
2620: 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63 61  uded in a few ca
2630: 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ses in order to 
2640: 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73 69  enhance the resi
2650: 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c  lience.** of SQL
2660: 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65  ite to unexpecte
2670: 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20  d behavior - to 
2680: 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73  make the code "s
2690: 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20  elf-healing".** 
26a0: 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61 74  or "ductile" rat
26b0: 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22  her than being "
26c0: 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61  brittle" and cra
26d0: 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69 72  shing at the fir
26e0: 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e  st.** hint of un
26f0: 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72  planned behavior
2700: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ..**.** In other
2710: 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61   words, ALWAYS a
2720: 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64 64  nd NEVER are add
2730: 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65  ed for defensive
2740: 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65   code..**.** Whe
2750: 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  n doing coverage
2760: 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20   testing ALWAYS 
2770: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68 61  and NEVER are ha
2780: 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62  rd-coded to.** b
2790: 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  e true and false
27a0: 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72   so that the unr
27b0: 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68  eachable code th
27c0: 65 6e 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a  en specify will.
27d0: 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65  ** not be counte
27e0: 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f  d as untested co
27f0: 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  de..*/.#if defin
2800: 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41  ed(SQLITE_COVERA
2810: 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  GE_TEST).# defin
2820: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
2830: 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (1).# define NE
2840: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29  VER(X)       (0)
2850: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
2860: 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65  NDEBUG).# define
2870: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
2880: 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30  ((X)?1:(assert(0
2890: 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e  ),0)).# define N
28a0: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28  EVER(X)       ((
28b0: 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29  X)?(assert(0),1)
28c0: 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  :0).#else.# defi
28d0: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
28e0: 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e    (X).# define N
28f0: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58  EVER(X)       (X
2900: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
2910: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
2920: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
2930: 70 75 74 20 69 73 20 61 20 69 6e 74 65 67 65 72  put is a integer
2940: 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72   that is too lar
2950: 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20  ge.** to fit in 
2960: 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d  32-bits.  This m
2970: 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
2980: 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74  ide of various t
2990: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63  estcase().** mac
29a0: 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74 68  ros to verify th
29b0: 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74 65  at we have teste
29c0: 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72  d SQLite for lar
29d0: 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e  ge-file support.
29e0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42  .*/.#define IS_B
29f0: 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29  IG_INT(X)  (((X)
2a00: 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66 66  &~(i64)0xfffffff
2a10: 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  f)!=0)../*.** Th
2a20: 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79  e macro unlikely
2a30: 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61  () is a hint tha
2a40: 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f  t surrounds a bo
2a50: 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73  olean.** express
2a60: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
2a70: 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72  lly false.  Macr
2a80: 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f  o likely() surro
2a90: 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61  unds.** a boolea
2aa0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  n expression tha
2ab0: 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75  t is usually tru
2ac0: 65 2e 20 20 47 43 43 20 69 73 20 61 62 6c 65 20  e.  GCC is able 
2ad0: 74 6f 0a 2a 2a 20 75 73 65 20 74 68 65 73 65 20  to.** use these 
2ae0: 68 69 6e 74 73 20 74 6f 20 67 65 6e 65 72 61 74  hints to generat
2af0: 65 20 62 65 74 74 65 72 20 63 6f 64 65 2c 20 73  e better code, s
2b00: 6f 6d 65 74 69 6d 65 73 2e 0a 2a 2f 0a 23 69 66  ometimes..*/.#if
2b10: 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f   defined(__GNUC_
2b20: 5f 29 20 26 26 20 30 0a 23 20 64 65 66 69 6e 65  _) && 0.# define
2b30: 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 5f 5f   likely(X)    __
2b40: 62 75 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28  builtin_expect((
2b50: 58 29 2c 31 29 0a 23 20 64 65 66 69 6e 65 20 75  X),1).# define u
2b60: 6e 6c 69 6b 65 6c 79 28 58 29 20 20 5f 5f 62 75  nlikely(X)  __bu
2b70: 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28 58 29  iltin_expect((X)
2b80: 2c 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ,0).#else.# defi
2b90: 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20  ne likely(X)    
2ba0: 21 21 28 58 29 0a 23 20 64 65 66 69 6e 65 20 75  !!(X).# define u
2bb0: 6e 6c 69 6b 65 6c 79 28 58 29 20 20 21 21 28 58  nlikely(X)  !!(X
2bc0: 29 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75  ).#endif..#inclu
2bd0: 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 23  de "sqlite3.h".#
2be0: 69 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22  include "hash.h"
2bf0: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65  .#include "parse
2c00: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h".#include <st
2c10: 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  dio.h>.#include 
2c20: 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c  <stdlib.h>.#incl
2c30: 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23  ude <string.h>.#
2c40: 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e  include <assert.
2c50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h>.#include <std
2c60: 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66  def.h>../*.** If
2c70: 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61   compiling for a
2c80: 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20   processor that 
2c90: 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70  lacks floating p
2ca0: 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a  oint support,.**
2cb0: 20 73 75 62 73 74 69 74 75 74 65 20 69 6e 74 65   substitute inte
2cc0: 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67  ger for floating
2cd0: 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66  -point.*/.#ifdef
2ce0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
2cf0: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65  ATING_POINT.# de
2d00: 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69  fine double sqli
2d10: 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e  te_int64.# defin
2d20: 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69  e float sqlite_i
2d30: 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f  nt64.# define LO
2d40: 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71  NGDOUBLE_TYPE sq
2d50: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e  lite_int64.# ifn
2d60: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
2d70: 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  BL.#   define SQ
2d80: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28  LITE_BIG_DBL (((
2d90: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29  sqlite3_int64)1)
2da0: 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20  <<50).# endif.# 
2db0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d  define SQLITE_OM
2dc0: 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43  IT_DATETIME_FUNC
2dd0: 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S 1.# define SQL
2de0: 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31  ITE_OMIT_TRACE 1
2df0: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
2e00: 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42  MIXED_ENDIAN_64B
2e10: 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66  IT_FLOAT.# undef
2e20: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e   SQLITE_HAVE_ISN
2e30: 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  AN.#endif.#ifnde
2e40: 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  f SQLITE_BIG_DBL
2e50: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2e60: 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a  _BIG_DBL (1e99).
2e70: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d  #endif../*.** OM
2e80: 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74  IT_TEMPDB is set
2e90: 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f   to 1 if SQLITE_
2ea0: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64  OMIT_TEMPDB is d
2eb0: 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20  efined, or 0.** 
2ec0: 61 66 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e  afterward. Havin
2ed0: 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c  g this macro all
2ee0: 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73 65 20  ows us to cause 
2ef0: 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a  the C compiler .
2f00: 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20  ** to omit code 
2f10: 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61 62  used by TEMP tab
2f20: 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73 73  les without mess
2f30: 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65 6d  y #ifndef statem
2f40: 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ents..*/.#ifdef 
2f50: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50  SQLITE_OMIT_TEMP
2f60: 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f  DB.#define OMIT_
2f70: 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a 23  TEMPDB 1.#else.#
2f80: 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50  define OMIT_TEMP
2f90: 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  DB 0.#endif../*.
2fa0: 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f 72  ** The "file for
2fb0: 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20 61  mat" number is a
2fc0: 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 69  n integer that i
2fd0: 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68  s incremented wh
2fe0: 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56 44  enever.** the VD
2ff0: 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f  BE-level file fo
3000: 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20 54  rmat changes.  T
3010: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
3020: 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a 2a  ros define the.*
3030: 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 69  * the default fi
3040: 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65  le format for ne
3050: 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64 20  w databases and 
3060: 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65  the maximum file
3070: 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20   format.** that 
3080: 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e 20  the library can 
3090: 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  read..*/.#define
30a0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45   SQLITE_MAX_FILE
30b0: 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64 65  _FORMAT 4.#ifnde
30c0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
30d0: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64  _FILE_FORMAT.# d
30e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
30f0: 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  AULT_FILE_FORMAT
3100: 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   4.#endif../*.**
3110: 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   Determine wheth
3120: 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65 20  er triggers are 
3130: 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65 66  recursive by def
3140: 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e 20  ault.  This can 
3150: 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61 74  be.** changed at
3160: 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20   run-time using 
3170: 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66  a pragma..*/.#if
3180: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
3190: 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52  ULT_RECURSIVE_TR
31a0: 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65 20  IGGERS.# define 
31b0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52  SQLITE_DEFAULT_R
31c0: 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52  ECURSIVE_TRIGGER
31d0: 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 0.#endif../*.*
31e0: 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66 61  * Provide a defa
31f0: 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53 51  ult value for SQ
3200: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20  LITE_TEMP_STORE 
3210: 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e 6f  in case it is no
3220: 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f  t specified.** o
3230: 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69  n the command-li
3240: 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ne.*/.#ifndef SQ
3250: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a  LITE_TEMP_STORE.
3260: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3270: 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 20 64  TEMP_STORE 1.# d
3280: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d  efine SQLITE_TEM
3290: 50 5f 53 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a  P_STORE_xc 1  /*
32a0: 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74   Exclude from ct
32b0: 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a  ime.c */.#endif.
32c0: 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20  ./*.** GCC does 
32d0: 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20 6f  not define the o
32e0: 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f 20  ffsetof() macro 
32f0: 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74 6f  so we'll have to
3300: 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c   do it.** oursel
3310: 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ves..*/.#ifndef 
3320: 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e 65  offsetof.#define
3330: 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43 54   offsetof(STRUCT
3340: 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e 74  URE,FIELD) ((int
3350: 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52 55  )((char*)&((STRU
3360: 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44  CTURE*)0)->FIELD
3370: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
3380: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
3390: 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73   this machine us
33a0: 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65 73  es EBCDIC.  (Yes
33b0: 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a  , believe it or.
33c0: 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72  ** not, there ar
33d0: 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73  e still machines
33e0: 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74 20   out there that 
33f0: 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a  use EBCDIC.).*/.
3400: 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31  #if 'A' == '\301
3410: 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  '.# define SQLIT
3420: 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65  E_EBCDIC 1.#else
3430: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3440: 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a  _ASCII 1.#endif.
3450: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20  ./*.** Integers 
3460: 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20  of known sizes. 
3470: 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73 20   These typedefs 
3480: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72  might change for
3490: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a   architectures.*
34a0: 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a 65  * where the size
34b0: 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63  s very.  Preproc
34c0: 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65  essor macros are
34d0: 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68   available so th
34e0: 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20  at the.** types 
34f0: 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e  can be convenien
3500: 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61 74  tly redefined at
3510: 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20   compile-type.  
3520: 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a  Like this:.**.**
3530: 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44 55           cc '-DU
3540: 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67  INTPTR_TYPE=long
3550: 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a   long int' ....*
3560: 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32  /.#ifndef UINT32
3570: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
3580: 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64  VE_UINT32_T.#  d
3590: 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50  efine UINT32_TYP
35a0: 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73  E uint32_t.# els
35b0: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
35c0: 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  32_TYPE unsigned
35d0: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
35e0: 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  dif.#ifndef UINT
35f0: 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  16_TYPE.# ifdef 
3600: 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20  HAVE_UINT16_T.# 
3610: 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54   define UINT16_T
3620: 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65  YPE uint16_t.# e
3630: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49  lse.#  define UI
3640: 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e  NT16_TYPE unsign
3650: 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65  ed short int.# e
3660: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
3670: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23  def INT16_TYPE.#
3680: 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31   ifdef HAVE_INT1
3690: 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  6_T.#  define IN
36a0: 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74  T16_TYPE int16_t
36b0: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
36c0: 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f  e INT16_TYPE sho
36d0: 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23  rt int.# endif.#
36e0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49  endif.#ifndef UI
36f0: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
3700: 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20   HAVE_UINT8_T.# 
3710: 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59   define UINT8_TY
3720: 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73  PE uint8_t.# els
3730: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
3740: 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  8_TYPE unsigned 
3750: 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e  char.# endif.#en
3760: 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38  dif.#ifndef INT8
3770: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
3780: 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66  VE_INT8_T.#  def
3790: 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e  ine INT8_TYPE in
37a0: 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  t8_t.# else.#  d
37b0: 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20  efine INT8_TYPE 
37c0: 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e  signed char.# en
37d0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
37e0: 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ef LONGDOUBLE_TY
37f0: 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47  PE.# define LONG
3800: 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67  DOUBLE_TYPE long
3810: 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74   double.#endif.t
3820: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e  ypedef sqlite_in
3830: 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20 20  t64 i64;        
3840: 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e    /* 8-byte sign
3850: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
3860: 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e  pedef sqlite_uin
3870: 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20 20  t64 u64;        
3880: 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67   /* 8-byte unsig
3890: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
38a0: 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ypedef UINT32_TY
38b0: 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20 20  PE u32;         
38c0: 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69    /* 4-byte unsi
38d0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
38e0: 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54  typedef UINT16_T
38f0: 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20 20  YPE u16;        
3900: 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73     /* 2-byte uns
3910: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3920: 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54  .typedef INT16_T
3930: 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20 20  YPE i16;        
3940: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69      /* 2-byte si
3950: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
3960: 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59  typedef UINT8_TY
3970: 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20 20  PE u8;          
3980: 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73     /* 1-byte uns
3990: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
39a0: 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59  .typedef INT8_TY
39b0: 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20 20  PE i8;          
39c0: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69      /* 1-byte si
39d0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
39e0: 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41  ./*.** SQLITE_MA
39f0: 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20 63  X_U32 is a u64 c
3a00: 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73 20  onstant that is 
3a10: 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20  the maximum u64 
3a20: 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61  value.** that ca
3a30: 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  n be stored in a
3a40: 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73   u32 without los
3a50: 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20  s of data.  The 
3a60: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30  value.** is 0x00
3a70: 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e 20  000000ffffffff. 
3a80: 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66 20   But because of 
3a90: 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63  quirks of some c
3aa0: 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20  ompilers, we.** 
3ab0: 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79 20  have to specify 
3ac0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65  the value in the
3ad0: 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65 20   less intuitive 
3ae0: 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f  manner shown:.*/
3af0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
3b00: 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36 34  MAX_U32  ((((u64
3b10: 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a  )1)<<32)-1)../*.
3b20: 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20  ** The datatype 
3b30: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73  used to store es
3b40: 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e  timates of the n
3b50: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
3b60: 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69   a.** table or i
3b70: 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20 61  ndex.  This is a
3b80: 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  n unsigned integ
3b90: 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39  er type.  For 99
3ba0: 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f  .9% of.** the wo
3bb0: 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e  rld, a 32-bit in
3bc0: 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63 69  teger is suffici
3bd0: 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62  ent.  But a 64-b
3be0: 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61  it integer.** ca
3bf0: 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d  n be used at com
3c00: 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73  pile-time if des
3c10: 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ired..*/.#ifdef 
3c20: 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41  SQLITE_64BIT_STA
3c30: 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34 20  TS. typedef u64 
3c40: 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36  tRowcnt;    /* 6
3c50: 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65  4-bit only if re
3c60: 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69  quested at compi
3c70: 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65  le-time */.#else
3c80: 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74 52  . typedef u32 tR
3c90: 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d  owcnt;    /* 32-
3ca0: 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61 75  bit is the defau
3cb0: 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  lt */.#endif../*
3cc0: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
3cd0: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
3ce0: 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62  the machine is b
3cf0: 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64  ig or little end
3d00: 69 61 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61 74 65  ian,.** evaluate
3d10: 64 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2f  d at runtime..*/
3d20: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41  .#ifdef SQLITE_A
3d30: 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73  MALGAMATION.cons
3d40: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
3d50: 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65   = 1;.#else.exte
3d60: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
3d70: 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a  ite3one;.#endif.
3d80: 23 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36  #if defined(i386
3d90: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69  ) || defined(__i
3da0: 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  386__) || define
3db0: 64 28 5f 4d 5f 49 58 38 36 29 5c 0a 20 20 20 20  d(_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 7c 7c 20 64 65 66 69           || defi
3de0: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c  ned(__x86_64) ||
3df0: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36   defined(__x86_6
3e00: 34 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51  4__).# define SQ
3e10: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
3e20: 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c    0.# define SQL
3e30: 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e  ITE_LITTLEENDIAN
3e40: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
3e50: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
3e60: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23  SQLITE_UTF16LE.#
3e70: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51  else.# define SQ
3e80: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
3e90: 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71    (*(char *)(&sq
3ea0: 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20  lite3one)==0).# 
3eb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
3ec0: 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68  TTLEENDIAN (*(ch
3ed0: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
3ee0: 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20  e)==1).# define 
3ef0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
3f00: 56 45 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e  VE (SQLITE_BIGEN
3f10: 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31  DIAN?SQLITE_UTF1
3f20: 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36  6BE:SQLITE_UTF16
3f30: 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  LE).#endif../*.*
3f40: 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20  * Constants for 
3f50: 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20  the largest and 
3f60: 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c  smallest possibl
3f70: 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20  e 64-bit signed 
3f80: 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65  integers..** The
3f90: 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65  se macros are de
3fa0: 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63  signed to work c
3fb0: 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68  orrectly on both
3fc0: 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62   32-bit and 64-b
3fd0: 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e  it.** compilers.
3fe0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47  .*/.#define LARG
3ff0: 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66  EST_INT64  (0xff
4000: 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30 78  ffffff|(((i64)0x
4010: 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a  7fffffff)<<32)).
4020: 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54  #define SMALLEST
4030: 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31  _INT64 (((i64)-1
4040: 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ) - LARGEST_INT6
4050: 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64  4)../* .** Round
4060: 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20   up a number to 
4070: 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20  the next larger 
4080: 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20  multiple of 8.  
4090: 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20  This is used.** 
40a0: 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20  to force 8-byte 
40b0: 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d  alignment on 64-
40c0: 62 69 74 20 61 72 63 68 69 74 65 63 74 75 72 65  bit architecture
40d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f  s..*/.#define RO
40e0: 55 4e 44 38 28 78 29 20 20 20 20 20 28 28 28 78  UND8(x)     (((x
40f0: 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20  )+7)&~7)../*.** 
4100: 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68  Round down to th
4110: 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70  e nearest multip
4120: 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69  le of 8.*/.#defi
4130: 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29  ne ROUNDDOWN8(x)
4140: 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a   ((x)&~7)../*.**
4150: 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
4160: 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c   pointer X is al
4170: 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79  igned to an 8-by
4180: 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68  te boundary.  Th
4190: 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  is.** macro is u
41a0: 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20  sed only within 
41b0: 61 73 73 65 72 74 28 29 20 74 6f 20 76 65 72 69  assert() to veri
41c0: 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  fy that the code
41d0: 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69   gets.** all ali
41e0: 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69  gnment restricti
41f0: 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a  ons correct..**.
4200: 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53 51  ** Except, if SQ
4210: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
4220: 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65  NED_MALLOC is de
4230: 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a  fined, then the.
4240: 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61  ** underlying ma
4250: 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74  lloc() implement
4260: 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e  ion might return
4270: 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e   us 4-byte align
4280: 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20  ed.** pointers. 
4290: 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f   In that case, o
42a0: 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79 74  nly verify 4-byt
42b0: 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a  e alignment..*/.
42c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f  #ifdef SQLITE_4_
42d0: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
42e0: 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47  LOC.# define EIG
42f0: 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e  HT_BYTE_ALIGNMEN
4300: 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a  T(X)   ((((char*
4310: 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29  )(X) - (char*)0)
4320: 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20  &3)==0).#else.# 
4330: 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54  define EIGHT_BYT
4340: 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20  E_ALIGNMENT(X)  
4350: 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d   ((((char*)(X) -
4360: 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30   (char*)0)&7)==0
4370: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4380: 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20  Disable MMAP on 
4390: 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20  platforms where 
43a0: 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e  it is known to n
43b0: 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64  ot work.*/.#if d
43c0: 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44  efined(__OpenBSD
43d0: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  __) || defined(_
43e0: 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64  _QNXNTO__).# und
43f0: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
4400: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
4410: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
4420: 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a  _SIZE 0.#endif..
4430: 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61  /*.** Default ma
4440: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65  ximum size of me
4450: 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d  mory used by mem
4460: 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69  ory-mapped I/O i
4470: 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66  n the VFS.*/.#if
4480: 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20  def __APPLE__.# 
4490: 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43  include <TargetC
44a0: 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23  onditionals.h>.#
44b0: 20 69 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50   if TARGET_OS_IP
44c0: 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53  HONE.#   undef S
44d0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
44e0: 49 5a 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53  IZE.#   define S
44f0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4500: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 0.# endif.#e
4510: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
4520: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
4530: 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f  E.# if defined(_
4540: 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c  _linux__) \.  ||
4550: 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29   defined(_WIN32)
4560: 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64   \.  || (defined
4570: 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64  (__APPLE__) && d
4580: 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29  efined(__MACH__)
4590: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
45a0: 28 5f 5f 73 75 6e 29 0a 23 20 20 20 64 65 66 69  (__sun).#   defi
45b0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
45c0: 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30  AP_SIZE 0x7fff00
45d0: 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31  00  /* 214741811
45e0: 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20  2 */.# else.#   
45f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
4600: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20  X_MMAP_SIZE 0.# 
4610: 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53  endif.# define S
4620: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4630: 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c  IZE_xc 1 /* excl
4640: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
4650: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
4660: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d  * The default MM
4670: 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20  AP_SIZE is zero 
4680: 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73  on all platforms
4690: 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61  .  Or, even if a
46a0: 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75   larger.** defau
46b0: 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20  lt MMAP_SIZE is 
46c0: 73 70 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d  specified at com
46d0: 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20  pile-time, make 
46e0: 73 75 72 65 20 74 68 61 74 20 69 74 20 64 6f 65  sure that it doe
46f0: 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20  s.** not exceed 
4700: 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70  the maximum mmap
4710: 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65   size..*/.#ifnde
4720: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
4730: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
4740: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
4750: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  LT_MMAP_SIZE 0.#
4760: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
4770: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
4780: 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64  _xc 1  /* Exclud
4790: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
47a0: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  /.#endif.#if SQL
47b0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
47c0: 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58  _SIZE>SQLITE_MAX
47d0: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64  _MMAP_SIZE.# und
47e0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
47f0: 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65  T_MMAP_SIZE.# de
4800: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
4810: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51  ULT_MMAP_SIZE SQ
4820: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
4830: 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ZE.#endif../*.**
4840: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
4850: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
4860: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
4870: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
4880: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
4890: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
48a0: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
48b0: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
48c0: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
48d0: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
48e0: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
48f0: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
4900: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
4910: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
4920: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
4930: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
4940: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
4950: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
4960: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
4970: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
4980: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
4990: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
49a0: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
49b0: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
49c0: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
49d0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
49e0: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
49f0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
4a00: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
4a10: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
4a20: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
4a30: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
4a40: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
4a50: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
4a60: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
4a70: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
4a80: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
4a90: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
4aa0: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
4ab0: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
4ac0: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
4ad0: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
4ae0: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
4af0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
4b00: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
4b10: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
4b20: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
4b30: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
4b40: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
4b50: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
4b60: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
4b70: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
4b80: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
4b90: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
4ba0: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
4bb0: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
4bc0: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
4bd0: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
4be0: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
4bf0: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
4c00: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
4c10: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
4c20: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
4c30: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
4c40: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
4c50: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
4c60: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
4c70: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
4c80: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
4c90: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
4ca0: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
4cb0: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
4cc0: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
4cd0: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
4ce0: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
4cf0: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
4d00: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
4d10: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
4d20: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
4d30: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
4d40: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
4d50: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
4d60: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
4d70: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
4d80: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
4d90: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
4da0: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
4db0: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
4dc0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
4dd0: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
4de0: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
4df0: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
4e00: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
4e10: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
4e20: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
4e30: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
4e40: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
4e50: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
4e60: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
4e70: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
4e80: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
4e90: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
4ea0: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
4eb0: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
4ec0: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
4ed0: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
4ee0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
4ef0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
4f00: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
4f10: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
4f20: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
4f30: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
4f40: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
4f50: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
4f60: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
4f70: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
4f80: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
4f90: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
4fa0: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
4fb0: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
4fc0: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
4fd0: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
4fe0: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
4ff0: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
5000: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
5010: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
5020: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
5030: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
5040: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
5050: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
5060: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
5070: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
5080: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
5090: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
50a0: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
50b0: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
50c0: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
50d0: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
50e0: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
50f0: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
5100: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
5110: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
5120: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
5130: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
5140: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
5150: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
5160: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
5170: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
5180: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
5190: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
51a0: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
51b0: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
51c0: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
51d0: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
51e0: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
51f0: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
5200: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
5210: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
5220: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
5230: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
5240: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
5250: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
5260: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
5270: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
5280: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
5290: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
52a0: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
52b0: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
52c0: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
52d0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
52e0: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
52f0: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
5300: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
5310: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
5320: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
5330: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
5340: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
5350: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
5360: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
5370: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
5380: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
5390: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
53a0: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
53b0: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
53c0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
53d0: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
53e0: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
53f0: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
5400: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
5410: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
5420: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
5430: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
5440: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
5450: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
5460: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
5470: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
5480: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
5490: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
54a0: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
54b0: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
54c0: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
54d0: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
54e0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
54f0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
5500: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
5510: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
5520: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
5530: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
5540: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
5550: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
5560: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
5570: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
5580: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
5590: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
55a0: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
55b0: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
55c0: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
55d0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
55e0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
55f0: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
5600: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
5610: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
5620: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
5630: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
5640: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
5650: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
5660: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
5670: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
5680: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
5690: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
56a0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
56b0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
56c0: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
56d0: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
56e0: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
56f0: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
5700: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
5710: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
5720: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
5730: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
5740: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
5750: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
5760: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
5770: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
5780: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
5790: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
57a0: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
57b0: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
57c0: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
57d0: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
57e0: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
57f0: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
5800: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
5810: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
5820: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
5830: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
5840: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5850: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
5860: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
5870: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
5880: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
5890: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
58a0: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
58b0: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
58c0: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
58d0: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
58e0: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
58f0: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
5900: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
5910: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
5920: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
5930: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
5940: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
5950: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
5960: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
5970: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5980: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
5990: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
59a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
59b0: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
59c0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
59d0: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
59e0: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
59f0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
5a00: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
5a10: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
5a20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5a30: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
5a40: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
5a50: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
5a60: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
5a70: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
5a80: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
5a90: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
5aa0: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
5ab0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
5ac0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
5ad0: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
5ae0: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
5af0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
5b00: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
5b10: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
5b20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5b30: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
5b40: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
5b50: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
5b60: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
5b70: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
5b80: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
5b90: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
5ba0: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
5bb0: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
5bc0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
5bd0: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
5be0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
5bf0: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
5c00: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
5c10: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
5c20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5c30: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
5c40: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
5c50: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
5c60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5c70: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
5c80: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5c90: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
5ca0: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
5cb0: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
5cc0: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
5cd0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
5ce0: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
5cf0: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
5d00: 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62  edef struct VTab
5d10: 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64  le VTable;.typed
5d20: 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74  ef struct VtabCt
5d30: 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64  x VtabCtx;.typed
5d40: 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72  ef struct Walker
5d50: 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66   Walker;.typedef
5d60: 20 73 74 72 75 63 74 20 57 68 65 72 65 50 6c 61   struct WherePla
5d70: 6e 20 57 68 65 72 65 50 6c 61 6e 3b 0a 74 79 70  n WherePlan;.typ
5d80: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
5d90: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
5da0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5db0: 57 68 65 72 65 4c 65 76 65 6c 20 57 68 65 72 65  WhereLevel Where
5dc0: 4c 65 76 65 6c 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65  Level;../*.** De
5dd0: 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62  fer sourcing vdb
5de0: 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20  e.h and btree.h 
5df0: 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20  until after the 
5e00: 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75  "u8" and .** "Bu
5e10: 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64  syHandler" typed
5e20: 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f  efs. vdbe.h also
5e30: 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20   requires a few 
5e40: 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a  of the opaque.**
5e50: 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28   pointer types (
5e60: 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65  i.e. FuncDef) de
5e70: 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a  fined above..*/.
5e80: 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e  #include "btree.
5e90: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62  h".#include "vdb
5ea0: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  e.h".#include "p
5eb0: 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ager.h".#include
5ec0: 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e   "pcache.h"..#in
5ed0: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
5ee0: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
5ef0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
5f00: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
5f10: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
5f20: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
5f30: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
5f40: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
5f50: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
5f60: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
5f70: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
5f80: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
5f90: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
5fa0: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
5fb0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
5fc0: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
5fd0: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
5fe0: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
5ff0: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
6000: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
6010: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
6020: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
6030: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
6040: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
6050: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
6060: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
6070: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
6080: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
6090: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
60a0: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
60b0: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 69 6e   file */.  u8 in
60c0: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
60d0: 2f 2a 20 30 3a 20 6e 6f 74 20 77 72 69 74 61 62  /* 0: not writab
60e0: 6c 65 2e 20 20 31 3a 20 54 72 61 6e 73 61 63 74  le.  1: Transact
60f0: 69 6f 6e 2e 20 20 32 3a 20 43 68 65 63 6b 70 6f  ion.  2: Checkpo
6100: 69 6e 74 20 2a 2f 0a 20 20 75 38 20 73 61 66 65  int */.  u8 safe
6110: 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  ty_level;     /*
6120: 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20   How aggressive 
6130: 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20  at syncing data 
6140: 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68  to disk */.  Sch
6150: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
6160: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
6170: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
6180: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
6190: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
61a0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
61b0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
61c0: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
61d0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
61e0: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
61f0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
6200: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
6210: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
6220: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
6230: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
6240: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
6250: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
6260: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
6270: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
6280: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
6290: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
62a0: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
62b0: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
62c0: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
62d0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
62e0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
62f0: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  ared object..** 
6300: 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  .** Schema objec
6310: 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ts are automatic
6320: 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64  ally deallocated
6330: 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42   when the last B
6340: 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66  tree that.** ref
6350: 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20  erences them is 
6360: 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65  destroyed.   The
6370: 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20   TEMP Schema is 
6380: 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62  manually freed b
6390: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f  y.** sqlite3_clo
63a0: 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72  se()..*.** A thr
63b0: 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64  ead must be hold
63c0: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
63d0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
63e0: 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a   Btree in order.
63f0: 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68  ** to access Sch
6400: 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68  ema content.  Th
6410: 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  is implies that 
6420: 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20  the thread must 
6430: 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69  also be.** holdi
6440: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
6450: 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63  e sqlite3 connec
6460: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61  tion pointer tha
6470: 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65  t owns the Btree
6480: 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20  ..** For a TEMP 
6490: 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65  Schema, only the
64a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   connection mute
64b0: 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  x is required..*
64c0: 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20  /.struct Schema 
64d0: 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63  {.  int schema_c
64e0: 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61  ookie;   /* Data
64f0: 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73  base schema vers
6500: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  ion number for t
6510: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e  his file */.  in
6520: 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20  t iGeneration;  
6530: 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e     /* Generation
6540: 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65   counter.  Incre
6550: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
6560: 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73   change */.  Has
6570: 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20  h tblHash;      
6580: 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20    /* All tables 
6590: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
65a0: 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73  */.  Hash idxHas
65b0: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
65c0: 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73   (named) indices
65d0: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
65e0: 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48   */.  Hash trigH
65f0: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
6600: 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78  l triggers index
6610: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
6620: 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20  Hash fkeyHash;  
6630: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65       /* All fore
6640: 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65  ign keys by refe
6650: 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d  renced table nam
6660: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53  e */.  Table *pS
6670: 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  eqTab;      /* T
6680: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
6690: 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79  ce table used by
66a0: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
66b0: 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d  /.  u8 file_form
66c0: 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65  at;      /* Sche
66d0: 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  ma format versio
66e0: 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  n for this file 
66f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
6700: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
6710: 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20  t encoding used 
6720: 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65  by this database
6730: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b   */.  u16 flags;
6740: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c             /* Fl
6750: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
6760: 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20  ith this schema 
6770: 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73  */.  int cache_s
6780: 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ize;      /* Num
6790: 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
67a0: 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65  use in the cache
67b0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
67c0: 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
67d0: 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
67e0: 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
67f0: 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62  ts in the .** Db
6800: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
6810: 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
6820: 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  e DbHasProperty(
6830: 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29  D,I,P)     (((D)
6840: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
6850: 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  ->flags&(P))==(P
6860: 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  )).#define DbHas
6870: 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  AnyProperty(D,I,
6880: 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49  P)  (((D)->aDb[I
6890: 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  ].pSchema->flags
68a0: 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
68b0: 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28  e DbSetProperty(
68c0: 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e  D,I,P)     (D)->
68d0: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
68e0: 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  flags|=(P).#defi
68f0: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
6900: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
6910: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
6920: 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  >flags&=~(P)../*
6930: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
6940: 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53  es for the DB.pS
6950: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
6960: 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42  ld..**.** The DB
6970: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c  _SchemaLoaded fl
6980: 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20  ag is set after 
6990: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
69a0: 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ema has been.** 
69b0: 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e  read into intern
69c0: 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a  al hash tables..
69d0: 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74  **.** DB_Unreset
69e0: 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74  Views means that
69f0: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65   one or more vie
6a00: 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e  ws have column n
6a10: 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76  ames that.** hav
6a20: 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75  e been filled ou
6a30: 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d  t.  If the schem
6a40: 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65  a changes, these
6a50: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69   column names mi
6a60: 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61  ght.** changes a
6a70: 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77  nd so the view w
6a80: 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72  ill need to be r
6a90: 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eset..*/.#define
6aa0: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
6ab0: 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54      0x0001  /* T
6ac0: 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  he schema has be
6ad0: 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65  en loaded */.#de
6ae0: 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56  fine DB_UnresetV
6af0: 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20  iews    0x0002  
6b00: 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61  /* Some views ha
6b10: 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d  ve defined colum
6b20: 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  n names */.#defi
6b30: 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20  ne DB_Empty     
6b40: 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
6b50: 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70   The file is emp
6b60: 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74  ty (length 0 byt
6b70: 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  es) */../*.** Th
6b80: 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66  e number of diff
6b90: 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74  erent kinds of t
6ba0: 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62  hings that can b
6bb0: 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69  e limited.** usi
6bc0: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c  ng the sqlite3_l
6bd0: 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65  imit() interface
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c  ITE_N_LIMIT (SQL
6c00: 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45  ITE_LIMIT_TRIGGE
6c10: 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a 0a 2a  R_DEPTH+1)../*.*
6c20: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * Lookaside mall
6c30: 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20 66  oc is a set of f
6c40: 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72  ixed-size buffer
6c50: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73  s that can be us
6c60: 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79  ed.** to satisfy
6c70: 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74   small transient
6c80: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
6c90: 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72 20  on requests for 
6ca0: 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63  objects.** assoc
6cb0: 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72  iated with a par
6cc0: 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65  ticular database
6cd0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68   connection.  Th
6ce0: 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b  e use of.** look
6cf0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f  aside malloc pro
6d00: 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69 63  vides a signific
6d10: 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ant performance 
6d20: 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28  enhancement.** (
6d30: 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20 61  approx 10%) by a
6d40: 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73  voiding numerous
6d50: 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71   malloc/free req
6d60: 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72 73  uests while pars
6d70: 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65  ing.** SQL state
6d80: 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ments..**.** The
6d90: 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63   Lookaside struc
6da0: 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69  ture holds confi
6db0: 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61  guration informa
6dc0: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a  tion about the.*
6dd0: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
6de0: 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45  oc subsystem.  E
6df0: 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65  ach available me
6e00: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
6e10: 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73  in.** the lookas
6e20: 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69 73  ide subsystem is
6e30: 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e   stored on a lin
6e40: 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b  ked list of Look
6e50: 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a  asideSlot.** obj
6e60: 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b  ects..**.** Look
6e70: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
6e80: 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77  s are only allow
6e90: 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74  ed for objects t
6ea0: 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61 74  hat are associat
6eb0: 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72  ed.** with a par
6ec0: 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65  ticular database
6ed0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65   connection.  He
6ee0: 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f  nce, schema info
6ef0: 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a  rmation cannot.*
6f00: 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c  * be stored in l
6f10: 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73 65  ookaside because
6f20: 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68 65   in shared cache
6f30: 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61   mode the schema
6f40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
6f50: 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  is shared by mul
6f60: 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63  tiple database c
6f70: 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65  onnections.  The
6f80: 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61  refore, while pa
6f90: 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20  rsing.** schema 
6fa0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  information, the
6fb0: 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62   Lookaside.bEnab
6fc0: 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61  led flag is clea
6fd0: 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c  red so that.** l
6fe0: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
6ff0: 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65  ions are not use
7000: 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74  d to construct t
7010: 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  he schema object
7020: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f  s..*/.struct Loo
7030: 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20 73  kaside {.  u16 s
7040: 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  z;              
7050: 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
7060: 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74  ch buffer in byt
7070: 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62  es */.  u8 bEnab
7080: 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  led;            
7090: 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73 61  /* False to disa
70a0: 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64  ble new lookasid
70b0: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
70c0: 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b  .  u8 bMalloced;
70d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
70e0: 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74  ue if pStart obt
70f0: 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74  ained from sqlit
7100: 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20  e3_malloc() */. 
7110: 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20   int nOut;      
7120: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
7130: 65 72 20 6f 66 20 62 75 66 66 65 72 73 20 63 75  er of buffers cu
7140: 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20  rrently checked 
7150: 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f  out */.  int mxO
7160: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
7170: 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61   /* Highwater ma
7180: 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20  rk for nOut */. 
7190: 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20   int anStat[3]; 
71a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68           /* 0: h
71b0: 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69  its.  1: size mi
71c0: 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d  sses.  2: full m
71d0: 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61  isses */.  Looka
71e0: 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b  sideSlot *pFree;
71f0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76     /* List of av
7200: 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20  ailable buffers 
7210: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72  */.  void *pStar
7220: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
7230: 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76  First byte of av
7240: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73  ailable memory s
7250: 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  pace */.  void *
7260: 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
7270: 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20    /* First byte 
7280: 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69  past end of avai
7290: 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d  lable space */.}
72a0: 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  ;.struct Lookasi
72b0: 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61  deSlot {.  Looka
72c0: 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b  sideSlot *pNext;
72d0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66      /* Next buff
72e0: 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  er in the list o
72f0: 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a  f free buffers *
7300: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61  /.};../*.** A ha
7310: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
7320: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
7330: 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61  s..**.** Hash ea
7340: 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  ch FuncDef struc
7350: 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66  ture into one of
7360: 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68   the FuncDefHash
7370: 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43  .a[] slots..** C
7380: 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e  ollisions are on
7390: 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61   the FuncDef.pHa
73a0: 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72  sh chain..*/.str
73b0: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
73c0: 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32  {.  FuncDef *a[2
73d0: 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73  3];       /* Has
73e0: 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63  h table for func
73f0: 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  tions */.};../*.
7400: 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65  ** Each database
7410: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61   connection is a
7420: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
7430: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
7440: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
7450: 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c   sqlite3 {.  sql
7460: 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20  ite3_vfs *pVfs; 
7470: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53             /* OS
7480: 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   Interface */.  
7490: 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64  struct Vdbe *pVd
74a0: 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  be;           /*
74b0: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
74c0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73  virtual machines
74d0: 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70   */.  CollSeq *p
74e0: 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20  DfltColl;       
74f0: 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75      /* The defau
7500: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  lt collating seq
7510: 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a  uence (BINARY) *
7520: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
7530: 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20  x *mutex;       
7540: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
7550: 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61  mutex */.  Db *a
7560: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
7570: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
7580: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e  backends */.  in
7590: 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20  t nDb;          
75a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
75b0: 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64  umber of backend
75c0: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  s currently in u
75d0: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67  se */.  int flag
75e0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
75f0: 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c        /* Miscell
7600: 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65  aneous flags. Se
7610: 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34  e below */.  i64
7620: 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20   lastRowid;     
7630: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f             /* RO
7640: 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65  WID of most rece
7650: 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61  nt insert (see a
7660: 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73  bove) */.  i64 s
7670: 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
7680: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
7690: 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65  ult mmap_size se
76a0: 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67  tting */.  unsig
76b0: 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67  ned int openFlag
76c0: 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67  s;       /* Flag
76d0: 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69  s passed to sqli
76e0: 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20  te3_vfs.xOpen() 
76f0: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65  */.  int errCode
7700: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7710: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
7720: 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51  t error code (SQ
7730: 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74  LITE_*) */.  int
7740: 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20   errMask;       
7750: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20             /* & 
7760: 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74  result codes wit
7770: 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65  h this before re
7780: 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31 36  turning */.  u16
7790: 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20   dbOptFlags;    
77a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c             /* Fl
77b0: 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69  ags to enable/di
77c0: 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69  sable optimizati
77d0: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f  ons */.  u8 auto
77e0: 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20  Commit;         
77f0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75         /* The au
7800: 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20  to-commit flag. 
7810: 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f  */.  u8 temp_sto
7820: 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  re;             
7830: 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a     /* 1: file 2:
7840: 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75   memory 0: defau
7850: 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f  lt */.  u8 mallo
7860: 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20  cFailed;        
7870: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
7880: 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20   we have seen a 
7890: 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a  malloc failure *
78a0: 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d  /.  u8 dfltLockM
78b0: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
78c0: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63    /* Default loc
78d0: 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74  king-mode for at
78e0: 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20  tached dbs */.  
78f0: 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74  signed char next
7900: 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a  Autovac;      /*
7910: 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67   Autovac setting
7920: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
7930: 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70   >=0 */.  u8 sup
7940: 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20  pressErr;       
7950: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
7960: 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65  t issue error me
7970: 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a  ssages if true *
7980: 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e  /.  u8 vtabOnCon
7990: 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20  flict;          
79a0: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
79b0: 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62  turn for s3_vtab
79c0: 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a  _on_conflict() *
79d0: 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63  /.  u8 isTransac
79e0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  tionSavepoint;  
79f0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
7a00: 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70   outermost savep
7a10: 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a  oint is a TS */.
7a20: 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69    int nextPagesi
7a30: 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ze;             
7a40: 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65  /* Pagesize afte
7a50: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a  r VACUUM if >0 *
7a60: 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20  /.  u32 magic;  
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65    /* Magic numbe
7a90: 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62  r for detect lib
7aa0: 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20  rary misuse */. 
7ab0: 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20   int nChange;   
7ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7ad0: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
7ae0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   by sqlite3_chan
7af0: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  ges() */.  int n
7b00: 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20  TotalChange;    
7b10: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
7b20: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
7b30: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
7b40: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61  ges() */.  int a
7b50: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c  Limit[SQLITE_N_L
7b60: 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69  IMIT];   /* Limi
7b70: 74 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  ts */.  struct s
7b80: 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b  qlite3InitInfo {
7b90: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
7ba0: 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67  tion used during
7bb0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
7bc0: 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e  */.    int newTn
7bd0: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
7be0: 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f     /* Rootpage o
7bf0: 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  f table being in
7c00: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
7c10: 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20   u8 iDb;        
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7c30: 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73  Which db file is
7c40: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
7c50: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73  ed */.    u8 bus
7c60: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
7c70: 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66        /* TRUE if
7c80: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69   currently initi
7c90: 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75  alizing */.    u
7ca0: 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b  8 orphanTrigger;
7cb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
7cc0: 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  st statement is 
7cd0: 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72  orphaned TEMP tr
7ce0: 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e 69  igger */.  } ini
7cf0: 74 3b 0a 20 20 69 6e 74 20 61 63 74 69 76 65 56  t;.  int activeV
7d00: 64 62 65 43 6e 74 3b 20 20 20 20 20 20 20 20 20  dbeCnt;         
7d10: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
7d20: 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20  VDBEs currently 
7d30: 65 78 65 63 75 74 69 6e 67 20 2a 2f 0a 20 20 69  executing */.  i
7d40: 6e 74 20 77 72 69 74 65 56 64 62 65 43 6e 74 3b  nt writeVdbeCnt;
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7d60: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
7d70: 20 56 44 42 45 73 20 74 68 61 74 20 61 72 65 20   VDBEs that are 
7d80: 77 72 69 74 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  writing */.  int
7d90: 20 76 64 62 65 45 78 65 63 43 6e 74 3b 20 20 20   vdbeExecCnt;   
7da0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
7db0: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
7dc0: 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63  alls to VdbeExec
7dd0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74  () */.  int nExt
7de0: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
7df0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
7e00: 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73  of loaded extens
7e10: 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ions */.  void *
7e20: 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20  *aExtension;    
7e30: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
7e40: 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61   of shared libra
7e50: 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20  ry handles */.  
7e60: 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76  void (*xTrace)(v
7e70: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
7e80: 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72 61  );        /* Tra
7e90: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
7ea0: 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67   void *pTraceArg
7eb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7ec0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
7ed0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72  gument to the tr
7ee0: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
7ef0: 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c    void (*xProfil
7f00: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
7f10: 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50  har*,u64);  /* P
7f20: 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f  rofiling functio
7f30: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  n */.  void *pPr
7f40: 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20  ofileArg;       
7f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f60: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
7f70: 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e  profile function
7f80: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d   */.  void *pCom
7f90: 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20  mitArg;         
7fa0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
7fb0: 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61  ent to xCommitCa
7fc0: 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20  llback() */   . 
7fd0: 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61   int (*xCommitCa
7fe0: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20  llback)(void*); 
7ff0: 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74     /* Invoked at
8000: 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a   every commit. *
8010: 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62  /.  void *pRollb
8020: 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ackArg;         
8030: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
8040: 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61  t to xRollbackCa
8050: 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20  llback() */   . 
8060: 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63   void (*xRollbac
8070: 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  kCallback)(void*
8080: 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74  ); /* Invoked at
8090: 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a   every commit. *
80a0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74  /.  void *pUpdat
80b0: 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78  eArg;.  void (*x
80c0: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28  UpdateCallback)(
80d0: 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
80e0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
80f0: 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29  r*,sqlite_int64)
8100: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
8110: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
8120: 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28  (*xWalCallback)(
8130: 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20  void *, sqlite3 
8140: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
8150: 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
8160: 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20  WalArg;.#endif. 
8170: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
8180: 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ed)(void*,sqlite
8190: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
81a0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
81b0: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
81c0: 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
81d0: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
81e0: 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20  ,const void*);. 
81f0: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
8200: 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  edArg;.  sqlite3
8210: 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20  _value *pErr;   
8220: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
8230: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
8240: 61 67 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  age */.  char *z
8250: 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 20 20  ErrMsg;         
8260: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
8270: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
8280: 61 67 65 20 28 55 54 46 2d 38 20 65 6e 63 6f 64  age (UTF-8 encod
8290: 65 64 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ed) */.  char *z
82a0: 45 72 72 4d 73 67 31 36 3b 20 20 20 20 20 20 20  ErrMsg16;       
82b0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
82c0: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
82d0: 61 67 65 20 28 55 54 46 2d 31 36 20 65 6e 63 6f  age (UTF-16 enco
82e0: 64 65 64 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  ded) */.  union 
82f0: 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69  {.    volatile i
8300: 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64  nt isInterrupted
8310: 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c  ; /* True if sql
8320: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68  ite3_interrupt h
8330: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
8340: 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74  /.    double not
8350: 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20  Used1;          
8360: 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20    /* Spacer */. 
8370: 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69   } u1;.  Lookasi
8380: 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20  de lookaside;   
8390: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73         /* Lookas
83a0: 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69  ide malloc confi
83b0: 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e  guration */.#ifn
83c0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
83d0: 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
83e0: 69 6e 74 20 28 2a 78 41 75 74 68 29 28 76 6f 69  int (*xAuth)(voi
83f0: 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
8400: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
8410: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
8420: 20 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20   char*);.       
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8440: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65           /* Acce
8450: 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  ss authorization
8460: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
8470: 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20  oid *pAuthArg;  
8480: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8490: 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  1st argument to 
84a0: 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20  the access auth 
84b0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  function */.#end
84c0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
84d0: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
84e0: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28  CALLBACK.  int (
84f0: 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64  *xProgress)(void
8500: 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20   *);     /* The 
8510: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
8520: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  k */.  void *pPr
8530: 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20  ogressArg;      
8540: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
8550: 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73   to the progress
8560: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69   callback */.  i
8570: 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b  nt nProgressOps;
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8590: 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65  Number of opcode
85a0: 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63  s for progress c
85b0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69  allback */.#endi
85c0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
85d0: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
85e0: 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73  LE.  int nVTrans
85f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8600: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
8610: 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20  size of aVTrans 
8620: 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c  */.  Hash aModul
8630: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
8640: 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20     /* populated 
8650: 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  by sqlite3_creat
8660: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
8670: 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74  VtabCtx *pVtabCt
8680: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x;            /*
8690: 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74   Context for act
86a0: 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74  ive vtab connect
86b0: 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61  /create */.  VTa
86c0: 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20  ble **aVTrans;  
86d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69             /* Vi
86e0: 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74  rtual tables wit
86f0: 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  h open transacti
8700: 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ons */.  VTable 
8710: 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20  *pDisconnect;   
8720: 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74   /* Disconnect t
8730: 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c  hese in next sql
8740: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a  ite3_prepare() *
8750: 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63 44  /.#endif.  FuncD
8760: 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20  efHash aFunc;   
8770: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68           /* Hash
8780: 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63   table of connec
8790: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a  tion functions *
87a0: 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65  /.  Hash aCollSe
87b0: 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
87c0: 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69    /* All collati
87d0: 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a  ng sequences */.
87e0: 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75    BusyHandler bu
87f0: 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20  syHandler;      
8800: 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b  /* Busy callback
8810: 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74   */.  Db aDbStat
8820: 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20  ic[2];          
8830: 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70      /* Static sp
8840: 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65  ace for the 2 de
8850: 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a  fault backends *
8860: 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
8870: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
8880: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
8890: 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ive savepoints *
88a0: 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65  /.  int busyTime
88b0: 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  out;            
88c0: 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65    /* Busy handle
88d0: 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73  r timeout, in ms
88e0: 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76  ec */.  int nSav
88f0: 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20  epoint;         
8900: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
8910: 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69  of non-transacti
8920: 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f  on savepoints */
8930: 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e  .  int nStatemen
8940: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
8950: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
8960: 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74  sted statement-t
8970: 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a  ransactions  */.
8980: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43    i64 nDeferredC
8990: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
89a0: 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20  /* Net deferred 
89b0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73  constraints this
89c0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f   transaction. */
89d0: 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46  .  int *pnBytesF
89e0: 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  reed;           
89f0: 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c   /* If not NULL,
8a00: 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20   increment this 
8a10: 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 0a  in DbFree() */..
8a20: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
8a30: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
8a40: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
8a50: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
8a60: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
8a70: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
8a80: 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74  MASTER .  ** mut
8a90: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
8aa0: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
8ab0: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
8ac0: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20  in notify.c. .  
8ad0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
8ae0: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
8af0: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
8b00: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
8b10: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
8b20: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
8b30: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
8b40: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
8b50: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
8b60: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
8b70: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
8b80: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
8b90: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
8ba0: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
8bb0: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
8bc0: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
8bd0: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
8be0: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
8bf0: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
8c00: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
8c10: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
8c20: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
8c30: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
8c40: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
8c50: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
8c60: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
8c70: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
8c80: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
8c90: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
8ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8cb0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
8cc0: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
8cd0: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
8ce0: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
8cf0: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
8d00: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
8d10: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
8d20: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
8d30: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
8d40: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
8d50: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
8d60: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
8d70: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73  * A macro to dis
8d80: 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69  cover the encodi
8d90: 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ng of a database
8da0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43  ..*/.#define ENC
8db0: 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b  (db) ((db)->aDb[
8dc0: 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29  0].pSchema->enc)
8dd0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
8de0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
8df0: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a  sqlite3.flags..*
8e00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8e10: 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20  _VdbeTrace      
8e20: 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54  0x00000001  /* T
8e30: 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42  rue to trace VDB
8e40: 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23  E execution */.#
8e50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e  define SQLITE_In
8e60: 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30  ternChanges  0x0
8e70: 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f  0000002  /* Unco
8e80: 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62  mmitted Hash tab
8e90: 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  le changes */.#d
8ea0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
8eb0: 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30  lColNames   0x00
8ec0: 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20  000004  /* Show 
8ed0: 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  full column name
8ee0: 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23  s on SELECT */.#
8ef0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68  define SQLITE_Sh
8f00: 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30  ortColNames  0x0
8f10: 30 30 30 30 30 30 38 20 20 2f 2a 20 53 68 6f 77  0000008  /* Show
8f20: 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e   short columns n
8f30: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
8f40: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
8f50: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 31 30        0x00000010
8f60: 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20    /* Count rows 
8f70: 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52  changed by INSER
8f80: 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  T, */.          
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fb0: 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20  /*   DELETE, or 
8fc0: 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72  UPDATE and retur
8fd0: 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  n */.           
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 2f                 /
9000: 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73  *   the count us
9010: 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20  ing a callback. 
9020: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9030: 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20  E_NullCallback  
9040: 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20   0x00000020  /* 
9050: 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62  Invoke the callb
9060: 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20  ack once if the 
9070: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
9080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
90a0: 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20    result set is 
90b0: 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
90c0: 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
90d0: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 30 34         0x0000004
90e0: 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e  0  /* Debug prin
90f0: 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63  t SQL as it exec
9100: 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  utes */.#define 
9110: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
9120: 6e 67 20 20 20 20 30 78 30 30 30 30 30 30 38 30  ng    0x00000080
9130: 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69    /* Debug listi
9140: 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67  ngs of VDBE prog
9150: 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rams */.#define 
9160: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
9170: 6d 61 20 20 20 20 30 78 30 30 30 30 30 31 30 30  ma    0x00000100
9180: 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74    /* OK to updat
9190: 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
91a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
91b0: 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65  E_VdbeAddopTrace
91c0: 20 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20   0x00000200  /* 
91d0: 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62  Trace sqlite3Vdb
91e0: 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a  eAddOp() calls *
91f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9200: 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20  _IgnoreChecks   
9210: 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44  0x00000400  /* D
9220: 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68  o not enforce ch
9230: 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
9240: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9250: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
9260: 64 20 30 78 30 30 30 30 38 30 30 20 20 2f 2a 20  d 0x0000800  /* 
9270: 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  For shared-cache
9280: 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65   mode */.#define
9290: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
92a0: 6c 65 46 6d 74 20 20 30 78 30 30 30 30 31 30 30  leFmt  0x0000100
92b0: 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77  0  /* Create new
92c0: 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f   databases in fo
92d0: 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e  rmat 1 */.#defin
92e0: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  e SQLITE_FullFSy
92f0: 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 32 30  nc      0x000020
9300: 30 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  00  /* Use full 
9310: 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63  fsync on the bac
9320: 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kend */.#define 
9330: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
9340: 53 79 6e 63 20 20 30 78 30 30 30 30 34 30 30 30  Sync  0x00004000
9350: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
9360: 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69  ync for checkpoi
9370: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
9380: 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64  LITE_RecoveryMod
9390: 65 20 20 20 30 78 30 30 30 30 38 30 30 30 20 20  e   0x00008000  
93a0: 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61  /* Ignore schema
93b0: 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
93c0: 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73  ne SQLITE_Revers
93d0: 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 31 30  eOrder   0x00010
93e0: 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20  000  /* Reverse 
93f0: 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54  unordered SELECT
9400: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
9410: 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20  ITE_RecTriggers 
9420: 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f     0x00020000  /
9430: 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69  * Enable recursi
9440: 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  ve triggers */.#
9450: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f  define SQLITE_Fo
9460: 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30  reignKeys    0x0
9470: 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f  0040000  /* Enfo
9480: 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  rce foreign key 
9490: 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a  constraints  */.
94a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
94b0: 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78  utoIndex      0x
94c0: 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 61  00080000  /* Ena
94d0: 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e  ble automatic in
94e0: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
94f0: 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75   SQLITE_PreferBu
9500: 69 6c 74 69 6e 20 20 30 78 30 30 31 30 30 30 30  iltin  0x0010000
9510: 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65  0  /* Preference
9520: 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e   to built-in fun
9530: 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  cs */.#define SQ
9540: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
9550: 6f 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20  on  0x00200000  
9560: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
9570: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
9580: 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c  ine SQLITE_Enabl
9590: 65 54 72 69 67 67 65 72 20 20 30 78 30 30 34 30  eTrigger  0x0040
95a0: 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f  0000  /* True to
95b0: 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73   enable triggers
95c0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20   */../*.** Bits 
95d0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64  of the sqlite3.d
95e0: 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20  bOptFlags field 
95f0: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79  that are used by
9600: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
9610: 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c  test_control(SQL
9620: 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54  ITE_TESTCTRL_OPT
9630: 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20  IMIZATIONS,...) 
9640: 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20  interface to.** 
9650: 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61  selectively disa
9660: 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69  ble various opti
9670: 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64  mizations..*/.#d
9680: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
9690: 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30  ryFlattener 0x00
96a0: 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c  01   /* Query fl
96b0: 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66  attening */.#def
96c0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d  ine SQLITE_Colum
96d0: 6e 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32  nCache    0x0002
96e0: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63     /* Column cac
96f0: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
9700: 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65  LITE_GroupByOrde
9710: 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20  r   0x0004   /* 
9720: 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66  GROUPBY cover of
9730: 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66   ORDERBY */.#def
9740: 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f  ine SQLITE_Facto
9750: 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38  rOutConst 0x0008
9760: 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66     /* Constant f
9770: 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66  actoring */.#def
9780: 69 6e 65 20 53 51 4c 49 54 45 5f 49 64 78 52 65  ine SQLITE_IdxRe
9790: 61 6c 41 73 49 6e 74 20 20 20 30 78 30 30 31 30  alAsInt   0x0010
97a0: 20 20 20 2f 2a 20 53 74 6f 72 65 20 52 45 41 4c     /* Store REAL
97b0: 20 61 73 20 49 4e 54 20 69 6e 20 69 6e 64 69 63   as INT in indic
97c0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
97d0: 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74  LITE_DistinctOpt
97e0: 20 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20      0x0020   /* 
97f0: 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69  DISTINCT using i
9800: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
9810: 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64  e SQLITE_CoverId
9820: 78 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20  xScan   0x0040  
9830: 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64   /* Covering ind
9840: 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66  ex scans */.#def
9850: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72  ine SQLITE_Order
9860: 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30  ByIdxJoin 0x0080
9870: 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f     /* ORDER BY o
9880: 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65  f joins via inde
9890: 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  x */.#define SQL
98a0: 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e  ITE_SubqCoroutin
98b0: 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45  e  0x0100   /* E
98c0: 76 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69  valuate subqueri
98d0: 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73  es as coroutines
98e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
98f0: 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20  TE_Transitive   
9900: 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72    0x0200   /* Tr
9910: 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61  ansitive constra
9920: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
9930: 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20  SQLITE_AllOpts  
9940: 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f        0xffff   /
9950: 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69  * All optimizati
9960: 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61  ons */../*.** Ma
9970: 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67  cros for testing
9980: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
9990: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72  optimizations ar
99a0: 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73  e enabled or dis
99b0: 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  abled..*/.#ifnde
99c0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
99d0: 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69  ILTIN_TEST.#defi
99e0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44  ne OptimizationD
99f0: 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  isabled(db, mask
9a00: 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74  )  (((db)->dbOpt
9a10: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30  Flags&(mask))!=0
9a20: 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  ).#define Optimi
9a30: 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62  zationEnabled(db
9a40: 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29  , mask)   (((db)
9a50: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
9a60: 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  sk))==0).#else.#
9a70: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
9a80: 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20  ionDisabled(db, 
9a90: 6d 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65  mask)  0.#define
9aa0: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61   OptimizationEna
9ab0: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
9ac0: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
9ad0: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
9ae0: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e   for the sqlite.
9af0: 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20  magic field..** 
9b00: 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20  The numbers are 
9b10: 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64  obtained at rand
9b20: 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73  om and have no s
9b30: 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20  pecial meaning, 
9b40: 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65  other.** than be
9b50: 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f  ing distinct fro
9b60: 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a  m one another..*
9b70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9b80: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20  _MAGIC_OPEN     
9b90: 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44  0xa029a697  /* D
9ba0: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20  atabase is open 
9bb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9bc0: 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20  E_MAGIC_CLOSED  
9bd0: 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20   0x9f3c2d33  /* 
9be0: 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  Database is clos
9bf0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
9c00: 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20  LITE_MAGIC_SICK 
9c10: 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20      0x4b771290  
9c20: 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61  /* Error and awa
9c30: 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23  iting close */.#
9c40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
9c50: 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66  GIC_BUSY     0xf
9c60: 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61  03b7906  /* Data
9c70: 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69  base currently i
9c80: 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  n use */.#define
9c90: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52   SQLITE_MAGIC_ER
9ca0: 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33  ROR    0xb535793
9cb0: 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f  0  /* An SQLITE_
9cc0: 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63  MISUSE error occ
9cd0: 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  urred */.#define
9ce0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f   SQLITE_MAGIC_ZO
9cf0: 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37  MBIE   0x64cffc7
9d00: 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68  f  /* Close with
9d10: 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   last statement 
9d20: 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  close */../*.** 
9d30: 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f  Each SQL functio
9d40: 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  n is defined by 
9d50: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
9d60: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
9d70: 73 74 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f  structure.  A po
9d80: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
9d90: 72 75 63 74 75 72 65 20 69 73 20 73 74 6f 72 65  ructure is store
9da0: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  d in the sqlite.
9db0: 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61  aFunc.** hash ta
9dc0: 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69  ble.  When multi
9dd0: 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61  ple functions ha
9de0: 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ve the same name
9df0: 2c 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65  , the hash table
9e00: 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  .** points to a 
9e10: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74  linked list of t
9e20: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 2e  hese structures.
9e30: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
9e40: 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b  ef {.  i16 nArg;
9e50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9e60: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
9e70: 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e  ts.  -1 means un
9e80: 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 38 20  limited */.  u8 
9e90: 69 50 72 65 66 45 6e 63 3b 20 20 20 20 20 20 20  iPrefEnc;       
9ea0: 20 20 2f 2a 20 50 72 65 66 65 72 72 65 64 20 74    /* Preferred t
9eb0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 28 53 51  ext encoding (SQ
9ec0: 4c 49 54 45 5f 55 54 46 38 2c 20 31 36 4c 45 2c  LITE_UTF8, 16LE,
9ed0: 20 31 36 42 45 29 20 2a 2f 0a 20 20 75 38 20 66   16BE) */.  u8 f
9ee0: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
9ef0: 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61   /* Some combina
9f00: 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46  tion of SQLITE_F
9f10: 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20  UNC_* */.  void 
9f20: 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20  *pUserData;     
9f30: 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72  /* User data par
9f40: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63  ameter */.  Func
9f50: 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Def *pNext;     
9f60: 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f   /* Next functio
9f70: 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65  n with same name
9f80: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75   */.  void (*xFu
9f90: 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  nc)(sqlite3_cont
9fa0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
9fb0: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65  _value**); /* Re
9fc0: 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a  gular function *
9fd0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70  /.  void (*xStep
9fe0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
9ff0: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
a000: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72  alue**); /* Aggr
a010: 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20  egate step */.  
a020: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65  void (*xFinalize
a030: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
a040: 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  t*);            
a050: 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65      /* Aggregate
a060: 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20   finalizer */.  
a070: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
a080: 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65       /* SQL name
a090: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
a0a0: 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  . */.  FuncDef *
a0b0: 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e  pHash;      /* N
a0c0: 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65  ext with a diffe
a0d0: 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68  rent name but th
a0e0: 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20  e same hash */. 
a0f0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
a100: 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20  *pDestructor;   
a110: 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75  /* Reference cou
a120: 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20  nted destructor 
a130: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a  function */.};..
a140: 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  /*.** This struc
a150: 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65  ture encapsulate
a160: 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  s a user-functio
a170: 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c  n destructor cal
a180: 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e  lback (as.** con
a190: 66 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72  figured using cr
a1a0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
a1b0: 28 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65  ()) and a refere
a1c0: 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65  nce counter. Whe
a1d0: 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63  n.** create_func
a1e0: 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c  tion_v2() is cal
a1f0: 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  led to create a 
a200: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20  function with a 
a210: 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61  destructor,.** a
a220: 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f   single object o
a230: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61  f this type is a
a240: 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65  llocated. FuncDe
a250: 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73  structor.nRef is
a260: 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20   set to .** the 
a270: 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65  number of FuncDe
a280: 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65  f objects create
a290: 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33  d (either 1 or 3
a2a0: 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  , depending on w
a2b0: 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74  hether.** or not
a2c0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65   the specified e
a2d0: 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54  ncoding is SQLIT
a2e0: 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63  E_ANY). The Func
a2f0: 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a  Def.pDestructor.
a300: 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63  ** member of eac
a310: 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e  h of the new Fun
a320: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
a330: 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  set to point to 
a340: 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  the allocated.**
a350: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
a360: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65  .**.** Thereafte
a370: 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74  r, when one of t
a380: 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  he FuncDef objec
a390: 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74  ts is deleted, t
a3a0: 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20  he reference.** 
a3b0: 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62  count on this ob
a3c0: 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e  ject is decremen
a3d0: 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61  ted. When it rea
a3e0: 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74  ches 0, the dest
a3f0: 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76  ructor.** is inv
a400: 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e  oked and the Fun
a410: 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75  cDestructor stru
a420: 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a  cture freed..*/.
a430: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
a440: 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52  uctor {.  int nR
a450: 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  ef;.  void (*xDe
a460: 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a  stroy)(void *);.
a470: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
a480: 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  a;.};../*.** Pos
a490: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
a4a0: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20   FuncDef.flags. 
a4b0: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f   Note that the _
a4c0: 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45  LENGTH and _TYPE
a4d0: 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73  OF.** values mus
a4e0: 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
a4f0: 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
a500: 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45   and OPFLAG_TYPE
a510: 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a  OFARG.  There.**
a520: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
a530: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
a540: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
a550: 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  his..*/.#define 
a560: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45  SQLITE_FUNC_LIKE
a570: 20 20 20 20 20 30 78 30 31 20 2f 2a 20 43 61 6e       0x01 /* Can
a580: 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c  didate for the L
a590: 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  IKE optimization
a5a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a5b0: 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20  TE_FUNC_CASE    
a5c0: 20 30 78 30 32 20 2f 2a 20 43 61 73 65 2d 73 65   0x02 /* Case-se
a5d0: 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70  nsitive LIKE-typ
a5e0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  e function */.#d
a5f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
a600: 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30 34 20  C_EPHEM    0x04 
a610: 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44  /* Ephemeral.  D
a620: 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20  elete with VDBE 
a630: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a640: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
a650: 30 78 30 38 20 2f 2a 20 73 71 6c 69 74 65 33 47  0x08 /* sqlite3G
a660: 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20  etFuncCollSeq() 
a670: 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20  might be called 
a680: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a690: 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
a6a0: 30 78 31 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0x10 /* Built-in
a6b0: 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67   count(*) aggreg
a6c0: 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ate */.#define S
a6d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45  QLITE_FUNC_COALE
a6e0: 53 43 45 20 30 78 32 30 20 2f 2a 20 42 75 69 6c  SCE 0x20 /* Buil
a6f0: 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20  t-in coalesce() 
a700: 6f 72 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63  or ifnull() func
a710: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
a720: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
a730: 54 48 20 20 20 30 78 34 30 20 2f 2a 20 42 75 69  TH   0x40 /* Bui
a740: 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66  lt-in length() f
a750: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
a760: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  ne SQLITE_FUNC_T
a770: 59 50 45 4f 46 20 20 20 30 78 38 30 20 2f 2a 20  YPEOF   0x80 /* 
a780: 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28  Built-in typeof(
a790: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f  ) function */../
a7a0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
a7b0: 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c  ng three macros,
a7c0: 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b   FUNCTION(), LIK
a7d0: 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52  EFUNC() and AGGR
a7e0: 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75  EGATE() are.** u
a7f0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68  sed to create th
a800: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66  e initializers f
a810: 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73  or the FuncDef s
a820: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a  tructures..**.**
a830: 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d     FUNCTION(zNam
a840: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
a850: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
a860: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
a870: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
a880: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
a890: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
a8a0: 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d  e .**     implem
a8b0: 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74  ented by C funct
a8c0: 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61  ion xFunc that a
a8d0: 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
a8e0: 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20  ments. The.**   
a8f0: 20 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61    value passed a
a900: 73 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74  s iArg is cast t
a910: 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20  o a (void*) and 
a920: 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a  made available.*
a930: 2a 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65  *     as the use
a940: 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f  r-data (sqlite3_
a950: 75 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72  user_data()) for
a960: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49   the function. I
a970: 66 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65  f .**     argume
a980: 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20  nt bNC is true, 
a990: 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  then the SQLITE_
a9a0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c  FUNC_NEEDCOLL fl
a9b0: 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  ag is set..**.**
a9c0: 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61     AGGREGATE(zNa
a9d0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
a9e0: 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  bNC, xStep, xFin
a9f0: 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  al).**     Used 
aa00: 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67  to create an agg
aa10: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
aa20: 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65  definition imple
aa30: 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20  mented by.**    
aa40: 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73   the C functions
aa50: 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61   xStep and xFina
aa60: 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75  l. The first fou
aa70: 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20  r parameters.** 
aa80: 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65      are interpre
aa90: 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
aaa0: 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74  way as the first
aab0: 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f   4 parameters to
aac0: 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e  .**     FUNCTION
aad0: 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45  ()..**.**   LIKE
aae0: 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
aaf0: 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a  , pArg, flags).*
ab00: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
ab10: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
ab20: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
ab30: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
ab40: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68  zName .**     th
ab50: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
ab60: 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
ab70: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
ab80: 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20  a call to C .** 
ab90: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b      function lik
aba0: 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20  eFunc. Argument 
abb0: 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  pArg is cast to 
abc0: 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d  a (void *) and m
abd0: 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c  ade.**     avail
abe0: 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63  able as the func
abf0: 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28  tion user-data (
ac00: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
ac10: 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20  a()). The.**    
ac20: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76   FuncDef.flags v
ac30: 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
ac40: 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73  o the value pass
ac50: 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a  ed as the flags.
ac60: 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72  **     parameter
ac70: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e  ..*/.#define FUN
ac80: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
ac90: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
aca0: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
acb0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 28 62 4e  SQLITE_UTF8, (bN
acc0: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
acd0: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
ace0: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
acf0: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
ad00: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
ad10: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e  , 0}.#define FUN
ad20: 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41  CTION2(zName, nA
ad30: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
ad40: 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73  Func, extraFlags
ad50: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
ad60: 49 54 45 5f 55 54 46 38 2c 20 28 62 4e 43 2a 53  ITE_UTF8, (bNC*S
ad70: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
ad80: 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
ad90: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
ada0: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
adb0: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
adc0: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
add0: 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f  fine STR_FUNCTIO
ade0: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  N(zName, nArg, p
adf0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
ae00: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
ae10: 54 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53 51 4c  TE_UTF8, bNC*SQL
ae20: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
ae30: 4c 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c  L, \.   pArg, 0,
ae40: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
ae50: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
ae60: 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61  ine LIKEFUNC(zNa
ae70: 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66  me, nArg, arg, f
ae80: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
ae90: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 66 6c   SQLITE_UTF8, fl
aea0: 61 67 73 2c 20 28 76 6f 69 64 20 2a 29 61 72 67  ags, (void *)arg
aeb0: 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
aec0: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
aed0: 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45  0}.#define AGGRE
aee0: 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
aef0: 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
af00: 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e  , xFinal) \.  {n
af10: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
af20: 2c 20 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  , nc*SQLITE_FUNC
af30: 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20 20 20  _NEEDCOLL, \.   
af40: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
af50: 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53  R(arg), 0, 0, xS
af60: 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d  tep,xFinal,#zNam
af70: 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  e,0,0}../*.** Al
af80: 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f  l current savepo
af90: 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ints are stored 
afa0: 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  in a linked list
afb0: 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20   starting at.** 
afc0: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
afd0: 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  nt. The first el
afe0: 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73  ement in the lis
aff0: 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65  t is the most re
b000: 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64  cently.** opened
b010: 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65   savepoint. Save
b020: 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64  points are added
b030: 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20   to the list by 
b040: 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53  the vdbe.** OP_S
b050: 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63  avepoint instruc
b060: 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
b070: 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68  Savepoint {.  ch
b080: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
b090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0a0: 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e    /* Savepoint n
b0b0: 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61  ame (nul-termina
b0c0: 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ted) */.  i64 nD
b0d0: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
b0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b0f0: 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
b100: 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e  red fk violation
b110: 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  s */.  Savepoint
b120: 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
b130: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
b140: 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28  rent savepoint (
b150: 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f  if any) */.};../
b160: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
b170: 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74  ng are used as t
b180: 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65  he second parame
b190: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61  ter to sqlite3Sa
b1a0: 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e  vepoint(),.** an
b1b0: 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75  d as the P1 argu
b1c0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53  ment to the OP_S
b1d0: 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63  avepoint instruc
b1e0: 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  tion..*/.#define
b1f0: 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
b200: 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20        0.#define 
b210: 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
b220: 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53  E    1.#define S
b230: 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
b240: 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  K   2.../*.** Ea
b250: 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65  ch SQLite module
b260: 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20   (virtual table 
b270: 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64  definition) is d
b280: 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20  efined by an.** 
b290: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
b2a0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
b2b0: 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74  ure, stored in t
b2c0: 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75  he sqlite3.aModu
b2d0: 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65  le.** hash table
b2e0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75  ..*/.struct Modu
b2f0: 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  le {.  const sql
b300: 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
b310: 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43  dule;       /* C
b320: 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73  allback pointers
b330: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
b340: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
b350: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
b360: 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  me passed to cre
b370: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
b380: 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20    void *pAux;   
b390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3a0: 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70         /* pAux p
b3b0: 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
b3c0: 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f  module() */.  vo
b3d0: 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76  id (*xDestroy)(v
b3e0: 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20  oid *);         
b3f0: 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73     /* Module des
b400: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
b410: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e   */.};../*.** in
b420: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
b430: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61  each column of a
b440: 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68  n SQL table is h
b450: 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e  eld in an instan
b460: 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
b470: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
b480: 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68  ct Column {.  ch
b490: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f  ar *zName;     /
b4a0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63  * Name of this c
b4b0: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20  olumn */.  Expr 
b4c0: 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44  *pDflt;     /* D
b4d0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
b4e0: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
b4f0: 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20   char *zDflt;   
b500: 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65    /* Original te
b510: 78 74 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c  xt of the defaul
b520: 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61  t value */.  cha
b530: 72 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a  r *zType;     /*
b540: 20 44 61 74 61 20 74 79 70 65 20 66 6f 72 20 74   Data type for t
b550: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
b560: 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20  char *zColl;    
b570: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
b580: 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c  quence.  If NULL
b590: 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c  , use the defaul
b5a0: 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c  t */.  u8 notNul
b5b0: 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45  l;      /* An OE
b5c0: 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c  _ code for handl
b5d0: 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63  ing a NOT NULL c
b5e0: 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63  onstraint */.  c
b5f0: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
b600: 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51  /* One of the SQ
b610: 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c  LITE_AFF_... val
b620: 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 63 6f 6c  ues */.  u16 col
b630: 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 42 6f 6f  Flags;    /* Boo
b640: 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e  lean properties.
b650: 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64    See COLFLAG_ d
b660: 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a  efines below */.
b670: 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76  };../* Allowed v
b680: 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e  alues for Column
b690: 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64  .colFlags:.*/.#d
b6a0: 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52  efine COLFLAG_PR
b6b0: 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20  IMKEY  0x0001   
b6c0: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61   /* Column is pa
b6d0: 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72  rt of the primar
b6e0: 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
b6f0: 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20   COLFLAG_HIDDEN 
b700: 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41    0x0002    /* A
b710: 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69   hidden column i
b720: 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  n a virtual tabl
b730: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43  e */../*.** A "C
b740: 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63  ollating Sequenc
b750: 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  e" is defined by
b760: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
b770: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
b780: 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63   structure. Conc
b790: 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c  eptually, a coll
b7a0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63  ating sequence c
b7b0: 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d  onsists of a nam
b7c0: 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61  e and.** a compa
b7d0: 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68  rison routine th
b7e0: 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f  at defines the o
b7f0: 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71  rder of that seq
b800: 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  uence..**.** If 
b810: 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20  CollSeq.xCmp is 
b820: 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74  NULL, it means t
b830: 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61  hat the.** colla
b840: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
b850: 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64   undefined.  Ind
b860: 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e  ices built on an
b870: 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f   undefined.** co
b880: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
b890: 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64   may not be read
b8a0: 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a   or written..*/.
b8b0: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b  struct CollSeq {
b8c0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
b8d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
b8e0: 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e   of the collatin
b8f0: 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d  g sequence, UTF-
b900: 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75  8 encoded */.  u
b910: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
b920: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
b930: 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79  oding handled by
b940: 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69   xCmp() */.  voi
b950: 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20  d *pUser;       
b960: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
b970: 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a  ment to xCmp() *
b980: 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28  /.  int (*xCmp)(
b990: 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
b9a0: 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e   void*, int, con
b9b0: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
b9c0: 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29  d (*xDel)(void*)
b9d0: 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72  ;  /* Destructor
b9e0: 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b   for pUser */.};
b9f0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f  ../*.** A sort o
ba00: 72 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68  rder can be eith
ba10: 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a  er ASC or DESC..
ba20: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ba30: 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30  E_SO_ASC       0
ba40: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
ba50: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
ba60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ba70: 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f  O_DESC      1  /
ba80: 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
ba90: 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a  ing order */../*
baa0: 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e  .** Column affin
bab0: 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a  ity types..**.**
bac0: 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 20 68   These used to h
bad0: 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d  ave mnemonic nam
bae0: 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53  e like 'i' for S
baf0: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
bb00: 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72  R and.** 't' for
bb10: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
bb20: 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20 73 61  .  But we can sa
bb30: 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63  ve a little spac
bb40: 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a  e and improve.**
bb50: 20 74 68 65 20 73 70 65 65 64 20 61 20 6c 69 74   the speed a lit
bb60: 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67  tle by numbering
bb70: 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73   the values cons
bb80: 65 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a  ecutively.  .**.
bb90: 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68  ** But rather th
bba0: 61 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20  an start with 0 
bbb0: 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77  or 1, we begin w
bbc0: 69 74 68 20 27 61 27 2e 20 20 54 68 61 74 20 77  ith 'a'.  That w
bbd0: 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74  ay,.** when mult
bbe0: 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79  iple affinity ty
bbf0: 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e  pes are concaten
bc00: 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69  ated into a stri
bc10: 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61  ng and.** used a
bc20: 73 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64  s the P4 operand
bc30: 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d  , they will be m
bc40: 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a  ore readable..**
bc50: 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68  .** Note also th
bc60: 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74  at the numeric t
bc70: 79 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64  ypes are grouped
bc80: 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61   together so tha
bc90: 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72  t testing.** for
bca0: 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20   a numeric type 
bcb0: 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70  is a single comp
bcc0: 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  arison..*/.#defi
bcd0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
bce0: 58 54 20 20 20 20 20 27 61 27 0a 23 64 65 66 69  XT     'a'.#defi
bcf0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f  ne SQLITE_AFF_NO
bd00: 4e 45 20 20 20 20 20 27 62 27 0a 23 64 65 66 69  NE     'b'.#defi
bd10: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
bd20: 4d 45 52 49 43 20 20 27 63 27 0a 23 64 65 66 69  MERIC  'c'.#defi
bd30: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
bd40: 54 45 47 45 52 20 20 27 64 27 0a 23 64 65 66 69  TEGER  'd'.#defi
bd50: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
bd60: 41 4c 20 20 20 20 20 27 65 27 0a 0a 23 64 65 66  AL     'e'..#def
bd70: 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
bd80: 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
bd90: 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
bda0: 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
bdb0: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
bdc0: 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
bdd0: 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
bde0: 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
bdf0: 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
be00: 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65  lue. .*/.#define
be10: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
be20: 20 20 20 20 20 30 78 36 37 0a 0a 2f 2a 0a 2a 2a       0x67../*.**
be30: 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20   Additional bit 
be40: 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20  values that can 
be50: 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20  be ORed with an 
be60: 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74  affinity without
be70: 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .** changing the
be80: 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2f 0a 23 64   affinity..*/.#d
be90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d  efine SQLITE_JUM
bea0: 50 49 46 4e 55 4c 4c 20 20 20 30 78 30 38 20 20  PIFNULL   0x08  
beb0: 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68  /* jumps if eith
bec0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
bed0: 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
bee0: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20  LITE_STOREP2    
bef0: 20 20 30 78 31 30 20 20 2f 2a 20 53 74 6f 72 65    0x10  /* Store
bf00: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50   result in reg[P
bf10: 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a  2] rather than j
bf20: 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ump */.#define S
bf30: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20  QLITE_NULLEQ    
bf40: 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c     0x80  /* NULL
bf50: 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  =NULL */../*.** 
bf60: 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  An object of thi
bf70: 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65  s type is create
bf80: 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75  d for each virtu
bf90: 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74  al table present
bfa0: 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62   in.** the datab
bfb0: 61 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a  ase schema. .**.
bfc0: 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61  ** If the databa
bfd0: 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  se schema is sha
bfe0: 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20  red, then there 
bff0: 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  is one instance 
c000: 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63  of this.** struc
c010: 74 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61  ture for each da
c020: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
c030: 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61  n (sqlite3*) tha
c040: 74 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65  t uses the share
c050: 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69  d.** schema. Thi
c060: 73 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63  s is because eac
c070: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
c080: 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69  ction requires i
c090: 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a  ts own unique.**
c0a0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
c0b0: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
c0c0: 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63  andle used to ac
c0d0: 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
c0e0: 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65   table .** imple
c0f0: 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74  mentation. sqlit
c100: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
c110: 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72   can not be shar
c120: 65 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64  ed between .** d
c130: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
c140: 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74  ons, even when t
c150: 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69  he rest of the i
c160: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
c170: 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  e .** schema is 
c180: 73 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69  shared, as the i
c190: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
c1a0: 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64  ten stores the d
c1b0: 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
c1c0: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73  ction handle pas
c1d0: 73 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68  sed to it via th
c1e0: 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20  e xConnect() or 
c1f0: 78 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64  xCreate() method
c200: 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69  .** during initi
c210: 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e  alization intern
c220: 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62  ally. This datab
c230: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ase connection h
c240: 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65  andle may.** the
c250: 6e 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  n be used by the
c260: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
c270: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
c280: 20 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62   access real tab
c290: 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74  les .** within t
c2a0: 68 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20  he database. So 
c2b0: 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72  that they appear
c2c0: 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
c2d0: 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e  callers .** tran
c2e0: 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61  saction, these a
c2f0: 63 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20  ccesses need to 
c300: 62 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20  be made via the 
c310: 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 0a 2a  same database .*
c320: 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20  * connection as 
c330: 74 68 61 74 20 75 73 65 64 20 74 6f 20 65 78 65  that used to exe
c340: 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69  cute SQL operati
c350: 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75  ons on the virtu
c360: 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  al table..**.** 
c370: 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63  All VTable objec
c380: 74 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  ts that correspo
c390: 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74  nd to a single t
c3a0: 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64  able in a shared
c3b0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68  .** database sch
c3c0: 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c  ema are initiall
c3d0: 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69  y stored in a li
c3e0: 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65  nked-list pointe
c3f0: 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54  d to by.** the T
c400: 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d  able.pVTable mem
c410: 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20  ber variable of 
c420: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
c430: 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a  g Table object..
c440: 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74  ** When an sqlit
c450: 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65  e3_prepare() ope
c460: 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72  ration is requir
c470: 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
c480: 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
c490: 65 2c 20 69 74 20 73 65 61 72 63 68 65 73 20 74  e, it searches t
c4a0: 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20  he list for the 
c4b0: 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72  VTable that corr
c4c0: 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a  esponds to the.*
c4d0: 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
c4e0: 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20  ction doing the 
c4f0: 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20  preparing so as 
c500: 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72 65  to use the corre
c510: 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74  ct.** sqlite3_vt
c520: 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68  ab* handle in th
c530: 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79  e compiled query
c540: 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ..**.** When an 
c550: 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20  in-memory Table 
c560: 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65  object is delete
c570: 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77  d (for example w
c580: 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d  hen the.** schem
c590: 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61  a is being reloa
c5a0: 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61  ded for some rea
c5b0: 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65  son), the VTable
c5c0: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74   objects are not
c5d0: 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64   .** deleted and
c5e0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
c5f0: 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e  b* handles are n
c600: 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29  ot xDisconnect()
c610: 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  ed .** immediate
c620: 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65  ly. Instead, the
c630: 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d  y are moved from
c640: 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
c650: 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e  le list to.** an
c660: 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73  other linked lis
c670: 74 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20  t headed by the 
c680: 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
c690: 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ect member of th
c6a0: 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
c6b0: 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63  ng sqlite3 struc
c6c0: 74 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74  ture. They are t
c6d0: 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73  hen deleted/xDis
c6e0: 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65  connected .** ne
c6f0: 78 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d  xt time a statem
c700: 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20  ent is prepared 
c710: 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74  using said sqlit
c720: 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e  e3*. This is don
c730: 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65  e.** to avoid de
c740: 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e  adlock issues in
c750: 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65  volving multiple
c760: 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
c770: 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72  utexes..** Refer
c780: 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f   to comments abo
c790: 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69  ve function sqli
c7a0: 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
c7b0: 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78  t() for an.** ex
c7c0: 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20  planation as to 
c7d0: 77 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74  why it is safe t
c7e0: 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74  o add an entry t
c7f0: 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69  o an sqlite3.pDi
c800: 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74  sconnect.** list
c810: 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67   without holding
c820: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
c830: 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  ng sqlite3.mutex
c840: 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68   mutex..**.** Th
c850: 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a  e memory for obj
c860: 65 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70  ects of this typ
c870: 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f  e is always allo
c880: 63 61 74 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c  cated by .** sql
c890: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20  ite3DbMalloc(), 
c8a0: 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63  using the connec
c8b0: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72  tion handle stor
c8c0: 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20  ed in VTable.db 
c8d0: 61 73 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74  as .** the first
c8e0: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
c8f0: 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20  ruct VTable {.  
c900: 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
c910: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
c920: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
c930: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
c940: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
c950: 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20   Module *pMod;  
c960: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
c970: 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20  inter to module 
c980: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
c990: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
c9a0: 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a   *pVtab;      /*
c9b0: 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62   Pointer to vtab
c9c0: 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69   instance */.  i
c9d0: 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
c9e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c9f0: 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
ca00: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
ca10: 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72   */.  u8 bConstr
ca20: 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  aint;           
ca30: 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
ca40: 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f  raints are suppo
ca50: 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  rted */.  int iS
ca60: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
ca70: 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20      /* Depth of 
ca80: 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74  the SAVEPOINT st
ca90: 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ack */.  VTable 
caa0: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
cab0: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
cac0: 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61  nked list (see a
cad0: 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  bove) */.};../*.
cae0: 2a 2a 20 45 61 63 68 20 53 51 4c 20 74 61 62 6c  ** Each SQL tabl
caf0: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  e is represented
cb00: 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e   in memory by an
cb10: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
cb20: 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  .** following st
cb30: 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54  ructure..**.** T
cb40: 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68  able.zName is th
cb50: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
cb60: 62 6c 65 2e 20 20 54 68 65 20 63 61 73 65 20 6f  ble.  The case o
cb70: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a  f the original.*
cb80: 2a 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  * CREATE TABLE s
cb90: 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72  tatement is stor
cba0: 65 64 2c 20 62 75 74 20 63 61 73 65 20 69 73 20  ed, but case is 
cbb0: 6e 6f 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20  not significant 
cbc0: 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  for.** compariso
cbd0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e  ns..**.** Table.
cbe0: 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e 75 6d 62  nCol is the numb
cbf0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
cc00: 20 74 68 69 73 20 74 61 62 6c 65 2e 20 20 54 61   this table.  Ta
cc10: 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a  ble.aCol is a.**
cc20: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 61   pointer to an a
cc30: 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73  rray of Column s
cc40: 74 72 75 63 74 75 72 65 73 2c 20 6f 6e 65 20 66  tructures, one f
cc50: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a  or each column..
cc60: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  **.** If the tab
cc70: 6c 65 20 68 61 73 20 61 6e 20 49 4e 54 45 47 45  le has an INTEGE
cc80: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74  R PRIMARY KEY, t
cc90: 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65 79 20  hen Table.iPKey 
cca0: 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 0a  is the index of.
ccb0: 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68  ** the column th
ccc0: 61 74 20 69 73 20 74 68 61 74 20 6b 65 79 2e 20  at is that key. 
ccd0: 20 20 4f 74 68 65 72 77 69 73 65 20 54 61 62 6c    Otherwise Tabl
cce0: 65 2e 69 50 4b 65 79 20 69 73 20 6e 65 67 61 74  e.iPKey is negat
ccf0: 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68  ive.  Note.** th
cd00: 61 74 20 74 68 65 20 64 61 74 61 74 79 70 65 20  at the datatype 
cd10: 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  of the PRIMARY K
cd20: 45 59 20 6d 75 73 74 20 62 65 20 49 4e 54 45 47  EY must be INTEG
cd30: 45 52 20 66 6f 72 20 74 68 69 73 20 66 69 65 6c  ER for this fiel
cd40: 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20  d to.** be set. 
cd50: 20 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d   An INTEGER PRIM
cd60: 41 52 59 20 4b 45 59 20 69 73 20 75 73 65 64 20  ARY KEY is used 
cd70: 61 73 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72  as the rowid for
cd80: 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20   each row of.** 
cd90: 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 61  the table.  If a
cda0: 20 74 61 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e   table has no IN
cdb0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
cdc0: 59 2c 20 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d  Y, then a random
cdd0: 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e   rowid.** is gen
cde0: 65 72 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  erated for each 
cdf0: 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65  row of the table
ce00: 2e 20 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79  .  TF_HasPrimary
ce10: 4b 65 79 20 69 73 20 73 65 74 20 69 66 0a 2a 2a  Key is set if.**
ce20: 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61   the table has a
ce30: 6e 79 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ny PRIMARY KEY, 
ce40: 49 4e 54 45 47 45 52 20 6f 72 20 6f 74 68 65 72  INTEGER or other
ce50: 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c  wise..**.** Tabl
ce60: 65 2e 74 6e 75 6d 20 69 73 20 74 68 65 20 70 61  e.tnum is the pa
ce70: 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ge number for th
ce80: 65 20 72 6f 6f 74 20 42 54 72 65 65 20 70 61 67  e root BTree pag
ce90: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69  e of the table i
cea0: 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  n the.** databas
ceb0: 65 20 66 69 6c 65 2e 20 20 49 66 20 54 61 62 6c  e file.  If Tabl
cec0: 65 2e 69 44 62 20 69 73 20 74 68 65 20 69 6e 64  e.iDb is the ind
ced0: 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
cee0: 73 65 20 74 61 62 6c 65 20 62 61 63 6b 65 6e 64  se table backend
cef0: 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e 61 44  .** in sqlite.aD
cf00: 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72 20 74  b[].  0 is for t
cf10: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
cf20: 20 61 6e 64 20 31 20 69 73 20 66 6f 72 20 74 68   and 1 is for th
cf30: 65 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68  e file that.** h
cf40: 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72 79 20 74  olds temporary t
cf50: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
cf60: 73 2e 20 20 49 66 20 54 46 5f 45 70 68 65 6d 65  s.  If TF_Epheme
cf70: 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20 74 68  ral is set.** th
cf80: 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  en the table is 
cf90: 73 74 6f 72 65 64 20 69 6e 20 61 20 66 69 6c 65  stored in a file
cfa0: 20 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74   that is automat
cfb0: 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a  ically deleted.*
cfc0: 2a 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  * when the VDBE 
cfd0: 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 74 61  cursor to the ta
cfe0: 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 20  ble is closed.  
cff0: 49 6e 20 74 68 69 73 20 63 61 73 65 20 54 61 62  In this case Tab
d000: 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65  le.tnum .** refe
d010: 72 73 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e  rs VDBE cursor n
d020: 75 6d 62 65 72 20 74 68 61 74 20 68 6f 6c 64 73  umber that holds
d030: 20 74 68 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c   the table open,
d040: 20 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f 74   not to the root
d050: 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65 72 2e  .** page number.
d060: 20 20 54 72 61 6e 73 69 65 6e 74 20 74 61 62 6c    Transient tabl
d070: 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 68  es are used to h
d080: 6f 6c 64 20 74 68 65 20 72 65 73 75 6c 74 73 20  old the results 
d090: 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72  of a.** sub-quer
d0a0: 79 20 74 68 61 74 20 61 70 70 65 61 72 73 20 69  y that appears i
d0b0: 6e 73 74 65 61 64 20 6f 66 20 61 20 72 65 61 6c  nstead of a real
d0c0: 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74   table name in t
d0d0: 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a  he FROM clause .
d0e0: 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  ** of a SELECT s
d0f0: 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  tatement..*/.str
d100: 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68  uct Table {.  ch
d110: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
d120: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
d130: 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
d140: 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f  */.  Column *aCo
d150: 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66  l;        /* Inf
d160: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
d170: 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
d180: 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20  Index *pIndex;  
d190: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
d1a0: 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74  SQL indexes on t
d1b0: 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  his table. */.  
d1c0: 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
d1d0: 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72       /* NULL for
d1e0: 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73   tables.  Points
d1f0: 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69   to definition i
d200: 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46  f a view. */.  F
d210: 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20  Key *pFKey;     
d220: 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69      /* Linked li
d230: 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67  st of all foreig
d240: 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74  n keys in this t
d250: 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  able */.  char *
d260: 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f  zColAff;       /
d270: 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
d280: 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
d290: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
d2a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d2b0: 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45 78 70  OMIT_CHECK.  Exp
d2c0: 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20  rList *pCheck;  
d2d0: 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63    /* All CHECK c
d2e0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65  onstraints */.#e
d2f0: 6e 64 69 66 0a 20 20 74 52 6f 77 63 6e 74 20 6e  ndif.  tRowcnt n
d300: 52 6f 77 45 73 74 3b 20 20 20 20 20 2f 2a 20 45  RowEst;     /* E
d310: 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e  stimated rows in
d320: 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71   table - from sq
d330: 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
d340: 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
d350: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
d360: 6f 74 20 42 54 72 65 65 20 6e 6f 64 65 20 66 6f  ot BTree node fo
d370: 72 20 74 68 69 73 20 74 61 62 6c 65 20 28 73 65  r this table (se
d380: 65 20 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f  e note above) */
d390: 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20  .  i16 iPKey;   
d3a0: 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
d3b0: 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20  t negative, use 
d3c0: 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74  aCol[iPKey] as t
d3d0: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
d3e0: 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20  /.  i16 nCol;   
d3f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
d400: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
d410: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
d420: 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20   u16 nRef;      
d430: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
d440: 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
d450: 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75  his Table */.  u
d460: 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20  8 tabFlags;     
d470: 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54      /* Mask of T
d480: 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
d490: 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20  u8 keyConf;     
d4a0: 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20       /* What to 
d4b0: 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e  do in case of un
d4c0: 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63  iqueness conflic
d4d0: 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69  t on iPKey */.#i
d4e0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
d4f0: 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69  T_ALTERTABLE.  i
d500: 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b  nt addColOffset;
d510: 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e      /* Offset in
d520: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
d530: 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  mt to add a new 
d540: 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66  column */.#endif
d550: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d560: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
d570: 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41  E.  int nModuleA
d580: 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  rg;      /* Numb
d590: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
d5a0: 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f  to the module */
d5b0: 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75  .  char **azModu
d5c0: 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78 74 20  leArg;  /* Text 
d5d0: 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72  of all module ar
d5e0: 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c  gs. [0] is modul
d5f0: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54 61 62  e name */.  VTab
d600: 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20  le *pVTable;    
d610: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62   /* List of VTab
d620: 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23  le objects. */.#
d630: 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20  endif.  Trigger 
d640: 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20  *pTrigger;   /* 
d650: 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73  List of triggers
d660: 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65   stored in pSche
d670: 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  ma */.  Schema *
d680: 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  pSchema;     /* 
d690: 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74  Schema that cont
d6a0: 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20  ains this table 
d6b0: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78  */.  Table *pNex
d6c0: 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78  tZombie;  /* Nex
d6d0: 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70  t on the Parse.p
d6e0: 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a  ZombieTab list *
d6f0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
d700: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54  wed values for T
d710: 61 62 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2f  abe.tabFlags..*/
d720: 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64  .#define TF_Read
d730: 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 31  only        0x01
d740: 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79      /* Read-only
d750: 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f   system table */
d760: 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65  .#define TF_Ephe
d770: 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 32  meral       0x02
d780: 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65      /* An epheme
d790: 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ral table */.#de
d7a0: 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61  fine TF_HasPrima
d7b0: 72 79 4b 65 79 20 20 20 30 78 30 34 20 20 20 20  ryKey   0x04    
d7c0: 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70  /* Table has a p
d7d0: 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
d7e0: 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63  efine TF_Autoinc
d7f0: 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20  rement   0x08   
d800: 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d   /* Integer prim
d810: 61 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69  ary key is autoi
d820: 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66  ncrement */.#def
d830: 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20  ine TF_Virtual  
d840: 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f         0x10    /
d850: 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c 20 74  * Is a virtual t
d860: 61 62 6c 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  able */.../*.** 
d870: 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74  Test to see whet
d880: 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62  her or not a tab
d890: 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20  le is a virtual 
d8a0: 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a  table.  This is.
d8b0: 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63  ** done as a mac
d8c0: 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  ro so that it wi
d8d0: 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20  ll be optimized 
d8e0: 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c  out when virtual
d8f0: 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72  .** table suppor
d900: 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
d910: 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a  m the build..*/.
d920: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d930: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
d940: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
d950: 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 28  tual(X)      (((
d960: 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
d970: 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23  F_Virtual)!=0).#
d980: 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
d990: 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29  nColumn(X) (((X)
d9a0: 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
d9b0: 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
d9c0: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
d9d0: 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
d9e0: 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49     0.#  define I
d9f0: 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
da00: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
da10: 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65   Each foreign ke
da20: 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  y constraint is 
da30: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
da40: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
da50: 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ucture..**.** A 
da60: 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61  foreign key is a
da70: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
da80: 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  wo tables.  The 
da90: 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a  "from" table is.
daa0: 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  ** the table tha
dab0: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52  t contains the R
dac0: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
dad0: 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68   that creates th
dae0: 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
daf0: 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c  .  The "to" tabl
db00: 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74  e is the table t
db10: 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20  hat is named in 
db20: 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
db30: 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64  lause..** Consid
db40: 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a  er this example:
db50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
db60: 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20  E TABLE ex1(.** 
db70: 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20        a INTEGER 
db80: 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20  PRIMARY KEY,.** 
db90: 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20        b INTEGER 
dba0: 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52  CONSTRAINT fk1 R
dbb0: 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29  EFERENCES ex2(x)
dbc0: 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a  .**     );.**.**
dbd0: 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79   For foreign key
dbe0: 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d   "fk1", the from
dbf0: 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20  -table is "ex1" 
dc00: 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65  and the to-table
dc10: 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 0a 2a 2a   is "ex2"..**.**
dc20: 20 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53   Each REFERENCES
dc30: 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65   clause generate
dc40: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
dc50: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
dc60: 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63  tructure.** whic
dc70: 68 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  h is attached to
dc80: 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e   the from-table.
dc90: 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e    The to-table n
dca0: 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68  eed not exist wh
dcb0: 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74  en.** the from-t
dcc0: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e  able is created.
dcd0: 20 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20    The existence 
dce0: 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  of the to-table 
dcf0: 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a  is not checked..
dd00: 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b  */.struct FKey {
dd10: 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b  .  Table *pFrom;
dd20: 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
dd30: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46  ntaining the REF
dd40: 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28  ERENCES clause (
dd50: 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20  aka: Child) */. 
dd60: 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d   FKey *pNextFrom
dd70: 3b 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69  ;  /* Next forei
dd80: 67 6e 20 6b 65 79 20 69 6e 20 70 46 72 6f 6d 20  gn key in pFrom 
dd90: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20  */.  char *zTo; 
dda0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
ddb0: 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  f table that the
ddc0: 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28   key points to (
ddd0: 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a  aka: Parent) */.
dde0: 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b    FKey *pNextTo;
ddf0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65      /* Next fore
de00: 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62 6c 65  ign key on table
de10: 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20 20   named zTo */.  
de20: 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20  FKey *pPrevTo;  
de30: 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 66 6f    /* Previous fo
de40: 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62  reign key on tab
de50: 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a  le named zTo */.
de60: 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20    int nCol;     
de70: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
de80: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
de90: 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a   key */.  /* EV:
dea0: 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a   R-30323-21917 *
deb0: 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65  /.  u8 isDeferre
dec0: 64 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  d;    /* True if
ded0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63   constraint chec
dee0: 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64  king is deferred
def0: 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a   till COMMIT */.
df00: 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b    u8 aAction[2];
df10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20            /* ON 
df20: 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50  DELETE and ON UP
df30: 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65  DATE actions, re
df40: 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20  spectively */.  
df50: 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67  Trigger *apTrigg
df60: 65 72 5b 32 5d 3b 20 20 2f 2a 20 54 72 69 67 67  er[2];  /* Trigg
df70: 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b  ers for aAction[
df80: 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  ] actions */.  s
df90: 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20  truct sColMap { 
dfa0: 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63   /* Mapping of c
dfb0: 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20  olumns in pFrom 
dfc0: 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54  to columns in zT
dfd0: 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72  o */.    int iFr
dfe0: 6f 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  om;         /* I
dff0: 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  ndex of column i
e000: 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63  n pFrom */.    c
e010: 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20  har *zCol;      
e020: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
e030: 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
e040: 30 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45  0 use PRIMARY KE
e050: 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d  Y */.  } aCol[1]
e060: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20  ;        /* One 
e070: 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f  entry for each o
e080: 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 20 73 20  f nCol column s 
e090: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  */.};../*.** SQL
e0a0: 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e  ite supports man
e0b0: 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73  y different ways
e0c0: 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f   to resolve a co
e0d0: 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
e0e0: 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f  r.  ROLLBACK pro
e0f0: 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
e100: 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  at a constraint 
e110: 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75  violation.** cau
e120: 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ses the operatio
e130: 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20  n in process to 
e140: 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65  fail and for the
e150: 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
e160: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f  tion.** to be ro
e170: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52  lled back.  ABOR
e180: 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  T processing mea
e190: 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ns the operation
e1a0: 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66   in process.** f
e1b0: 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69  ails and any pri
e1c0: 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  or changes from 
e1d0: 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69  that one operati
e1e0: 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75  on are backed ou
e1f0: 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72  t,.** but the tr
e200: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
e210: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46   rolled back.  F
e220: 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  AIL processing m
e230: 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65  eans that.** the
e240: 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
e250: 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64  ogress stops and
e260: 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f   returns an erro
e270: 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69  r code.  But pri
e280: 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75  or.** changes du
e290: 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70  e to the same op
e2a0: 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20  eration are not 
e2b0: 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e  backed out and n
e2c0: 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63  o rollback.** oc
e2d0: 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65  curs.  IGNORE me
e2e0: 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72  ans that the par
e2f0: 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74  ticular row that
e300: 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73   caused the cons
e310: 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20  traint.** error 
e320: 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20  is not inserted 
e330: 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f  or updated.  Pro
e340: 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
e350: 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a  s and no error.*
e360: 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  * is returned.  
e370: 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68  REPLACE means th
e380: 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64  at preexisting d
e390: 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61  atabase rows tha
e3a0: 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e  t caused.** a UN
e3b0: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
e3c0: 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65  violation are re
e3d0: 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68  moved so that th
e3e0: 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a  e new insert or.
e3f0: 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72  ** update can pr
e400: 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69  oceed.  Processi
e410: 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
e420: 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70   no error is rep
e430: 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53  orted..**.** RES
e440: 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20  TRICT, SETNULL, 
e450: 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69  and CASCADE acti
e460: 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74  ons apply only t
e470: 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a  o foreign keys..
e480: 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74  ** RESTRICT is t
e490: 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54  he same as ABORT
e4a0: 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66   for IMMEDIATE f
e4b0: 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20  oreign keys and 
e4c0: 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52  the.** same as R
e4d0: 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45  OLLBACK for DEFE
e4e0: 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e  RRED keys.  SETN
e4f0: 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ULL means that t
e500: 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
e510: 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  y is set to NULL
e520: 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73  .  CASCADE means
e530: 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f   that a DELETE o
e540: 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a  r UPDATE of the.
e550: 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  ** referenced ta
e560: 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61  ble row is propa
e570: 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72  gated into the r
e580: 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  ow that holds th
e590: 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79  e.** foreign key
e5a0: 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c  ..** .** The fol
e5b0: 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20  lowing symbolic 
e5c0: 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20  values are used 
e5d0: 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20  to record which 
e5e0: 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f  type.** of actio
e5f0: 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64  n to take..*/.#d
e600: 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20  efine OE_None   
e610: 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69    0   /* There i
e620: 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20  s no constraint 
e630: 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66  to check */.#def
e640: 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  ine OE_Rollback 
e650: 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20  1   /* Fail the 
e660: 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f  operation and ro
e670: 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73  llback the trans
e680: 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
e690: 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20  e OE_Abort    2 
e6a0: 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68    /* Back out ch
e6b0: 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20  anges but do no 
e6c0: 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63  rollback transac
e6d0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
e6e0: 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20  OE_Fail     3   
e6f0: 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72  /* Stop the oper
e700: 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20  ation but leave 
e710: 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65  all prior change
e720: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  s */.#define OE_
e730: 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20  Ignore   4   /* 
e740: 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72  Ignore the error
e750: 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20  . Do not do the 
e760: 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
e770: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
e780: 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44  eplace  5   /* D
e790: 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72  elete existing r
e7a0: 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49  ecord, then do I
e7b0: 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
e7c0: 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52  */..#define OE_R
e7d0: 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f  estrict 6   /* O
e7e0: 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45  E_Abort for IMME
e7f0: 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61  DIATE, OE_Rollba
e800: 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20  ck for DEFERRED 
e810: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65  */.#define OE_Se
e820: 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65  tNull  7   /* Se
e830: 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65  t the foreign ke
e840: 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20  y value to NULL 
e850: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65  */.#define OE_Se
e860: 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65  tDflt  8   /* Se
e870: 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65  t the foreign ke
e880: 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64  y value to its d
e890: 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  efault */.#defin
e8a0: 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20  e OE_Cascade  9 
e8b0: 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65    /* Cascade the
e8c0: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65   changes */..#de
e8d0: 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20  fine OE_Default 
e8e0: 20 39 39 20 20 2f 2a 20 44 6f 20 77 68 61 74 65   99  /* Do whate
e8f0: 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  ver the default 
e900: 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f  action is */.../
e910: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
e920: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
e930: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  g structure is p
e940: 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72  assed as the fir
e950: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74  st.** argument t
e960: 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79  o sqlite3VdbeKey
e970: 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75  Compare and is u
e980: 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74  sed to control t
e990: 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  he .** compariso
e9a0: 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64  n of the two ind
e9b0: 65 78 20 6b 65 79 73 2e 0a 2a 2f 0a 73 74 72 75  ex keys..*/.stru
e9c0: 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 73  ct KeyInfo {.  s
e9d0: 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
e9e0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
e9f0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
ea00: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
ea10: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
ea20: 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66  ncoding - one of
ea30: 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a   the SQLITE_UTF*
ea40: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36   values */.  u16
ea50: 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
ea60: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
ea70: 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 6c 5b 5d  tries in aColl[]
ea80: 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
ea90: 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72  rder;     /* Sor
eaa0: 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68  t order for each
eab0: 20 63 6f 6c 75 6d 6e 2e 20 20 4d 61 79 20 62 65   column.  May be
eac0: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 43 6f 6c 6c 53   NULL */.  CollS
ead0: 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f  eq *aColl[1];  /
eae0: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
eaf0: 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65  ence for each te
eb00: 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f  rm of the key */
eb10: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
eb20: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
eb30: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
eb40: 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
eb50: 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73  ion about a.** s
eb60: 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f  ingle index reco
eb70: 72 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65  rd that has alre
eb80: 61 64 79 20 62 65 65 6e 20 70 61 72 73 65 64 20  ady been parsed 
eb90: 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64  out into individ
eba0: 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a  ual.** values..*
ebb0: 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
ebc0: 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
ebd0: 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
ebe0: 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
ebf0: 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
ec00: 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
ec10: 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
ec20: 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
ec30: 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
ec40: 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
ec50: 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
ec60: 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
ec70: 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
ec80: 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
ec90: 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
eca0: 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
ecb0: 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
ecc0: 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
ecd0: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ode..**.** This 
ece0: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
ecf0: 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  a record that ha
ed00: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64  s already been d
ed10: 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69  isassembled.** i
ed20: 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75  nto its constitu
ed30: 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2f 0a 73  ent fields..*/.s
ed40: 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
ed50: 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f  cord {.  KeyInfo
ed60: 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20   *pKeyInfo;  /* 
ed70: 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f  Collation and so
ed80: 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61  rt-order informa
ed90: 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46  tion */.  u16 nF
eda0: 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a  ield;         /*
edb0: 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
edc0: 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f  es in apMem[] */
edd0: 0a 20 20 75 38 20 66 6c 61 67 73 3b 20 20 20 20  .  u8 flags;    
ede0: 20 20 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61         /* Boolea
edf0: 6e 20 73 65 74 74 69 6e 67 73 2e 20 20 55 4e 50  n settings.  UNP
ee00: 41 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c 6f 77 20  ACKED_... below 
ee10: 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20  */.  i64 rowid; 
ee20: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
ee30: 20 62 79 20 55 4e 50 41 43 4b 45 44 5f 50 52 45   by UNPACKED_PRE
ee40: 46 49 58 5f 53 45 41 52 43 48 20 2a 2f 0a 20 20  FIX_SEARCH */.  
ee50: 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20  Mem *aMem;      
ee60: 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f      /* Values */
ee70: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
ee80: 65 64 20 76 61 6c 75 65 73 20 6f 66 20 55 6e 70  ed values of Unp
ee90: 61 63 6b 65 64 52 65 63 6f 72 64 2e 66 6c 61 67  ackedRecord.flag
eea0: 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50  s.*/.#define UNP
eeb0: 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 20 20  ACKED_INCRKEY   
eec0: 20 20 20 20 30 78 30 31 20 20 2f 2a 20 4d 61 6b      0x01  /* Mak
eed0: 65 20 74 68 69 73 20 6b 65 79 20 61 6e 20 65 70  e this key an ep
eee0: 73 69 6c 6f 6e 20 6c 61 72 67 65 72 20 2a 2f 0a  silon larger */.
eef0: 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44  #define UNPACKED
ef00: 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 20 20 30  _PREFIX_MATCH  0
ef10: 78 30 32 20 20 2f 2a 20 41 20 70 72 65 66 69 78  x02  /* A prefix
ef20: 20 6d 61 74 63 68 20 69 73 20 63 6f 6e 73 69 64   match is consid
ef30: 65 72 65 64 20 4f 4b 20 2a 2f 0a 23 64 65 66 69  ered OK */.#defi
ef40: 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46  ne UNPACKED_PREF
ef50: 49 58 5f 53 45 41 52 43 48 20 30 78 30 34 20 20  IX_SEARCH 0x04  
ef60: 2f 2a 20 49 67 6e 6f 72 65 20 66 69 6e 61 6c 20  /* Ignore final 
ef70: 28 72 6f 77 69 64 29 20 66 69 65 6c 64 20 2a 2f  (rowid) field */
ef80: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
ef90: 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73   index is repres
efa0: 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
efb0: 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
efc0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
efd0: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
efe0: 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  .** The columns 
eff0: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
f000: 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65  t are to be inde
f010: 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65  xed are describe
f020: 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f  d.** by the aiCo
f030: 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20  lumn[] field of 
f040: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
f050: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75   For example, su
f060: 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65  ppose.** we have
f070: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
f080: 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a  able and index:.
f090: 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
f0a0: 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e   TABLE Ex1(c1 in
f0b0: 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65  t, c2 int, c3 te
f0c0: 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41  xt);.**     CREA
f0d0: 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20  TE INDEX Ex2 ON 
f0e0: 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a  Ex1(c3,c1);.**.*
f0f0: 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73  * In the Table s
f100: 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
f110: 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33  ing Ex1, nCol==3
f120: 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61   because there a
f130: 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75  re.** three colu
f140: 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
f150: 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20  .  In the Index 
f160: 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
f170: 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f  bing.** Ex2, nCo
f180: 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20  lumn==2 since 2 
f190: 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73  of the 3 columns
f1a0: 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65   of Ex1 are inde
f1b0: 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75  xed..** The valu
f1c0: 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73  e of aiColumn is
f1d0: 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75   {2, 0}.  aiColu
f1e0: 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65  mn[0]==2 because
f1f0: 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63   the .** first c
f200: 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
f210: 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20  xed (c3) has an 
f220: 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78  index of 2 in Ex
f230: 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65  1.aCol[]..** The
f240: 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74   second column t
f250: 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31  o be indexed (c1
f260: 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
f270: 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43  f 0 in.** Ex1.aC
f280: 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e  ol[], hence Ex2.
f290: 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a  aiColumn[1]==0..
f2a0: 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e  **.** The Index.
f2b0: 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65  onError field de
f2c0: 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
f2d0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65   or not the inde
f2e0: 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d  xed columns.** m
f2f0: 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e  ust be unique an
f300: 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20  d what to do if 
f310: 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57  they are not.  W
f320: 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  hen Index.onErro
f330: 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74  r=OE_None,.** it
f340: 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e   means this is n
f350: 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  ot a unique inde
f360: 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74  x.  Otherwise it
f370: 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64   is a unique ind
f380: 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61  ex.** and the va
f390: 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45  lue of Index.onE
f3a0: 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68  rror indicate th
f3b0: 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74  e which conflict
f3c0: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20   resolution .** 
f3d0: 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70  algorithm to emp
f3e0: 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20  loy whenever an 
f3f0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
f400: 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d  to insert a non-
f410: 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e  unique.** elemen
f420: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  t..*/.struct Ind
f430: 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  ex {.  char *zNa
f440: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
f450: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
f460: 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 2a  index */.  int *
f470: 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  aiColumn;       
f480: 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c      /* Which col
f490: 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79  umns are used by
f4a0: 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73   this index.  1s
f4b0: 74 20 69 73 20 30 20 2a 2f 0a 20 20 74 52 6f 77  t is 0 */.  tRow
f4c0: 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20  cnt *aiRowEst;  
f4d0: 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41       /* From ANA
f4e0: 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20  LYZE: Est. rows 
f4f0: 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68  selected by each
f500: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62   column */.  Tab
f510: 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20  le *pTable;     
f520: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c        /* The SQL
f530: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64   table being ind
f540: 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  exed */.  char *
f550: 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20  zColAff;        
f560: 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
f570: 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
f580: 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
f590: 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e  n */.  Index *pN
f5a0: 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
f5b0: 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65  /* The next inde
f5c0: 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  x associated wit
f5d0: 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  h the same table
f5e0: 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
f5f0: 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f  chema;         /
f600: 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
f610: 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a  ing this index *
f620: 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
f630: 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
f640: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a  for each column:
f650: 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c   True==DESC, Fal
f660: 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61  se==ASC */.  cha
f670: 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20  r **azColl;     
f680: 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
f690: 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  f collation sequ
f6a0: 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69  ence names for i
f6b0: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  ndex */.  int tn
f6c0: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
f6d0: 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f     /* DB Page co
f6e0: 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66  ntaining root of
f6f0: 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
f700: 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   u16 nColumn;   
f710: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
f720: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
f730: 6e 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  n table used by 
f740: 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
f750: 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20  u8 onError;     
f760: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41           /* OE_A
f770: 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  bort, OE_Ignore,
f780: 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20   OE_Replace, or 
f790: 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73  OE_None */.  uns
f7a0: 69 67 6e 65 64 20 61 75 74 6f 49 6e 64 65 78 3a  igned autoIndex:
f7b0: 32 3b 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51  2;    /* 1==UNIQ
f7c0: 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b  UE, 2==PRIMARY K
f7d0: 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e  EY, 0==CREATE IN
f7e0: 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  DEX */.  unsigne
f7f0: 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20  d bUnordered:1; 
f800: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e    /* Use this in
f810: 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e  dex for == or IN
f820: 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f   queries only */
f830: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
f840: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 20 20 69 6e  NABLE_STAT3.  in
f850: 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20  t nSample;      
f860: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
f870: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20   of elements in 
f880: 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 74  aSample[] */.  t
f890: 52 6f 77 63 6e 74 20 61 76 67 45 71 3b 20 20 20  Rowcnt avgEq;   
f8a0: 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61          /* Avera
f8b0: 67 65 20 6e 45 71 20 76 61 6c 75 65 20 66 6f 72  ge nEq value for
f8c0: 20 6b 65 79 20 76 61 6c 75 65 73 20 6e 6f 74 20   key values not 
f8d0: 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20  in aSample */.  
f8e0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61  IndexSample *aSa
f8f0: 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70  mple;    /* Samp
f900: 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d  les of the left-
f910: 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 23 65 6e 64  most key */.#end
f920: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  if.};../*.** Eac
f930: 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20  h sample stored 
f940: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
f950: 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70  at3 table is rep
f960: 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
f970: 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ry .** using a s
f980: 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
f990: 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
f9a0: 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
f9b0: 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
f9c0: 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
f9d0: 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
f9e0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
f9f0: 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
fa00: 53 61 6d 70 6c 65 20 7b 0a 20 20 75 6e 69 6f 6e  Sample {.  union
fa10: 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 3b 20   {.    char *z; 
fa20: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
fa30: 69 66 20 65 54 79 70 65 20 69 73 20 53 51 4c 49  if eType is SQLI
fa40: 54 45 5f 54 45 58 54 20 6f 72 20 53 51 4c 49 54  TE_TEXT or SQLIT
fa50: 45 5f 42 4c 4f 42 20 2a 2f 0a 20 20 20 20 64 6f  E_BLOB */.    do
fa60: 75 62 6c 65 20 72 3b 20 20 20 20 20 20 20 2f 2a  uble r;       /*
fa70: 20 56 61 6c 75 65 20 69 66 20 65 54 79 70 65 20   Value if eType 
fa80: 69 73 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 20  is SQLITE_FLOAT 
fa90: 2a 2f 0a 20 20 20 20 69 36 34 20 69 3b 20 20 20  */.    i64 i;   
faa0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
fab0: 69 66 20 65 54 79 70 65 20 69 73 20 53 51 4c 49  if eType is SQLI
fac0: 54 45 5f 49 4e 54 45 47 45 52 20 2a 2f 0a 20 20  TE_INTEGER */.  
fad0: 7d 20 75 3b 0a 20 20 75 38 20 65 54 79 70 65 3b  } u;.  u8 eType;
fae0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49           /* SQLI
faf0: 54 45 5f 4e 55 4c 4c 2c 20 53 51 4c 49 54 45 5f  TE_NULL, SQLITE_
fb00: 49 4e 54 45 47 45 52 20 2e 2e 2e 20 65 74 63 2e  INTEGER ... etc.
fb10: 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b   */.  int nByte;
fb20: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
fb30: 69 6e 20 62 79 74 65 20 6f 66 20 74 65 78 74 20  in byte of text 
fb40: 6f 72 20 62 6c 6f 62 2e 20 2a 2f 0a 20 20 74 52  or blob. */.  tR
fb50: 6f 77 63 6e 74 20 6e 45 71 3b 20 20 20 20 20 20  owcnt nEq;      
fb60: 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
fb70: 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65  f rows where the
fb80: 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73   key equals this
fb90: 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
fba0: 77 63 6e 74 20 6e 4c 74 3b 20 20 20 20 20 20 2f  wcnt nLt;      /
fbb0: 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
fbc0: 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20   rows where key 
fbd0: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  is less than thi
fbe0: 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
fbf0: 6f 77 63 6e 74 20 6e 44 4c 74 3b 20 20 20 20 20  owcnt nDLt;     
fc00: 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
fc10: 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20  f distinct keys 
fc20: 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
fc30: 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ample */.};../*.
fc40: 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f  ** Each token co
fc50: 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20  ming out of the 
fc60: 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74  lexer is an inst
fc70: 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20  ance of.** this 
fc80: 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65  structure.  Toke
fc90: 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64  ns are also used
fca0: 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65   as part of an e
fcb0: 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  xpression..**.**
fcc0: 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a   Note if Token.z
fcd0: 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64  ==0 then Token.d
fce0: 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61  yn and Token.n a
fcf0: 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64  re undefined and
fd00: 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20  .** may contain 
fd10: 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20  random values.  
fd20: 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20  Do not make any 
fd30: 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75  assumptions abou
fd40: 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61  t Token.dyn.** a
fd50: 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20  nd Token.n when 
fd60: 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73  Token.z==0..*/.s
fd70: 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20  truct Token {.  
fd80: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20  const char *z;  
fd90: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
fda0: 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55  e token.  Not NU
fdb0: 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a  LL-terminated! *
fdc0: 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
fdd0: 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72   n;    /* Number
fde0: 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69   of characters i
fdf0: 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a  n this token */.
fe00: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
fe10: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
fe20: 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
fe30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
fe40: 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
fe50: 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45  ** code for a SE
fe60: 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69  LECT that contai
fe70: 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
fe80: 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  ctions..**.** If
fe90: 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47   Expr.op==TK_AGG
fea0: 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47  _COLUMN or TK_AG
feb0: 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20  G_FUNCTION then 
fec0: 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73  Expr.pAggInfo is
fed0: 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
fee0: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
fef0: 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75    The Expr.iColu
ff00: 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20  mn field is the 
ff10: 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49  index in.** AggI
ff20: 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67  nfo.aCol[] or Ag
ff30: 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66  gInfo.aFunc[] of
ff40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
ff50: 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
ff60: 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74  ** code for that
ff70: 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67   node..**.** Agg
ff80: 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e  Info.pGroupBy an
ff90: 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e  d AggInfo.aFunc.
ffa0: 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66  pExpr point to f
ffb0: 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65  ields within the
ffc0: 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c  .** original Sel
ffd0: 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68  ect structure th
ffe0: 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
fff0: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
10000 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65  t.  These.** fie
10010 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20  lds do not need 
10020 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e  to be freed when
10030 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
10040 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74  e AggInfo struct
10050 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ure..*/.struct A
10060 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69  ggInfo {.  u8 di
10070 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20  rectMode;       
10080 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e     /* Direct ren
10090 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e  dering mode mean
100a0 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65  s take data dire
100b0 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20  ctly.           
100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
100d0 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61  * from source ta
100e0 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e  bles rather than
100f0 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f   from accumulato
10100 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f  rs */.  u8 useSo
10110 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
10120 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64  /* In direct mod
10130 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65  e, reference the
10140 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72   sorting index r
10150 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20  ather.          
10160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10170 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72  ** than the sour
10180 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  ce table */.  in
10190 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  t sortingIdx;   
101a0 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
101b0 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
101c0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
101d0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50   int sortingIdxP
101e0 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73  Tab;     /* Curs
101f0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65  or number of pse
10200 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69  udo-table */.  i
10210 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d  nt nSortingColum
10220 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  n;     /* Number
10230 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
10240 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
10250 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
10260 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a  pGroupBy;     /*
10270 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c   The group by cl
10280 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  ause */.  struct
10290 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20   AggInfo_col {  
102a0 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f    /* For each co
102b0 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75  lumn used in sou
102c0 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20  rce tables */.  
102d0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
102e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f             /* So
102f0 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
10300 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
10310 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
10320 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
10330 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
10340 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75  */.    int iColu
10350 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
10360 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
10370 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72   within the sour
10380 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
10390 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d  int iSorterColum
103a0 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  n;       /* Colu
103b0 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  mn number in the
103c0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
103d0 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
103e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
103f0 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
10400 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
10410 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
10420 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
10430 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
10440 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65  e original expre
10450 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43  ssion */.  } *aC
10460 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d  ol;.  int nColum
10470 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
10480 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20   Number of used 
10490 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b  entries in aCol[
104a0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75  ] */.  int nAccu
104b0 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f  mulator;       /
104c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
104d0 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68  mns that show th
104e0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74  rough to the out
104f0 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20  put..           
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
10510 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c  * Additional col
10520 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e  umns are used on
10530 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73  ly as parameters
10540 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20   to.            
10550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
10560 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10570 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
10580 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20   AggInfo_func { 
10590 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67    /* For each ag
105a0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
105b0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
105c0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
105d0 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65   /* Expression e
105e0 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63  ncoding the func
105f0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63  tion */.    Func
10600 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20  Def *pFunc;     
10610 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72       /* The aggr
10620 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69  egate function i
10630 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
10640 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
10650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10660 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
10670 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
10680 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
10690 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20   int iDistinct; 
106a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68            /* Eph
106b0 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65  emeral table use
106c0 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53  d to enforce DIS
106d0 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46  TINCT */.  } *aF
106e0 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63  unc;.  int nFunc
106f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
10700 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
10710 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a  ies in aFunc[] *
10720 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
10730 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69  datatype ynVar i
10740 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67  s a signed integ
10750 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69  er, either 16-bi
10760 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20  t or 32-bit..** 
10770 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36  Usually it is 16
10780 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53  -bits.  But if S
10790 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
107a0 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65  LE_NUMBER is gre
107b0 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37  ater.** than 327
107c0 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61  67 we have to ma
107d0 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31  ke it 32-bit.  1
107e0 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72  6-bit is preferr
107f0 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74  ed because.** it
10800 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72   uses less memor
10810 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62  y in the Expr ob
10820 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61  ject, which is a
10830 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72   big memory user
10840 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77  .** in systems w
10850 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70  ith lots of prep
10860 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e  ared statements.
10870 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63    And few applic
10880 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d  ations.** need m
10890 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31  ore than about 1
108a0 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65  0 or 20 variable
108b0 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74  s.  But some ext
108c0 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a  reme users want.
108d0 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61  ** to have prepa
108e0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
108f0 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76  ith over 32767 v
10900 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f  ariables, and fo
10910 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70  r them.** the op
10920 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  tion is availabl
10930 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  e (at compile-ti
10940 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  me)..*/.#if SQLI
10950 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
10960 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79  NUMBER<=32767.ty
10970 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b  pedef i16 ynVar;
10980 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69  .#else.typedef i
10990 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66  nt ynVar;.#endif
109a0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64  ../*.** Each nod
109b0 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  e of an expressi
109c0 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20  on in the parse 
109d0 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61  tree is an insta
109e0 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
109f0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
10a00 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f  Expr.op is the o
10a10 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67  pcode. The integ
10a20 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20  er parser token 
10a30 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64  codes are reused
10a40 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68  .** as opcodes h
10a50 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65  ere. For example
10a60 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66  , the parser def
10a70 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65  ines TK_GE to be
10a80 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63   an integer.** c
10a90 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67  ode representing
10aa0 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74   the ">=" operat
10ab0 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e  or. This same in
10ac0 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65  teger code is re
10ad0 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65  used.** to repre
10ae0 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72  sent the greater
10af0 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74  -than-or-equal-t
10b00 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  o operator in th
10b10 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20  e expression.** 
10b20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tree..**.** If t
10b30 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
10b40 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20   an SQL literal 
10b50 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f  (TK_INTEGER, TK_
10b60 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20  FLOAT, TK_BLOB, 
10b70 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47  .** or TK_STRING
10b80 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
10b90 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
10ba0 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20  text of the SQL 
10bb0 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74  literal. If.** t
10bc0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
10bd0 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f   a variable (TK_
10be0 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20  VARIABLE), then 
10bf0 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
10c00 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69  ins the .** vari
10c10 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c  able name. Final
10c20 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65  ly, if the expre
10c30 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
10c40 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e  function (TK_FUN
10c50 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20  CTION),.** then 
10c60 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
10c70 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ins the name of 
10c80 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  the function..**
10c90 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20  .** Expr.pRight 
10ca0 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61  and Expr.pLeft a
10cb0 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  re the left and 
10cc0 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73  right subexpress
10cd0 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e  ions of a.** bin
10ce0 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69  ary operator. Ei
10cf0 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79  ther or both may
10d00 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   be NULL..**.** 
10d10 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20  Expr.x.pList is 
10d20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65  a list of argume
10d30 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65  nts if the expre
10d40 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
10d50 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43  function,.** a C
10d60 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  ASE expression o
10d70 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69  r an IN expressi
10d80 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  on of the form "
10d90 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c  <lhs> IN (<y>, <
10da0 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72  z>...)"..** Expr
10db0 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73  .x.pSelect is us
10dc0 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ed if the expres
10dd0 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65  sion is a sub-se
10de0 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65  lect or an expre
10df0 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ssion of.** the 
10e00 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
10e10 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66  SELECT ...)". If
10e20 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63   the EP_xIsSelec
10e30 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20  t bit is set in 
10e40 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  the.** Expr.flag
10e50 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70  s mask, then Exp
10e60 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  r.x.pSelect is v
10e70 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  alid. Otherwise,
10e80 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
10e90 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a   .** valid..**.*
10ea0 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  * An expression 
10eb0 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f  of the form ID o
10ec0 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74  r ID.ID refers t
10ed0 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  o a column in a 
10ee0 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75  table..** For su
10ef0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  ch expressions, 
10f00 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74  Expr.op is set t
10f10 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  o TK_COLUMN and 
10f20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a  Expr.iTable is.*
10f30 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75  * the integer cu
10f40 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61  rsor number of a
10f50 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69   VDBE cursor poi
10f60 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61  nting to that ta
10f70 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e  ble and.** Expr.
10f80 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63  iColumn is the c
10f90 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
10fa0 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f   the specific co
10fb0 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  lumn.  If the.**
10fc0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
10fd0 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  sed as a result 
10fe0 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
10ff0 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65  SELECT, then the
11000 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73  .** value is als
11010 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  o stored in the 
11020 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e  Expr.iAgg column
11030 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74   in the aggregat
11040 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20  e so that.** it 
11050 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20  can be accessed 
11060 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67  after all aggreg
11070 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65  ates are compute
11080 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
11090 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
110a0 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c   unbound variabl
110b0 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73  e marker (a ques
110c0 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68  tion mark .** ch
110d0 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
110e0 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
110f0 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
11100 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
11110 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72  index .** number
11120 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62   for that variab
11130 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
11140 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
11150 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45   subquery then E
11160 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64  xpr.iColumn hold
11170 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  s an integer.** 
11180 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
11190 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72  containing the r
111a0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62  esult of the sub
111b0 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a  query.  If the.*
111c0 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73  * subquery gives
111d0 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75   a constant resu
111e0 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20  lt, then iTable 
111f0 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73  is -1.  If the s
11200 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73  ubquery.** gives
11210 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73   a different ans
11220 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74  wer at different
11230 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74   times during st
11240 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69  atement processi
11250 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c  ng.** then iTabl
11260 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73  e is the address
11270 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65   of a subroutine
11280 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74   that computes t
11290 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a  he subquery..**.
112a0 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69  ** If the Expr i
112b0 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c  s of type OP_Col
112c0 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62  umn, and the tab
112d0 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69  le it is selecti
112e0 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20  ng from.** is a 
112f0 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68  disk table or th
11300 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f  e "old.*" pseudo
11310 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61  -table, then pTa
11320 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  b points to the.
11330 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
11340 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
11350 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54  n..**.** ALLOCAT
11360 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a  ION NOTES:.**.**
11370 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61   Expr objects ca
11380 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d  n use a lot of m
11390 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64  emory space in d
113a0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
113b0 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75   To.** help redu
113c0 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ce memory requir
113d0 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65  ements, sometime
113e0 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  s an Expr object
113f0 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e   will be.** trun
11400 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72  cated.  And to r
11410 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72  educe the number
11420 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
11430 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65  ations, sometime
11440 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s.** two or more
11450 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69   Expr objects wi
11460 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ll be stored in 
11470 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20  a single memory 
11480 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74  allocation,.** t
11490 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70  ogether with Exp
114a0 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73  r.zToken strings
114b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
114c0 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50  P_Reduced and EP
114d0 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73  _TokenOnly flags
114e0 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a   are set when.**
114f0 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
11500 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57  is truncated.  W
11510 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69  hen EP_Reduced i
11520 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a  s set, then all.
11530 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70  ** the child Exp
11540 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65  r objects in the
11550 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20   Expr.pLeft and 
11560 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74  Expr.pRight subt
11570 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  rees.** are cont
11580 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65  ained within the
11590 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c   same memory all
115a0 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20  ocation.  Note, 
115b0 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a  however, that.**
115c0 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e   the subtrees in
115d0 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72   Expr.x.pList or
115e0 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
115f0 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72  are always separ
11600 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  ately.** allocat
11610 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ed, regardless o
11620 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
11630 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
11640 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  et..*/.struct Ex
11650 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  pr {.  u8 op;   
11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11670 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f   Operation perfo
11680 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  rmed by this nod
11690 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  e */.  char affi
116a0 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  nity;         /*
116b0 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   The affinity of
116c0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30   the column or 0
116d0 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e   if not a column
116e0 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b   */.  u16 flags;
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11700 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20  Various flags.  
11710 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a  EP_* See below *
11720 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
11730 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20  char *zToken;   
11740 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
11750 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d  value. Zero term
11760 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f  inated and dequo
11770 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ted */.    int i
11780 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20  Value;          
11790 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76    /* Non-negativ
117a0 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
117b0 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a  if EP_IntValue *
117c0 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49  /.  } u;..  /* I
117d0 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  f the EP_TokenOn
117e0 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ly flag is set i
117f0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
11800 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
11810 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
11820 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
11830 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
11840 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
11850 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
11860 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
11870 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
11880 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
11890 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   .  ************
118a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
118b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
118c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
118d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78  *********/..  Ex
118e0 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20  pr *pLeft;      
118f0 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62       /* Left sub
11900 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  node */.  Expr *
11910 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  pRight;         
11920 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64   /* Right subnod
11930 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
11940 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69     ExprList *pLi
11950 73 74 3b 20 20 20 20 20 2f 2a 20 46 75 6e 63 74  st;     /* Funct
11960 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 6f 72  ion arguments or
11970 20 69 6e 20 22 3c 65 78 70 72 3e 20 49 4e 20 28   in "<expr> IN (
11980 3c 65 78 70 72 2d 6c 69 73 74 29 22 20 2a 2f 0a  <expr-list)" */.
11990 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
119a0 65 63 74 3b 20 20 20 20 20 2f 2a 20 55 73 65 64  ect;     /* Used
119b0 20 66 6f 72 20 73 75 62 2d 73 65 6c 65 63 74 73   for sub-selects
119c0 20 61 6e 64 20 22 3c 65 78 70 72 3e 20 49 4e 20   and "<expr> IN 
119d0 28 3c 73 65 6c 65 63 74 3e 29 22 20 2a 2f 0a 20  (<select>)" */. 
119e0 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } x;..  /* If t
119f0 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
11a00 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
11a10 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
11a20 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
11a30 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
11a40 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
11a50 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
11a60 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
11a70 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
11a80 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
11a90 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
11aa0 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a  alfunction..  **
11ab0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11ac0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11ad0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11ae0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11af0 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45  ***/..#if SQLITE
11b00 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
11b10 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  0.  int nHeight;
11b20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
11b30 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65  ight of the tree
11b40 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20   headed by this 
11b50 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  node */.#endif. 
11b60 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
11b70 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
11b80 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d  LUMN: cursor num
11b90 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c  ber of table hol
11ba0 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20  ding column.    
11bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bc0 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53       ** TK_REGIS
11bd0 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75  TER: register nu
11be0 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  mber.           
11bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
11c00 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d   TK_TRIGGER: 1 -
11c10 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 20  > new, 0 -> old 
11c20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
11c30 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
11c40 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
11c50 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
11c60 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
11c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c80 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
11c90 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
11ca0 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a  (always >= 1). *
11cb0 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20  /.  i16 iAgg;   
11cc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
11cd0 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67  ich entry in pAg
11ce0 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72  gInfo->aCol[] or
11cf0 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20   ->aFunc[] */.  
11d00 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61  i16 iRightJoinTa
11d10 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f  ble;   /* If EP_
11d20 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69  FromJoin, the ri
11d30 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65  ght table of the
11d40 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 66 6c   join */.  u8 fl
11d50 61 67 73 32 3b 20 20 20 20 20 20 20 20 20 20 20  ags2;           
11d60 20 20 2f 2a 20 53 65 63 6f 6e 64 20 73 65 74 20    /* Second set 
11d70 6f 66 20 66 6c 61 67 73 2e 20 20 45 50 32 5f 2e  of flags.  EP2_.
11d80 2e 2e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20  .. */.  u8 op2; 
11d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11da0 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f  * TK_REGISTER: o
11db0 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  riginal value of
11dc0 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20   Expr.op.       
11dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11de0 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    ** TK_COLUMN: 
11df0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20  the value of p5 
11e00 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20  for OP_Column.  
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47         ** TK_AGG
11e30 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69  _FUNCTION: nesti
11e40 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67  ng depth */.  Ag
11e50 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
11e60 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
11e70 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e  TK_AGG_COLUMN an
11e80 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  d TK_AGG_FUNCTIO
11e90 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  N */.  Table *pT
11ea0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
11eb0 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f   Table for TK_CO
11ec0 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  LUMN expressions
11ed0 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  . */.};../*.** T
11ee0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
11ef0 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
11f00 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
11f10 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
11f20 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
11f30 6d 4a 6f 69 6e 20 20 20 30 78 30 30 30 31 20 20  mJoin   0x0001  
11f40 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64 20 69 6e  /* Originated in
11f50 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61   ON or USING cla
11f60 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
11f70 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20  .#define EP_Agg 
11f80 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20 2f         0x0002  /
11f90 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  * Contains one o
11fa0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
11fb0 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
11fc0 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65  efine EP_Resolve
11fd0 64 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49  d   0x0004  /* I
11fe0 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  Ds have been res
11ff0 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73  olved to COLUMNs
12000 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45   */.#define EP_E
12010 72 72 6f 72 20 20 20 20 20 20 30 78 30 30 30 38  rror      0x0008
12020 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
12030 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
12040 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23  more errors */.#
12050 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e  define EP_Distin
12060 63 74 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20  ct   0x0010  /* 
12070 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
12080 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54  on with DISTINCT
12090 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
120a0 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74  ine EP_VarSelect
120b0 20 20 30 78 30 30 32 30 20 20 2f 2a 20 70 53 65    0x0020  /* pSe
120c0 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74  lect is correlat
120d0 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74  ed, not constant
120e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
120f0 62 6c 51 75 6f 74 65 64 20 20 30 78 30 30 34 30  blQuoted  0x0040
12100 20 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73    /* token.z was
12110 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22   originally in "
12120 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ..." */.#define 
12130 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 20 30 78  EP_InfixFunc  0x
12140 30 30 38 30 20 20 2f 2a 20 54 72 75 65 20 66 6f  0080  /* True fo
12150 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74  r an infix funct
12160 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c  ion: LIKE, GLOB,
12170 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20   etc */.#define 
12180 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 20 30 78  EP_Collate    0x
12190 30 31 30 30 20 20 2f 2a 20 54 72 65 65 20 63 6f  0100  /* Tree co
121a0 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c  ntains a TK_COLL
121b0 41 54 45 20 6f 70 65 61 72 74 6f 72 20 2a 2f 0a  ATE opeartor */.
121c0 23 64 65 66 69 6e 65 20 45 50 5f 46 69 78 65 64  #define EP_Fixed
121d0 44 65 73 74 20 20 30 78 30 32 30 30 20 20 2f 2a  Dest  0x0200  /*
121e0 20 52 65 73 75 6c 74 20 6e 65 65 64 65 64 20 69   Result needed i
121f0 6e 20 61 20 73 70 65 63 69 66 69 63 20 72 65 67  n a specific reg
12200 69 73 74 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ister */.#define
12210 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 20 30   EP_IntValue   0
12220 78 30 34 30 30 20 20 2f 2a 20 49 6e 74 65 67 65  x0400  /* Intege
12230 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65  r value containe
12240 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f  d in u.iValue */
12250 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53  .#define EP_xIsS
12260 65 6c 65 63 74 20 20 30 78 30 38 30 30 20 20 2f  elect  0x0800  /
12270 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  * x.pSelect is v
12280 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20  alid (otherwise 
12290 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23  x.pList is) */.#
122a0 64 65 66 69 6e 65 20 45 50 5f 48 69 6e 74 20 20  define EP_Hint  
122b0 20 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a 20       0x1000  /* 
122c0 4e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66  Not used */.#def
122d0 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20  ine EP_Reduced  
122e0 20 20 30 78 32 30 30 30 20 20 2f 2a 20 45 78 70    0x2000  /* Exp
122f0 72 20 73 74 72 75 63 74 20 69 73 20 45 58 50 52  r struct is EXPR
12300 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74  _REDUCEDSIZE byt
12310 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  es only */.#defi
12320 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  ne EP_TokenOnly 
12330 20 30 78 34 30 30 30 20 20 2f 2a 20 45 78 70 72   0x4000  /* Expr
12340 20 73 74 72 75 63 74 20 69 73 20 45 58 50 52 5f   struct is EXPR_
12350 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79  TOKENONLYSIZE by
12360 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
12370 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20  ine EP_Static   
12380 20 20 30 78 38 30 30 30 20 20 2f 2a 20 48 65 6c    0x8000  /* Hel
12390 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20  d in memory not 
123a0 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61  obtained from ma
123b0 6c 6c 6f 63 28 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  lloc() */../*.**
123c0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
123d0 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20  re the meanings 
123e0 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45  of bits in the E
123f0 78 70 72 2e 66 6c 61 67 73 32 20 66 69 65 6c 64  xpr.flags2 field
12400 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 32  ..*/.#define EP2
12410 5f 4d 61 6c 6c 6f 63 65 64 54 6f 6b 65 6e 20 20  _MallocedToken  
12420 30 78 30 30 30 31 20 20 2f 2a 20 4e 65 65 64 20  0x0001  /* Need 
12430 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  to sqlite3DbFree
12440 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a  () Expr.zToken *
12450 2f 0a 23 64 65 66 69 6e 65 20 45 50 32 5f 49 72  /.#define EP2_Ir
12460 72 65 64 75 63 69 62 6c 65 20 20 20 20 30 78 30  reducible    0x0
12470 30 30 32 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 45  002  /* Cannot E
12480 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 74 68  XPRDUP_REDUCE th
12490 69 73 20 45 78 70 72 20 2a 2f 0a 0a 2f 2a 0a 2a  is Expr */../*.*
124a0 2a 20 54 68 65 20 70 73 65 75 64 6f 2d 72 6f 75  * The pseudo-rou
124b0 74 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  tine sqlite3Expr
124c0 53 65 74 49 72 72 65 64 75 63 69 62 6c 65 20 73  SetIrreducible s
124d0 65 74 73 20 74 68 65 20 45 50 32 5f 49 72 72 65  ets the EP2_Irre
124e0 64 75 63 69 62 6c 65 0a 2a 2a 20 66 6c 61 67 20  ducible.** flag 
124f0 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  on an expression
12500 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 69   structure.  Thi
12510 73 20 66 6c 61 67 20 69 73 20 75 73 65 64 20 66  s flag is used f
12520 6f 72 20 56 56 26 41 20 6f 6e 6c 79 2e 20 20 54  or VV&A only.  T
12530 68 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 69 73  he.** routine is
12540 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20   implemented as 
12550 61 20 6d 61 63 72 6f 20 74 68 61 74 20 6f 6e 6c  a macro that onl
12560 79 20 77 6f 72 6b 73 20 77 68 65 6e 20 69 6e 20  y works when in 
12570 64 65 62 75 67 67 69 6e 67 20 6d 6f 64 65 2c 0a  debugging mode,.
12580 2a 2a 20 73 6f 20 61 73 20 6e 6f 74 20 74 6f 20  ** so as not to 
12590 62 75 72 64 65 6e 20 70 72 6f 64 75 63 74 69 6f  burden productio
125a0 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 64 65  n code..*/.#ifde
125b0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
125c0 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 49   define ExprSetI
125d0 72 72 65 64 75 63 69 62 6c 65 28 58 29 20 20 28  rreducible(X)  (
125e0 58 29 2d 3e 66 6c 61 67 73 32 20 7c 3d 20 45 50  X)->flags2 |= EP
125f0 32 5f 49 72 72 65 64 75 63 69 62 6c 65 0a 23 65  2_Irreducible.#e
12600 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
12610 72 53 65 74 49 72 72 65 64 75 63 69 62 6c 65 28  rSetIrreducible(
12620 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
12630 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
12640 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
12650 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
12660 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a   bits in the .**
12670 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
12680 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78  d..*/.#define Ex
12690 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c  prHasProperty(E,
126a0 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c  P)     (((E)->fl
126b0 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
126c0 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6e  define ExprHasAn
126d0 79 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  yProperty(E,P)  
126e0 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
126f0 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78  )!=0).#define Ex
12700 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c  prSetProperty(E,
12710 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67  P)     (E)->flag
12720 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45  s|=(P).#define E
12730 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79  xprClearProperty
12740 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61  (E,P)   (E)->fla
12750 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20  gs&=~(P)../*.** 
12760 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
12770 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ine the number o
12780 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64  f bytes required
12790 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70   by a normal Exp
127a0 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e  r .** struct, an
127b0 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
127c0 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  h the EP_Reduced
127d0 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70   flag set in Exp
127e0 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20  r.flags .** and 
127f0 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
12800 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e  ith the EP_Token
12810 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a  Only flag set..*
12820 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46  /.#define EXPR_F
12830 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20  ULLSIZE         
12840 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20    sizeof(Expr)  
12850 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c           /* Full
12860 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65   size */.#define
12870 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
12880 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f  E        offseto
12890 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20  f(Expr,iTable)  
128a0 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72  /* Common featur
128b0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  es */.#define EX
128c0 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
128d0 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
128e0 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20  xpr,pLeft)   /* 
128f0 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a  Fewer features *
12900 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70  /../*.** Flags p
12910 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c  assed to the sql
12920 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75  ite3ExprDup() fu
12930 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20  nction. See the 
12940 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a  header comment .
12950 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33  ** above sqlite3
12960 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65  ExprDup() for de
12970 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tails..*/.#defin
12980 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  e EXPRDUP_REDUCE
12990 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20           0x0001 
129a0 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64   /* Used reduced
129b0 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73  -size Expr nodes
129c0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73   */../*.** A lis
129d0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
129e0 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69  .  Each expressi
129f0 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c  on may optionall
12a00 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65  y have a.** name
12a10 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20  .  An expr/name 
12a20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20  combination can 
12a30 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72  be used in sever
12a40 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a  al ways, such.**
12a50 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   as the list of 
12a60 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65  "expr AS ID" fie
12a70 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  lds following a 
12a80 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74  "SELECT" or in t
12a90 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49  he.** list of "I
12aa0 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20  D = expr" items 
12ab0 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41  in an UPDATE.  A
12ac0 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
12ad0 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f  ions can.** also
12ae0 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
12af0 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75  argument to a fu
12b00 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68  nction, in which
12b10 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d   case the a.zNam
12b20 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f  e.** field is no
12b30 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79  t used..**.** By
12b40 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70   default the Exp
12b50 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f  r.zSpan field ho
12b60 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64  lds a human-read
12b70 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e  able description
12b80 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   of.** the expre
12b90 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
12ba0 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
12bb0 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65  tion of error me
12bc0 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f  ssages and.** co
12bd0 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e  lumn labels.  In
12be0 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72   this case, Expr
12bf0 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61  .zSpan is typica
12c00 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20  lly the text of 
12c10 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72  a.** column expr
12c20 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69  ession as it exi
12c30 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20  sts in a SELECT 
12c40 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65  statement.  Howe
12c50 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62  ver, if.** the b
12c60 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69  SpanIsTab flag i
12c70 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61  s set, then zSpa
12c80 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20  n is overloaded 
12c90 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65  to mean the name
12ca0 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c  .** of the resul
12cb0 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  t column in the 
12cc0 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54  form: DATABASE.T
12cd0 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68  ABLE.COLUMN.  Th
12ce0 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d  is later.** form
12cf0 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d   is used for nam
12d00 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74  e resolution wit
12d10 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c  h nested FROM cl
12d20 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  auses..*/.struct
12d30 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e   ExprList {.  in
12d40 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20  t nExpr;        
12d50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12d60 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e  f expressions on
12d70 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 69   the list */.  i
12d80 6e 74 20 69 45 43 75 72 73 6f 72 3b 20 20 20 20  nt iECursor;    
12d90 20 20 20 20 20 20 2f 2a 20 56 44 42 45 20 43 75        /* VDBE Cu
12da0 72 73 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20  rsor associated 
12db0 77 69 74 68 20 74 68 69 73 20 45 78 70 72 4c 69  with this ExprLi
12dc0 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45  st */.  struct E
12dd0 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f  xprList_item { /
12de0 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65  * For each expre
12df0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73  ssion in the lis
12e00 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  t */.    Expr *p
12e10 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
12e20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20   /* The list of 
12e30 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
12e40 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
12e50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
12e60 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ken associated w
12e70 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73  ith this express
12e80 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
12e90 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20  *zSpan;         
12ea0 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74     /* Original t
12eb0 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65  ext of the expre
12ec0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20  ssion */.    u8 
12ed0 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  sortOrder;      
12ee0 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45       /* 1 for DE
12ef0 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20  SC or 0 for ASC 
12f00 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
12f10 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f  done :1;       /
12f20 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69  * A flag to indi
12f30 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73  cate when proces
12f40 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64  sing is finished
12f50 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
12f60 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20   bSpanIsTab :1; 
12f70 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44  /* zSpan holds D
12f80 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a  B.TABLE.COLUMN *
12f90 2f 0a 20 20 20 20 75 31 36 20 69 4f 72 64 65 72  /.    u16 iOrder
12fa0 42 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a  ByCol;        /*
12fb0 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
12fc0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
12fd0 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
12fe0 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20    u16 iAlias;   
12ff0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
13000 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41  ex into Parse.aA
13010 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65  lias[] for zName
13020 20 2a 2f 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20   */.  } *a;     
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13040 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66  Alloc a power of
13050 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20   two greater or 
13060 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a  equal to nExpr *
13070 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
13080 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
13090 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
130a0 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72 20  d by the parser 
130b0 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a  to record both.*
130c0 2a 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  * the parse tree
130d0 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69   for an expressi
130e0 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20  on and the span 
130f0 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f  of input text fo
13100 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  r an.** expressi
13110 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  on..*/.struct Ex
13120 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20  prSpan {.  Expr 
13130 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
13140 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69   /* The expressi
13150 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f  on parse tree */
13160 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
13170 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73  Start;   /* Firs
13180 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 69  t character of i
13190 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63  nput text */.  c
131a0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b  onst char *zEnd;
131b0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72       /* One char
131c0 61 63 74 65 72 20 70 61 73 74 20 74 68 65 20 65  acter past the e
131d0 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  nd of input text
131e0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
131f0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
13200 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  s structure can 
13210 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69  hold a simple li
13220 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  st of identifier
13230 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68  s,.** such as th
13240 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69  e list "a,b,c" i
13250 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
13260 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a  statements:.**.*
13270 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  *      INSERT IN
13280 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55  TO t(a,b,c) VALU
13290 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20  ES ...;.**      
132a0 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78  CREATE INDEX idx
132b0 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a   ON t(a,b,c);.**
132c0 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49        CREATE TRI
132d0 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45  GGER trig BEFORE
132e0 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62   UPDATE ON t(a,b
132f0 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54  ,c) ...;.**.** T
13300 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20  he IdList.a.idx 
13310 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68  field is used wh
13320 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65  en the IdList re
13330 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73  presents the lis
13340 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e  t of.** column n
13350 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62  ames after a tab
13360 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e  le name in an IN
13370 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  SERT statement. 
13380 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e   In the statemen
13390 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45  t.**.**     INSE
133a0 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
133b0 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61   ....**.** If "a
133c0 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f  " is the k-th co
133d0 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74  lumn of table "t
133e0 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61  ", then IdList.a
133f0 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73  [0].idx==k..*/.s
13400 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20  truct IdList {. 
13410 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69   struct IdList_i
13420 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  tem {.    char *
13430 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
13440 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74  ame of the ident
13450 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  ifier */.    int
13460 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f   idx;          /
13470 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20  * Index in some 
13480 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20  Table.aCol[] of 
13490 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a  a column named z
134a0 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a  Name */.  } *a;.
134b0 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20    int nId;      
134c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
134d0 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74  identifiers on t
134e0 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
134f0 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b  *.** The bitmask
13500 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e 65   datatype define
13510 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20  d below is used 
13520 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69  for various opti
13530 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  mizations..**.**
13540 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66   Changing this f
13550 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20  rom a 64-bit to 
13560 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69  a 32-bit type li
13570 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20  mits the number 
13580 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20  of.** tables in 
13590 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73  a join to 32 ins
135a0 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74  tead of 64.  But
135b0 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73   it also reduces
135c0 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20   the size.** of 
135d0 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20 37  the library by 7
135e0 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36  38 bytes on ix86
135f0 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34  ..*/.typedef u64
13600 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a   Bitmask;../*.**
13610 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   The number of b
13620 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  its in a Bitmask
13630 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22  .  "BMS" means "
13640 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a  BitMask Size"..*
13650 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28  /.#define BMS  (
13660 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74  (int)(sizeof(Bit
13670 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a  mask)*8))../*.**
13680 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
13690 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
136a0 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
136b0 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
136c0 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
136d0 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
136e0 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
136f0 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
13700 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
13710 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
13720 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
13730 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
13740 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
13750 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
13760 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
13770 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
13780 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
13790 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
137a0 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
137b0 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
137c0 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
137d0 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
137e0 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
137f0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
13800 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
13810 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
13820 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
13830 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
13840 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
13850 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
13860 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
13870 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
13880 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
13890 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
138a0 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69  D..**.** The joi
138b0 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74  ntype starts out
138c0 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69   showing the joi
138d0 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74  n type between t
138e0 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
138f0 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74  .** and the next
13900 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69   table on the li
13910 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20  st.  The parser 
13920 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20  builds the list 
13930 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74  this way..** But
13940 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
13950 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c  hiftJoinType() l
13960 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20  ater shifts the 
13970 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61  jointypes so tha
13980 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79  t each.** jointy
13990 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65  pe expresses the
139a0 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
139b0 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
139c0 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a  previous table..
139d0 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c  **.** In the col
139e0 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20  Used field, the 
139f0 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28  high-order bit (
13a00 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69  bit 63) is set i
13a10 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63  f the table.** c
13a20 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61  ontains more tha
13a30 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  n 63 columns and
13a40 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61   the 64-th or la
13a50 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  ter column is us
13a60 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72  ed..*/.struct Sr
13a70 63 4c 69 73 74 20 7b 0a 20 20 75 38 20 6e 53 72  cList {.  u8 nSr
13a80 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
13a90 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72  ber of tables or
13aa0 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74   subqueries in t
13ab0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
13ac0 2f 0a 20 20 75 38 20 6e 41 6c 6c 6f 63 3b 20 20  /.  u8 nAlloc;  
13ad0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13ae0 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74   entries allocat
13af0 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20  ed in a[] below 
13b00 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c  */.  struct SrcL
13b10 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53  ist_item {.    S
13b20 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
13b30 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68   /* Schema to wh
13b40 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73  ich this item is
13b50 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68   fixed */.    ch
13b60 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20  ar *zDatabase;  
13b70 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
13b80 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73  ase holding this
13b90 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
13ba0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
13bb0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
13bc0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
13bd0 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a   *zAlias;     /*
13be0 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66   The "B" part of
13bf0 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61   a "A AS B" phra
13c00 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68  se.  zName is th
13c10 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62  e "A" */.    Tab
13c20 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
13c30 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63  * An SQL table c
13c40 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
13c50 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c  zName */.    Sel
13c60 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f  ect *pSelect;  /
13c70 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65  * A SELECT state
13c80 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61  ment used in pla
13c90 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
13ca0 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  me */.    int ad
13cb0 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41  drFillSub;  /* A
13cc0 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75  ddress of subrou
13cd0 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74  tine to manifest
13ce0 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20   a subquery */. 
13cf0 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e     int regReturn
13d00 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
13d10 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20   holding return 
13d20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46  address of addrF
13d30 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 75 38  illSub */.    u8
13d40 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20   jointype;      
13d50 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20  /* Type of join 
13d60 62 65 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c  between this abl
13d70 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
13d80 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  us */.    unsign
13d90 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31  ed notIndexed :1
13da0 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
13db0 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49  there is a NOT I
13dc0 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f  NDEXED clause */
13dd0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73  .    unsigned is
13de0 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20  Correlated :1;  
13df0 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71  /* True if sub-q
13e00 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74  uery is correlat
13e10 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
13e20 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20  ed viaCoroutine 
13e30 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e  :1;  /* Implemen
13e40 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74  ted as a co-rout
13e50 69 6e 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine */.#ifndef S
13e60 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
13e70 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63  IN.    u8 iSelec
13e80 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70  tId;     /* If p
13e90 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69  Select!=0, the i
13ea0 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c  d of the sub-sel
13eb0 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65  ect in EQP */.#e
13ec0 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75  ndif.    int iCu
13ed0 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68  rsor;      /* Th
13ee0 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  e VDBE cursor nu
13ef0 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63  mber used to acc
13f00 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ess this table *
13f10 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b  /.    Expr *pOn;
13f20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f          /* The O
13f30 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  N clause of a jo
13f40 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74  in */.    IdList
13f50 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54   *pUsing;   /* T
13f60 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  he USING clause 
13f70 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
13f80 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64   Bitmask colUsed
13f90 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c  ;  /* Bit N (1<<
13fa0 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e  N) set if column
13fb0 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73   N of pTab is us
13fc0 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ed */.    char *
13fd0 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a 20 49  zIndex;     /* I
13fe0 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22  dentifier from "
13ff0 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64  INDEXED BY <zInd
14000 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20  ex>" clause */. 
14010 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78     Index *pIndex
14020 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 73 74  ;    /* Index st
14030 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f  ructure correspo
14040 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65 78 2c  nding to zIndex,
14050 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d 20 61   if any */.  } a
14060 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
14070 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
14080 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
14090 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
140a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
140b0 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
140c0 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
140d0 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
140e0 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
140f0 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
14100 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
14110 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
14120 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
14130 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
14140 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
14150 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
14160 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
14170 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
14180 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
14190 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
141a0 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
141b0 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
141c0 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
141d0 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
141e0 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
141f0 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
14200 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
14210 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
14220 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
14230 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
14240 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
14250 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
14260 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
14270 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
14280 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
14290 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
142a0 0a 2f 2a 0a 2a 2a 20 41 20 57 68 65 72 65 50 6c  ./*.** A WherePl
142b0 61 6e 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20  an object holds 
142c0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
142d0 20 64 65 73 63 72 69 62 65 73 20 61 20 6c 6f 6f   describes a loo
142e0 6b 75 70 0a 2a 2a 20 73 74 72 61 74 65 67 79 2e  kup.** strategy.
142f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65  .**.** This obje
14300 63 74 20 69 73 20 69 6e 74 65 6e 64 65 64 20 74  ct is intended t
14310 6f 20 62 65 20 6f 70 61 71 75 65 20 6f 75 74 73  o be opaque outs
14320 69 64 65 20 6f 66 20 74 68 65 20 77 68 65 72 65  ide of the where
14330 2e 63 20 6d 6f 64 75 6c 65 2e 0a 2a 2a 20 49 74  .c module..** It
14340 20 69 73 20 69 6e 63 6c 75 64 65 64 20 68 65 72   is included her
14350 65 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20 74  e only so that t
14360 68 61 74 20 63 6f 6d 70 69 6c 65 72 20 77 69 6c  hat compiler wil
14370 6c 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 69  l know how big i
14380 74 0a 2a 2a 20 69 73 2e 20 20 4e 6f 6e 65 20 6f  t.** is.  None o
14390 66 20 74 68 65 20 66 69 65 6c 64 73 20 69 6e 20  f the fields in 
143a0 74 68 69 73 20 6f 62 6a 65 63 74 20 73 68 6f 75  this object shou
143b0 6c 64 20 62 65 20 75 73 65 64 20 6f 75 74 73 69  ld be used outsi
143c0 64 65 20 6f 66 0a 2a 2a 20 74 68 65 20 77 68 65  de of.** the whe
143d0 72 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a 2a 2a 0a  re.c module..**.
143e0 2a 2a 20 57 69 74 68 69 6e 20 74 68 65 20 75 6e  ** Within the un
143f0 69 6f 6e 2c 20 70 49 64 78 20 69 73 20 6f 6e 6c  ion, pIdx is onl
14400 79 20 75 73 65 64 20 77 68 65 6e 20 77 73 46 6c  y used when wsFl
14410 61 67 73 26 57 48 45 52 45 5f 49 4e 44 45 58 45  ags&WHERE_INDEXE
14420 44 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 70 54  D is true..** pT
14430 65 72 6d 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  erm is only used
14440 20 77 68 65 6e 20 77 73 46 6c 61 67 73 26 57 48   when wsFlags&WH
14450 45 52 45 5f 4d 55 4c 54 49 5f 4f 52 20 69 73 20  ERE_MULTI_OR is 
14460 74 72 75 65 2e 20 20 41 6e 64 20 70 56 74 61 62  true.  And pVtab
14470 49 64 78 0a 2a 2a 20 69 73 20 6f 6e 6c 79 20 75  Idx.** is only u
14480 73 65 64 20 77 68 65 6e 20 77 73 46 6c 61 67 73  sed when wsFlags
14490 26 57 48 45 52 45 5f 56 49 52 54 55 41 4c 54 41  &WHERE_VIRTUALTA
144a0 42 4c 45 20 69 73 20 74 72 75 65 2e 20 20 49 74  BLE is true.  It
144b0 20 69 73 20 6e 65 76 65 72 20 74 68 65 0a 2a 2a   is never the.**
144c0 20 63 61 73 65 20 74 68 61 74 20 6d 6f 72 65 20   case that more 
144d0 74 68 61 6e 20 6f 6e 65 20 6f 66 20 74 68 65 73  than one of thes
144e0 65 20 63 6f 6e 64 69 74 69 6f 6e 73 20 69 73 20  e conditions is 
144f0 74 72 75 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  true..*/.struct 
14500 57 68 65 72 65 50 6c 61 6e 20 7b 0a 20 20 75 33  WherePlan {.  u3
14510 32 20 77 73 46 6c 61 67 73 3b 20 20 20 20 20 20  2 wsFlags;      
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14530 57 48 45 52 45 5f 2a 20 66 6c 61 67 73 20 74 68  WHERE_* flags th
14540 61 74 20 64 65 73 63 72 69 62 65 20 74 68 65 20  at describe the 
14550 73 74 72 61 74 65 67 79 20 2a 2f 0a 20 20 75 31  strategy */.  u1
14560 36 20 6e 45 71 3b 20 20 20 20 20 20 20 20 20 20  6 nEq;          
14570 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14580 4e 75 6d 62 65 72 20 6f 66 20 3d 3d 20 63 6f 6e  Number of == con
14590 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 75 31  straints */.  u1
145a0 36 20 6e 4f 42 53 61 74 3b 20 20 20 20 20 20 20  6 nOBSat;       
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
145c0 4e 75 6d 62 65 72 20 6f 66 20 4f 52 44 45 52 20  Number of ORDER 
145d0 42 59 20 74 65 72 6d 73 20 73 61 74 69 73 66 69  BY terms satisfi
145e0 65 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e  ed */.  double n
145f0 52 6f 77 3b 20 20 20 20 20 20 20 20 20 20 20 20  Row;            
14600 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
14610 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  ted number of ro
14620 77 73 20 28 66 6f 72 20 45 51 50 29 20 2a 2f 0a  ws (for EQP) */.
14630 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 49 6e    union {.    In
14640 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20 20 20  dex *pIdx;      
14650 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14660 49 6e 64 65 78 20 77 68 65 6e 20 57 48 45 52 45  Index when WHERE
14670 5f 49 4e 44 45 58 45 44 20 69 73 20 74 72 75 65  _INDEXED is true
14680 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 57   */.    struct W
14690 68 65 72 65 54 65 72 6d 20 2a 70 54 65 72 6d 3b  hereTerm *pTerm;
146a0 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20         /* WHERE 
146b0 63 6c 61 75 73 65 20 74 65 72 6d 20 66 6f 72 20  clause term for 
146c0 4f 52 2d 73 65 61 72 63 68 20 2a 2f 0a 20 20 20  OR-search */.   
146d0 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69   sqlite3_index_i
146e0 6e 66 6f 20 2a 70 56 74 61 62 49 64 78 3b 20 20  nfo *pVtabIdx;  
146f0 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65  /* Virtual table
14700 20 69 6e 64 65 78 20 74 6f 20 75 73 65 20 2a 2f   index to use */
14710 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  .  } u;.};../*.*
14720 2a 20 46 6f 72 20 65 61 63 68 20 6e 65 73 74 65  * For each neste
14730 64 20 6c 6f 6f 70 20 69 6e 20 61 20 57 48 45 52  d loop in a WHER
14740 45 20 63 6c 61 75 73 65 20 69 6d 70 6c 65 6d 65  E clause impleme
14750 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 57 68 65  ntation, the Whe
14760 72 65 49 6e 66 6f 0a 2a 2a 20 73 74 72 75 63 74  reInfo.** struct
14770 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 73  ure contains a s
14780 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f  ingle instance o
14790 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
147a0 2e 20 20 54 68 69 73 20 73 74 72 75 63 74 75 72  .  This structur
147b0 65 0a 2a 2a 20 69 73 20 69 6e 74 65 6e 64 65 64  e.** is intended
147c0 20 74 6f 20 62 65 20 70 72 69 76 61 74 65 20 74   to be private t
147d0 6f 20 74 68 65 20 77 68 65 72 65 2e 63 20 6d 6f  o the where.c mo
147e0 64 75 6c 65 20 61 6e 64 20 73 68 6f 75 6c 64 20  dule and should 
147f0 6e 6f 74 20 62 65 0a 2a 2a 20 61 63 63 65 73 73  not be.** access
14800 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 62 79 20   or modified by 
14810 6f 74 68 65 72 20 6d 6f 64 75 6c 65 73 2e 0a 2a  other modules..*
14820 2a 0a 2a 2a 20 54 68 65 20 70 49 64 78 49 6e 66  *.** The pIdxInf
14830 6f 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  o field is used 
14840 74 6f 20 68 65 6c 70 20 70 69 63 6b 20 74 68 65  to help pick the
14850 20 62 65 73 74 20 69 6e 64 65 78 20 6f 6e 20 61   best index on a
14860 0a 2a 2a 20 76 69 72 74 75 61 6c 20 74 61 62 6c  .** virtual tabl
14870 65 2e 20 20 54 68 65 20 70 49 64 78 49 6e 66 6f  e.  The pIdxInfo
14880 20 70 6f 69 6e 74 65 72 20 63 6f 6e 74 61 69 6e   pointer contain
14890 73 20 69 6e 64 65 78 69 6e 67 0a 2a 2a 20 69 6e  s indexing.** in
148a0 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68  formation for th
148b0 65 20 69 2d 74 68 20 74 61 62 6c 65 20 69 6e 20  e i-th table in 
148c0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
148d0 62 65 66 6f 72 65 20 72 65 6f 72 64 65 72 69 6e  before reorderin
148e0 67 2e 0a 2a 2a 20 41 6c 6c 20 74 68 65 20 70 49  g..** All the pI
148f0 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65 72 73 20  dxInfo pointers 
14900 61 72 65 20 66 72 65 65 64 20 62 79 20 77 68 65  are freed by whe
14910 72 65 49 6e 66 6f 46 72 65 65 28 29 20 69 6e 20  reInfoFree() in 
14920 77 68 65 72 65 2e 63 2e 0a 2a 2a 20 41 6c 6c 20  where.c..** All 
14930 6f 74 68 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f  other informatio
14940 6e 20 69 6e 20 74 68 65 20 69 2d 74 68 20 57 68  n in the i-th Wh
14950 65 72 65 4c 65 76 65 6c 20 6f 62 6a 65 63 74 20  ereLevel object 
14960 66 6f 72 20 74 68 65 20 69 2d 74 68 20 74 61 62  for the i-th tab
14970 6c 65 0a 2a 2a 20 61 66 74 65 72 20 46 52 4f 4d  le.** after FROM
14980 20 63 6c 61 75 73 65 20 6f 72 64 65 72 69 6e 67   clause ordering
14990 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 68 65 72  ..*/.struct Wher
149a0 65 4c 65 76 65 6c 20 7b 0a 20 20 57 68 65 72 65  eLevel {.  Where
149b0 50 6c 61 6e 20 70 6c 61 6e 3b 20 20 20 20 20 20  Plan plan;      
149c0 20 2f 2a 20 71 75 65 72 79 20 70 6c 61 6e 20 66   /* query plan f
149d0 6f 72 20 74 68 69 73 20 65 6c 65 6d 65 6e 74 20  or this element 
149e0 6f 66 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  of the FROM clau
149f0 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 65 66  se */.  int iLef
14a00 74 4a 6f 69 6e 3b 20 20 20 20 20 20 20 20 2f 2a  tJoin;        /*
14a10 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 75 73 65   Memory cell use
14a20 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 4c  d to implement L
14a30 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 20 2a  EFT OUTER JOIN *
14a40 2f 0a 20 20 69 6e 74 20 69 54 61 62 43 75 72 3b  /.  int iTabCur;
14a50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
14a60 20 56 44 42 45 20 63 75 72 73 6f 72 20 75 73 65   VDBE cursor use
14a70 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
14a80 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69  table */.  int i
14a90 49 64 78 43 75 72 3b 20 20 20 20 20 20 20 20 20  IdxCur;         
14aa0 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
14ab0 73 6f 72 20 75 73 65 64 20 74 6f 20 61 63 63 65  sor used to acce
14ac0 73 73 20 70 49 64 78 20 2a 2f 0a 20 20 69 6e 74  ss pIdx */.  int
14ad0 20 61 64 64 72 42 72 6b 3b 20 20 20 20 20 20 20   addrBrk;       
14ae0 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20     /* Jump here 
14af0 74 6f 20 62 72 65 61 6b 20 6f 75 74 20 6f 66 20  to break out of 
14b00 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e  the loop */.  in
14b10 74 20 61 64 64 72 4e 78 74 3b 20 20 20 20 20 20  t addrNxt;      
14b20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65      /* Jump here
14b30 20 74 6f 20 73 74 61 72 74 20 74 68 65 20 6e 65   to start the ne
14b40 78 74 20 49 4e 20 63 6f 6d 62 69 6e 61 74 69 6f  xt IN combinatio
14b50 6e 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43  n */.  int addrC
14b60 6f 6e 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ont;         /* 
14b70 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 63 6f 6e  Jump here to con
14b80 74 69 6e 75 65 20 77 69 74 68 20 74 68 65 20 6e  tinue with the n
14b90 65 78 74 20 6c 6f 6f 70 20 63 79 63 6c 65 20 2a  ext loop cycle *
14ba0 2f 0a 20 20 69 6e 74 20 61 64 64 72 46 69 72 73  /.  int addrFirs
14bb0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72  t;        /* Fir
14bc0 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  st instruction o
14bd0 66 20 69 6e 74 65 72 69 6f 72 20 6f 66 20 74 68  f interior of th
14be0 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 75 38 20 69  e loop */.  u8 i
14bf0 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20  From;           
14c00 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
14c10 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
14c20 75 73 65 20 2a 2f 0a 20 20 75 38 20 6f 70 2c 20  use */.  u8 op, 
14c30 70 35 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  p5;            /
14c40 2a 20 4f 70 63 6f 64 65 20 61 6e 64 20 50 35 20  * Opcode and P5 
14c50 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 74 68  of the opcode th
14c60 61 74 20 65 6e 64 73 20 74 68 65 20 6c 6f 6f 70  at ends the loop
14c70 20 2a 2f 0a 20 20 69 6e 74 20 70 31 2c 20 70 32   */.  int p1, p2
14c80 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
14c90 70 65 72 61 6e 64 73 20 6f 66 20 74 68 65 20 6f  perands of the o
14ca0 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 65 6e  pcode used to en
14cb0 64 73 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20  ds the loop */. 
14cc0 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20   union {        
14cd0 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
14ce0 61 74 69 6f 6e 20 74 68 61 74 20 64 65 70 65 6e  ation that depen
14cf0 64 73 20 6f 6e 20 70 6c 61 6e 2e 77 73 46 6c 61  ds on plan.wsFla
14d00 67 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  gs */.    struct
14d10 20 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 49 6e   {.      int nIn
14d20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
14d30 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
14d40 69 65 73 20 69 6e 20 61 49 6e 4c 6f 6f 70 5b 5d  ies in aInLoop[]
14d50 20 2a 2f 0a 20 20 20 20 20 20 73 74 72 75 63 74   */.      struct
14d60 20 49 6e 4c 6f 6f 70 20 7b 0a 20 20 20 20 20 20   InLoop {.      
14d70 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20    int iCur;     
14d80 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
14d90 56 44 42 45 20 63 75 72 73 6f 72 20 75 73 65 64  VDBE cursor used
14da0 20 62 79 20 74 68 69 73 20 49 4e 20 6f 70 65 72   by this IN oper
14db0 61 74 6f 72 20 2a 2f 0a 20 20 20 20 20 20 20 20  ator */.        
14dc0 69 6e 74 20 61 64 64 72 49 6e 54 6f 70 3b 20 20  int addrInTop;  
14dd0 20 20 20 20 20 20 20 2f 2a 20 54 6f 70 20 6f 66         /* Top of
14de0 20 74 68 65 20 49 4e 20 6c 6f 6f 70 20 2a 2f 0a   the IN loop */.
14df0 20 20 20 20 20 20 20 20 75 38 20 65 45 6e 64 4c          u8 eEndL
14e00 6f 6f 70 4f 70 3b 20 20 20 20 20 20 20 20 20 2f  oopOp;         /
14e10 2a 20 49 4e 20 4c 6f 6f 70 20 74 65 72 6d 69 6e  * IN Loop termin
14e20 61 74 6f 72 2e 20 4f 50 5f 4e 65 78 74 20 6f 72  ator. OP_Next or
14e30 20 4f 50 5f 50 72 65 76 20 2a 2f 0a 20 20 20 20   OP_Prev */.    
14e40 20 20 7d 20 2a 61 49 6e 4c 6f 6f 70 3b 20 20 20    } *aInLoop;   
14e50 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72          /* Infor
14e60 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
14e70 68 20 6e 65 73 74 65 64 20 49 4e 20 6f 70 65 72  h nested IN oper
14e80 61 74 6f 72 20 2a 2f 0a 20 20 20 20 7d 20 69 6e  ator */.    } in
14e90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
14ea0 20 20 2f 2a 20 55 73 65 64 20 77 68 65 6e 20 70    /* Used when p
14eb0 6c 61 6e 2e 77 73 46 6c 61 67 73 26 57 48 45 52  lan.wsFlags&WHER
14ec0 45 5f 49 4e 5f 41 42 4c 45 20 2a 2f 0a 20 20 20  E_IN_ABLE */.   
14ed0 20 49 6e 64 65 78 20 2a 70 43 6f 76 69 64 78 3b   Index *pCovidx;
14ee0 20 20 20 20 20 20 20 2f 2a 20 50 6f 73 73 69 62         /* Possib
14ef0 6c 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65  le covering inde
14f00 78 20 66 6f 72 20 57 48 45 52 45 5f 4d 55 4c 54  x for WHERE_MULT
14f10 49 5f 4f 52 20 2a 2f 0a 20 20 7d 20 75 3b 0a 20  I_OR */.  } u;. 
14f20 20 64 6f 75 62 6c 65 20 72 4f 70 74 43 6f 73 74   double rOptCost
14f30 3b 20 20 20 20 20 20 2f 2a 20 22 4f 70 74 69 6d  ;      /* "Optim
14f40 61 6c 22 20 63 6f 73 74 20 66 6f 72 20 74 68 69  al" cost for thi
14f50 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 73 74 72  s level */.  str
14f60 75 63 74 20 57 68 65 72 65 4c 6f 6f 70 20 2a 70  uct WhereLoop *p
14f70 57 4c 6f 6f 70 3b 20 20 2f 2a 20 54 68 65 20 73  WLoop;  /* The s
14f80 65 6c 65 63 74 65 64 20 57 68 65 72 65 4c 6f 6f  elected WhereLoo
14f90 70 20 6f 62 6a 65 63 74 20 2a 2f 0a 0a 20 20 2f  p object */..  /
14fa0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
14fb0 66 69 65 6c 64 20 69 73 20 72 65 61 6c 6c 79 20  field is really 
14fc0 6e 6f 74 20 70 61 72 74 20 6f 66 20 74 68 65 20  not part of the 
14fd0 63 75 72 72 65 6e 74 20 6c 65 76 65 6c 2e 20 20  current level.  
14fe0 42 75 74 0a 20 20 2a 2a 20 77 65 20 6e 65 65 64  But.  ** we need
14ff0 20 61 20 70 6c 61 63 65 20 74 6f 20 63 61 63 68   a place to cach
15000 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
15010 69 6e 64 65 78 20 69 6e 66 6f 72 6d 61 74 69 6f  index informatio
15020 6e 20 66 6f 72 20 65 61 63 68 0a 20 20 2a 2a 20  n for each.  ** 
15030 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
15040 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
15050 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 4c 65   and the WhereLe
15060 76 65 6c 20 73 74 72 75 63 74 75 72 65 20 69 73  vel structure is
15070 0a 20 20 2a 2a 20 61 20 63 6f 6e 76 65 6e 69 65  .  ** a convenie
15080 6e 74 20 70 6c 61 63 65 20 73 69 6e 63 65 20 74  nt place since t
15090 68 65 72 65 20 69 73 20 6f 6e 65 20 57 68 65 72  here is one Wher
150a0 65 4c 65 76 65 6c 20 66 6f 72 20 65 61 63 68 20  eLevel for each 
150b0 46 52 4f 4d 20 63 6c 61 75 73 65 0a 20 20 2a 2a  FROM clause.  **
150c0 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20   element..  */. 
150d0 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69   sqlite3_index_i
150e0 6e 66 6f 20 2a 70 49 64 78 49 6e 66 6f 3b 20 20  nfo *pIdxInfo;  
150f0 2f 2a 20 49 6e 64 65 78 20 69 6e 66 6f 20 66 6f  /* Index info fo
15100 72 20 6e 2d 74 68 20 73 6f 75 72 63 65 20 74 61  r n-th source ta
15110 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ble */.};../*.**
15120 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61   Flags appropria
15130 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c  te for the wctrl
15140 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20  Flags parameter 
15150 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  of sqlite3WhereB
15160 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68  egin().** and th
15170 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72  e WhereInfo.wctr
15180 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a  lFlags member..*
15190 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
151a0 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20  ORDERBY_NORMAL  
151b0 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70   0x0000 /* No-op
151c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
151d0 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20  E_ORDERBY_MIN   
151e0 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44     0x0001 /* ORD
151f0 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
15200 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20   for min() func 
15210 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
15220 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20  _ORDERBY_MAX    
15230 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45    0x0002 /* ORDE
15240 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
15250 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a  for max() func *
15260 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
15270 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20  ONEPASS_DESIRED 
15280 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20   0x0004 /* Want 
15290 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55  to do one-pass U
152a0 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a  PDATE/DELETE */.
152b0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55  #define WHERE_DU
152c0 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30  PLICATES_OK    0
152d0 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72  x0008 /* Ok to r
152e0 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65  eturn a row more
152f0 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64   than once */.#d
15300 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54  efine WHERE_OMIT
15310 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30  _OPEN_CLOSE  0x0
15320 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72  010 /* Table cur
15330 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64 79  sors are already
15340 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   open */.#define
15350 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42   WHERE_FORCE_TAB
15360 4c 45 20 20 20 20 20 20 30 78 30 30 32 30 20 2f  LE      0x0020 /
15370 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20  * Do not use an 
15380 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63  index-only searc
15390 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  h */.#define WHE
153a0 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59  RE_ONETABLE_ONLY
153b0 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e      0x0040 /* On
153c0 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73 74 20  ly code the 1st 
153d0 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73  table in pTabLis
153e0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
153f0 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20 20 20  RE_AND_ONLY     
15400 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44 6f      0x0080 /* Do
15410 6e 27 74 20 75 73 65 20 69 6e 64 69 63 65 73 20  n't use indices 
15420 66 6f 72 20 4f 52 20 74 65 72 6d 73 20 2a 2f 0a  for OR terms */.
15430 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52  #define WHERE_GR
15440 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30  OUPBY          0
15450 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42  x0100 /* pOrderB
15460 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52  y is really a GR
15470 4f 55 50 20 42 59 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  OUP BY */../*.**
15480 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
15490 65 20 70 72 6f 63 65 73 73 69 6e 67 20 72 6f 75  e processing rou
154a0 74 69 6e 65 20 68 61 73 20 74 77 6f 20 68 61 6c  tine has two hal
154b0 76 65 73 2e 20 20 54 68 65 0a 2a 2a 20 66 69 72  ves.  The.** fir
154c0 73 74 20 70 61 72 74 20 64 6f 65 73 20 74 68 65  st part does the
154d0 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 57 48   start of the WH
154e0 45 52 45 20 6c 6f 6f 70 20 61 6e 64 20 74 68 65  ERE loop and the
154f0 20 73 65 63 6f 6e 64 0a 2a 2a 20 68 61 6c 66 20   second.** half 
15500 64 6f 65 73 20 74 68 65 20 74 61 69 6c 20 6f 66  does the tail of
15510 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 2e   the WHERE loop.
15520 20 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66    An instance of
15530 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75  .** this structu
15540 72 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 62  re is returned b
15550 79 20 74 68 65 20 66 69 72 73 74 20 68 61 6c 66  y the first half
15560 20 61 6e 64 20 70 61 73 73 65 64 0a 2a 2a 20 69   and passed.** i
15570 6e 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 20 68  nto the second h
15580 61 6c 66 20 74 6f 20 67 69 76 65 20 73 6f 6d 65  alf to give some
15590 20 63 6f 6e 74 69 6e 75 69 74 79 2e 0a 2a 2f 0a   continuity..*/.
155a0 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f  struct WhereInfo
155b0 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
155c0 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  se;            /
155d0 2a 20 50 61 72 73 69 6e 67 20 61 6e 64 20 63 6f  * Parsing and co
155e0 64 65 20 67 65 6e 65 72 61 74 69 6e 67 20 63 6f  de generating co
155f0 6e 74 65 78 74 20 2a 2f 0a 20 20 53 72 63 4c 69  ntext */.  SrcLi
15600 73 74 20 2a 70 54 61 62 4c 69 73 74 3b 20 20 20  st *pTabList;   
15610 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
15620 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f  tables in the jo
15630 69 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  in */.  ExprList
15640 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 20   *pOrderBy;     
15650 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
15660 59 20 63 6c 61 75 73 65 20 6f 72 20 4e 55 4c 4c  Y clause or NULL
15670 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
15680 70 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20  pDistinct;      
15690 2f 2a 20 44 49 53 54 49 4e 43 54 20 4f 4e 20 76  /* DISTINCT ON v
156a0 61 6c 75 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a  alues, or NULL *
156b0 2f 0a 20 20 42 69 74 6d 61 73 6b 20 72 65 76 4d  /.  Bitmask revM
156c0 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ask;          /*
156d0 20 4d 61 73 6b 20 6f 66 20 4f 52 44 45 52 20 42   Mask of ORDER B
156e0 59 20 74 65 72 6d 73 20 74 68 61 74 20 6e 65 65  Y terms that nee
156f0 64 20 72 65 76 65 72 73 69 6e 67 20 2a 2f 0a 20  d reversing */. 
15700 20 75 31 36 20 6e 4f 42 53 61 74 3b 20 20 20 20   u16 nOBSat;    
15710 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
15720 6d 62 65 72 20 6f 66 20 4f 52 44 45 52 20 42 59  mber of ORDER BY
15730 20 74 65 72 6d 73 20 73 61 74 69 73 66 69 65 64   terms satisfied
15740 20 62 79 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20   by indices */. 
15750 20 75 31 36 20 77 63 74 72 6c 46 6c 61 67 73 3b   u16 wctrlFlags;
15760 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c             /* Fl
15770 61 67 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 70  ags originally p
15780 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33  assed to sqlite3
15790 57 68 65 72 65 42 65 67 69 6e 28 29 20 2a 2f 0a  WhereBegin() */.
157a0 20 20 75 38 20 6f 6b 4f 6e 65 50 61 73 73 3b 20    u8 okOnePass; 
157b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
157c0 6b 20 74 6f 20 75 73 65 20 6f 6e 65 2d 70 61 73  k to use one-pas
157d0 73 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20  s algorithm for 
157e0 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f  UPDATE/DELETE */
157f0 0a 20 20 75 38 20 75 6e 74 65 73 74 65 64 54 65  .  u8 untestedTe
15800 72 6d 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  rms;         /* 
15810 4e 6f 74 20 61 6c 6c 20 57 48 45 52 45 20 74 65  Not all WHERE te
15820 72 6d 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  rms resolved by 
15830 6f 75 74 65 72 20 6c 6f 6f 70 20 2a 2f 0a 20 20  outer loop */.  
15840 75 38 20 65 44 69 73 74 69 6e 63 74 3b 20 20 20  u8 eDistinct;   
15850 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
15860 20 6f 66 20 74 68 65 20 57 48 45 52 45 5f 44 49   of the WHERE_DI
15870 53 54 49 4e 43 54 5f 2a 20 76 61 6c 75 65 73 20  STINCT_* values 
15880 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 6e 74 20 69  below */.  int i
15890 54 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  Top;            
158a0 20 20 20 20 20 2f 2a 20 54 68 65 20 76 65 72 79       /* The very
158b0 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
158c0 65 20 57 48 45 52 45 20 6c 6f 6f 70 20 2a 2f 0a  e WHERE loop */.
158d0 20 20 69 6e 74 20 69 43 6f 6e 74 69 6e 75 65 3b    int iContinue;
158e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a              /* J
158f0 75 6d 70 20 68 65 72 65 20 74 6f 20 63 6f 6e 74  ump here to cont
15900 69 6e 75 65 20 77 69 74 68 20 6e 65 78 74 20 72  inue with next r
15910 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ecord */.  int i
15920 42 72 65 61 6b 3b 20 20 20 20 20 20 20 20 20 20  Break;          
15930 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72       /* Jump her
15940 65 20 74 6f 20 62 72 65 61 6b 20 6f 75 74 20 6f  e to break out o
15950 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20  f the loop */.  
15960 69 6e 74 20 6e 4c 65 76 65 6c 3b 20 20 20 20 20  int nLevel;     
15970 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15980 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 6c 6f  ber of nested lo
15990 6f 70 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 57  op */.  struct W
159a0 68 65 72 65 43 6c 61 75 73 65 20 2a 70 57 43 3b  hereClause *pWC;
159b0 20 20 2f 2a 20 44 65 63 6f 6d 70 6f 73 69 74 69    /* Decompositi
159c0 6f 6e 20 6f 66 20 74 68 65 20 57 48 45 52 45 20  on of the WHERE 
159d0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75  clause */.  stru
159e0 63 74 20 57 68 65 72 65 4c 6f 6f 70 20 2a 70 4c  ct WhereLoop *pL
159f0 6f 6f 70 73 3b 20 2f 2a 20 4c 69 73 74 20 6f 66  oops; /* List of
15a00 20 61 6c 6c 20 57 68 65 72 65 4c 6f 6f 70 20 6f   all WhereLoop o
15a10 62 6a 65 63 74 73 20 2a 2f 0a 20 20 64 6f 75 62  bjects */.  doub
15a20 6c 65 20 73 61 76 65 64 4e 51 75 65 72 79 4c 6f  le savedNQueryLo
15a30 6f 70 3b 20 20 20 2f 2a 20 70 50 61 72 73 65 2d  op;   /* pParse-
15a40 3e 6e 51 75 65 72 79 4c 6f 6f 70 20 6f 75 74 73  >nQueryLoop outs
15a50 69 64 65 20 74 68 65 20 57 48 45 52 45 20 6c 6f  ide the WHERE lo
15a60 6f 70 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e  op */.  double n
15a70 52 6f 77 4f 75 74 3b 20 20 20 20 20 20 20 20 20  RowOut;         
15a80 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e    /* Estimated n
15a90 75 6d 62 65 72 20 6f 66 20 6f 75 74 70 75 74 20  umber of output 
15aa0 72 6f 77 73 20 2a 2f 0a 20 20 57 68 65 72 65 4c  rows */.  WhereL
15ab0 65 76 65 6c 20 61 5b 31 5d 3b 20 20 20 20 20 20  evel a[1];      
15ac0 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
15ad0 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 6e 65  on about each ne
15ae0 73 74 20 6c 6f 6f 70 20 69 6e 20 57 48 45 52 45  st loop in WHERE
15af0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
15b00 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 57 68  ed values for Wh
15b10 65 72 65 49 6e 66 6f 2e 65 44 69 73 74 69 6e 63  ereInfo.eDistinc
15b20 74 20 61 6e 64 20 44 69 73 74 69 6e 63 74 43 74  t and DistinctCt
15b30 78 2e 65 54 6e 63 74 54 79 70 65 20 2a 2f 0a 23  x.eTnctType */.#
15b40 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
15b50 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20  TINCT_NOOP      
15b60 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b  0  /* DISTINCT k
15b70 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20  eyword not used 
15b80 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
15b90 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45  _DISTINCT_UNIQUE
15ba0 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70      1  /* No dup
15bb0 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  licates */.#defi
15bc0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
15bd0 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f  T_ORDERED   2  /
15be0 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73  * All duplicates
15bf0 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f   are adjacent */
15c00 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
15c10 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45  ISTINCT_UNORDERE
15c20 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74  D 3  /* Duplicat
15c30 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64  es are scattered
15c40 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d   */../*.** A Nam
15c50 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73  eContext defines
15c60 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68   a context in wh
15c70 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74  ich to resolve t
15c80 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a  able and column.
15c90 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63  ** names.  The c
15ca0 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20  ontext consists 
15cb0 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62  of a list of tab
15cc0 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73  les (the pSrcLis
15cd0 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20  t) field and.** 
15ce0 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  a list of named 
15cf0 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69  expression (pELi
15d00 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20  st).  The named 
15d10 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
15d20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20  may.** be NULL. 
15d30 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73   The pSrc corres
15d40 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f  ponds to the FRO
15d50 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
15d60 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68  LECT or.** to th
15d70 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
15d80 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53  erated on by INS
15d90 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20  ERT, UPDATE, or 
15da0 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20  DELETE.  The.** 
15db0 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  pEList correspon
15dc0 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  ds to the result
15dd0 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54   set of a SELECT
15de0 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72   and is NULL for
15df0 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d  .** other statem
15e00 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65  ents..**.** Name
15e10 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20  Contexts can be 
15e20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65  nested.  When re
15e30 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74  solving names, t
15e40 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a  he inner-most .*
15e50 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
15e60 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
15e70 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
15e80 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
15e90 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
15ea0 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
15eb0 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
15ec0 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
15ed0 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
15ee0 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
15ef0 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
15f00 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
15f10 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
15f20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
15f30 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
15f40 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
15f50 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
15f60 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
15f70 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
15f80 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
15f90 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a  remented. .**.**
15fa0 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67   Each subquery g
15fb0 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f  ets a new NameCo
15fc0 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78  ntext.  The pNex
15fd0 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74  t field points t
15fe0 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  o the.** NameCon
15ff0 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65  text in the pare
16000 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20  nt query.  Thus 
16010 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73  the process of s
16020 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e  canning the.** N
16030 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20  ameContext list 
16040 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73  corresponds to s
16050 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68  earching through
16060 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75   successively ou
16070 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65  ter.** subquerie
16080 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20  s looking for a 
16090 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74  match..*/.struct
160a0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20   NameContext {. 
160b0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
160c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
160d0 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ser */.  SrcList
160e0 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a   *pSrcList;   /*
160f0 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   One or more tab
16100 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f  les used to reso
16110 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45  lve names */.  E
16120 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
16130 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
16140 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78  list of named ex
16150 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 41  pressions */.  A
16160 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
16170 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ;   /* Informati
16180 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61  on about aggrega
16190 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65  tes at this leve
161a0 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  l */.  NameConte
161b0 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
161c0 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
161d0 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
161e0 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
161f0 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
16200 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16210 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
16220 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
16230 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
16240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16250 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
16260 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
16270 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
16280 73 20 2a 2f 0a 20 20 75 38 20 6e 63 46 6c 61 67  s */.  u8 ncFlag
16290 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  s;          /* Z
162a0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
162b0 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
162c0 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  elow */.};../*.*
162d0 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
162e0 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e   for the NameCon
162f0 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69  text, ncFlags fi
16300 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
16310 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30  NC_AllowAgg  0x0
16320 31 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74  1    /* Aggregat
16330 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
16340 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a  allowed here */.
16350 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67  #define NC_HasAg
16360 67 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20  g    0x02    /* 
16370 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  One or more aggr
16380 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
16390 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
163a0 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30  NC_IsCheck   0x0
163b0 34 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  4    /* True if 
163c0 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
163d0 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74  in a CHECK const
163e0 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
163f0 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78   NC_InAggFunc 0x
16400 30 38 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  08    /* True if
16410 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d   analyzing argum
16420 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66  ents to an agg f
16430 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  unc */.#define N
16440 43 5f 41 73 4d 61 79 62 65 20 20 20 30 78 31 30  C_AsMaybe   0x10
16450 20 20 20 20 2f 2a 20 52 65 73 6f 6c 76 65 20 74      /* Resolve t
16460 6f 20 41 53 20 74 65 72 6d 73 20 6f 66 20 74 68  o AS terms of th
16470 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 6e 6c  e result set onl
16480 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
164a0 2a 20 69 66 20 6e 6f 20 6f 74 68 65 72 20 72 65  * if no other re
164b0 73 6f 6c 75 74 69 6f 6e 20 69 73 20 61 76 61 69  solution is avai
164c0 6c 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  lable */../*.** 
164d0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
164e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
164f0 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
16500 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  all information.
16510 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  ** needed to gen
16520 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61  erate code for a
16530 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73   single SELECT s
16540 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  tatement..**.** 
16550 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f  nLimit is set to
16560 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20   -1 if there is 
16570 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e  no LIMIT clause.
16580 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74    nOffset is set
16590 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65   to 0..** If the
165a0 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c  re is a LIMIT cl
165b0 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72  ause, the parser
165c0 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20   sets nLimit to 
165d0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
165e0 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f  .** limit and nO
165f0 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  ffset to the val
16600 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74  ue of the offset
16610 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20   (or 0 if there 
16620 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74  is not.** offset
16630 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e  ).  But later on
16640 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  , nLimit and nOf
16650 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20  fset become the 
16660 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73  memory locations
16670 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20  .** in the VDBE 
16680 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20  that record the 
16690 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74  limit and offset
166a0 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a   counters..**.**
166b0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20   addrOpenEphm[] 
166c0 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20  entries contain 
166d0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f  the address of O
166e0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
166f0 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73  opcodes..** Thes
16700 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74  e addresses must
16710 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68   be stored so th
16720 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63  at we can go bac
16730 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a  k and fill in.**
16740 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20   the P4_KEYINFO 
16750 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72  and P2 parameter
16760 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65  s later.  Neithe
16770 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f  r the KeyInfo no
16780 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  r.** the number 
16790 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32  of columns in P2
167a0 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64   can be computed
167b0 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
167c0 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f  e.** as the OP_O
167d0 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74  penEphm instruct
167e0 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63  ion is coded bec
167f0 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75  ause not.** enou
16800 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  gh information a
16810 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e  bout the compoun
16820 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e  d query is known
16830 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a   at that point..
16840 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  ** The KeyInfo f
16850 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b  or addrOpenTran[
16860 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61  0] and [1] conta
16870 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ins collating se
16880 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74  quences.** for t
16890 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20  he result set.  
168a0 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
168b0 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20  addrOpenEphm[2] 
168c0 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
168d0 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20  ng.** sequences 
168e0 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  for the ORDER BY
168f0 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
16900 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78  ct Select {.  Ex
16910 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
16920 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c       /* The fiel
16930 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ds of the result
16940 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
16950 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16960 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e  One of: TK_UNION
16970 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52   TK_ALL TK_INTER
16980 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a  SECT TK_EXCEPT *
16990 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61 67 73  /.  u16 selFlags
169a0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61  ;          /* Va
169b0 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65  rious SF_* value
169c0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69  s */.  int iLimi
169d0 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a  t, iOffset;   /*
169e0 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
169f0 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20  s holding LIMIT 
16a00 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72  & OFFSET counter
16a10 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f  s */.  int addrO
16a20 70 65 6e 45 70 68 6d 5b 33 5d 3b 20 20 20 2f 2a  penEphm[3];   /*
16a30 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70   OP_OpenEphem op
16a40 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f  codes related to
16a50 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a   this select */.
16a60 20 20 64 6f 75 62 6c 65 20 6e 53 65 6c 65 63 74    double nSelect
16a70 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
16a80 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  mated number of 
16a90 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20  result rows */. 
16aa0 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20   SrcList *pSrc; 
16ab0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46          /* The F
16ac0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
16ad0 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
16ae0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
16af0 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ERE clause */.  
16b00 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
16b10 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52  By;    /* The GR
16b20 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  OUP BY clause */
16b30 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67  .  Expr *pHaving
16b40 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
16b50 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a   HAVING clause *
16b60 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
16b70 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68  rderBy;    /* Th
16b80 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
16b90 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  e */.  Select *p
16ba0 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a  Prior;        /*
16bb0 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e   Prior select in
16bc0 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65   a compound sele
16bd0 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ct statement */.
16be0 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b    Select *pNext;
16bf0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
16c00 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c   select to the l
16c10 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  eft in a compoun
16c20 64 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  d */.  Select *p
16c30 52 69 67 68 74 6d 6f 73 74 3b 20 20 20 20 2f 2a  Rightmost;    /*
16c40 20 52 69 67 68 74 2d 6d 6f 73 74 20 73 65 6c 65   Right-most sele
16c50 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
16c60 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
16c70 74 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69  t */.  Expr *pLi
16c80 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  mit;          /*
16c90 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
16ca0 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
16cb0 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70  t used. */.  Exp
16cc0 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20  r *pOffset;     
16cd0 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78      /* OFFSET ex
16ce0 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
16cf0 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
16d00 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
16d10 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
16d20 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
16d30 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
16d40 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
16d50 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f  Select Flag"..*/
16d60 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
16d70 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30  inct        0x00
16d80 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
16d90 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
16da0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
16db0 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30  esolved        0
16dc0 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69  x0002  /* Identi
16dd0 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  fiers have been 
16de0 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66  resolved */.#def
16df0 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65  ine SF_Aggregate
16e00 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
16e10 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
16e20 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
16e30 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
16e40 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30  sEphemeral   0x0
16e50 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65  008  /* Uses the
16e60 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
16e70 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
16e80 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
16e90 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73      0x0010  /* s
16ea0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
16eb0 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
16ec0 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
16ed0 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
16ee0 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f    0x0020  /* FRO
16ef0 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
16f00 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
16f10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55   */.#define SF_U
16f20 73 65 53 6f 72 74 65 72 20 20 20 20 20 20 20 30  seSorter       0
16f30 78 30 30 34 30 20 20 2f 2a 20 53 6f 72 74 20 75  x0040  /* Sort u
16f40 73 69 6e 67 20 61 20 73 6f 72 74 65 72 20 2a 2f  sing a sorter */
16f50 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75  .#define SF_Valu
16f60 65 73 20 20 20 20 20 20 20 20 20 20 30 78 30 30  es          0x00
16f70 38 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a  80  /* Synthesiz
16f80 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63  ed from VALUES c
16f90 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
16fa0 20 53 46 5f 4d 61 74 65 72 69 61 6c 69 7a 65 20   SF_Materialize 
16fb0 20 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20 46      0x0100  /* F
16fc0 6f 72 63 65 20 6d 61 74 65 72 69 61 6c 69 7a 61  orce materializa
16fd0 74 69 6f 6e 20 6f 66 20 76 69 65 77 73 20 2a 2f  tion of views */
16fe0 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74  .#define SF_Nest
16ff0 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30 32  edFrom      0x02
17000 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  00  /* Part of a
17010 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46   parenthesized F
17020 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 0a 0a  ROM clause */...
17030 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  /*.** The result
17040 73 20 6f 66 20 61 20 73 65 6c 65 63 74 20 63 61  s of a select ca
17050 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64  n be distributed
17060 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
17070 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52 54 22 20  .  The.** "SRT" 
17080 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45  prefix means "SE
17090 4c 45 43 54 20 52 65 73 75 6c 74 20 54 79 70 65  LECT Result Type
170a0 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  "..*/.#define SR
170b0 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31  T_Union        1
170c0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
170d0 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  t as keys in an 
170e0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
170f0 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
17100 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72    2  /* Remove r
17110 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49  esult from a UNI
17120 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ON index */.#def
17130 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20  ine SRT_Exists  
17140 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65       3  /* Store
17150 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74   1 if the result
17160 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f   is not empty */
17170 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
17180 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20  card      4  /* 
17190 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20  Do not save the 
171a0 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65  results anywhere
171b0 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45   */../* The ORDE
171c0 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69  R BY clause is i
171d0 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f  gnored for all o
171e0 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23  f the above */.#
171f0 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65  define Ignorable
17200 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e  Orderby(X) ((X->
17210 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 63  eDest)<=SRT_Disc
17220 61 72 64 29 0a 0a 23 64 65 66 69 6e 65 20 53 52  ard)..#define SR
17230 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 35  T_Output       5
17240 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68    /* Output each
17250 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
17260 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65  /.#define SRT_Me
17270 6d 20 20 20 20 20 20 20 20 20 20 36 20 20 2f 2a  m          6  /*
17280 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
17290 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a   a memory cell *
172a0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65  /.#define SRT_Se
172b0 74 20 20 20 20 20 20 20 20 20 20 37 20 20 2f 2a  t          7  /*
172c0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
172d0 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
172e0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
172f0 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 20 38  T_Table        8
17300 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
17310 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
17320 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
17330 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  d */.#define SRT
17340 5f 45 70 68 65 6d 54 61 62 20 20 20 20 20 39 20  _EphemTab     9 
17350 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73   /* Create trans
17360 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f  ient tab and sto
17370 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  re like SRT_Tabl
17380 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
17390 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 30 20  _Coroutine   10 
173a0 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73   /* Generate a s
173b0 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
173c0 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ult */../*.** An
173d0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
173e0 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62  s object describ
173f0 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20  es where to put 
17400 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  of the results o
17410 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74  f.** a SELECT st
17420 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
17430 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a  ct SelectDest {.
17440 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20    u8 eDest;     
17450 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69      /* How to di
17460 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73  spose of the res
17470 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54  ults.  On of SRT
17480 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63  _* above. */.  c
17490 68 61 72 20 61 66 66 53 64 73 74 3b 20 20 20 20  har affSdst;    
174a0 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65   /* Affinity use
174b0 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52  d when eDest==SR
174c0 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69  T_Set */.  int i
174d0 53 44 50 61 72 6d 3b 20 20 20 20 20 20 2f 2a 20  SDParm;      /* 
174e0 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64  A parameter used
174f0 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69   by the eDest di
17500 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f  sposal method */
17510 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20  .  int iSdst;   
17520 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
17530 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
17540 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
17550 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
17560 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17570 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
17580 6c 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  located */.};../
17590 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65  *.** During code
175a0 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73   generation of s
175b0 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64  tatements that d
175c0 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41  o inserts into A
175d0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a  UTOINCREMENT .**
175e0 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c   tables, the fol
175f0 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
17600 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74  on is attached t
17610 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75  o the Table.u.au
17620 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74  toInc.p.** point
17630 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69  er of each autoi
17640 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74  ncrement table t
17650 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69  o record some si
17660 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  de information t
17670 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20  hat.** the code 
17680 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e  generator needs.
17690 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65    We have to kee
176a0 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f  p per-table auto
176b0 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66  increment.** inf
176c0 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65  ormation in case
176d0 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77   inserts are dow
176e0 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  n within trigger
176f0 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20  s.  Triggers do 
17700 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20  not.** normally 
17710 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72  coordinate their
17720 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74   activities, but
17730 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63   we do need to c
17740 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a  oordinate the.**
17750 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76   loading and sav
17760 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65  ing of autoincre
17770 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ment information
17780 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f  ..*/.struct Auto
17790 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f  incInfo {.  Auto
177a0 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20  incInfo *pNext; 
177b0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62    /* Next info b
177c0 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f  lock in a list o
177d0 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20  f them all */.  
177e0 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
177f0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
17800 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72  his info block r
17810 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e  efers to */.  in
17820 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
17830 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
17840 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
17850 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
17860 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20  g pTab */.  int 
17870 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20  regCtr;         
17880 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
17890 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65  ster holding the
178a0 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a   rowid counter *
178b0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  /.};../*.** Size
178c0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   of the column c
178d0 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ache.*/.#ifndef 
178e0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
178f0 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
17900 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a  E_N_COLCACHE 10.
17910 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74  #endif../*.** At
17920 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61   least one insta
17930 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
17940 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
17950 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
17960 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74  ch .** trigger t
17970 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64  hat may be fired
17980 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   while parsing a
17990 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  n INSERT, UPDATE
179a0 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74   or DELETE.** st
179b0 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63  atement. All suc
179c0 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74  h objects are st
179d0 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b  ored in the link
179e0 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61  ed list headed a
179f0 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67  t.** Parse.pTrig
17a00 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74  gerPrg and delet
17a10 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e  ed once statemen
17a20 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61  t compilation ha
17a30 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65  s been.** comple
17a40 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62  ted..**.** A Vdb
17a50 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
17a60 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
17a70 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20  e body and WHEN 
17a80 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65  clause of trigge
17a90 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  r.** TriggerPrg.
17aa0 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69  pTrigger, assumi
17ab0 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20  ng a default ON 
17ac0 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
17ad0 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  of.** TriggerPrg
17ae0 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72  .orconf, is stor
17af0 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65  ed in the Trigge
17b00 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61  rPrg.pProgram va
17b10 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50  riable..** The P
17b20 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
17b30 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74   list never cont
17b40 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73  ains two entries
17b50 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a   with the same.*
17b60 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74  * values for bot
17b70 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f  h pTrigger and o
17b80 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rconf..**.** The
17b90 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
17ba0 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65  mask[0] variable
17bb0 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73   is set to a mas
17bc0 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
17bd0 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28  ns.** accessed (
17be0 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20  or set to 0 for 
17bf0 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61  triggers fired a
17c00 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  s a result of IN
17c10 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65  SERT .** stateme
17c20 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c  nts). Similarly,
17c30 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
17c40 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69  aColmask[1] vari
17c50 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a  able is set to.*
17c60 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e  * a mask of new.
17c70 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62  * columns used b
17c80 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  y the program..*
17c90 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
17ca0 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20  Prg {.  Trigger 
17cb0 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20  *pTrigger;      
17cc0 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20  /* Trigger this 
17cd0 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65  program was code
17ce0 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67  d from */.  Trig
17cf0 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20  gerPrg *pNext;  
17d00 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
17d10 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67  y in Parse.pTrig
17d20 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20  gerPrg list */. 
17d30 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
17d40 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67  ogram;   /* Prog
17d50 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ram implementing
17d60 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66   pTrigger/orconf
17d70 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66   */.  int orconf
17d80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17d90 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
17da0 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20  LICT policy */. 
17db0 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d   u32 aColmask[2]
17dc0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
17dd0 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e  s of old.*, new.
17de0 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73  * columns access
17df0 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ed */.};../*.** 
17e00 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61  The yDbMask data
17e10 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74  type for the bit
17e20 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61  mask of all atta
17e30 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
17e40 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
17e50 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
17e60 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 33 5f  typedef sqlite3_
17e70 75 69 6e 74 36 34 20 79 44 62 4d 61 73 6b 3b 0a  uint64 yDbMask;.
17e80 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
17e90 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62  unsigned int yDb
17ea0 4d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  Mask;.#endif../*
17eb0 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65  .** An SQL parse
17ec0 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f  r context.  A co
17ed0 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  py of this struc
17ee0 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74  ture is passed t
17ef0 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61  hrough.** the pa
17f00 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e  rser and down in
17f10 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65  to all the parse
17f20 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65  r action routine
17f30 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
17f40 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66  carry around inf
17f50 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73  ormation that is
17f60 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65   global to the e
17f70 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a  ntire parse..**.
17f80 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65  ** The structure
17f90 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f   is divided into
17fa0 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65   two parts.  Whe
17fb0 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  n the parser and
17fc0 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74   code.** generat
17fd0 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65  e call themselve
17fe0 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74  s recursively, t
17ff0 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66  he first part of
18000 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a   the structure.*
18010 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75  * is constant bu
18020 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  t the second par
18030 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68  t is reset at th
18040 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20  e beginning and 
18050 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72  end of.** each r
18060 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ecursion..**.** 
18070 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61  The nTableLock a
18080 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61  nd aTableLock va
18090 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
180a0 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61   used if the sha
180b0 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65  red-cache .** fe
180c0 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
180d0 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28   (if sqlite3Tsd(
180e0 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  )->useSharedData
180f0 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20   is true). They 
18100 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  are.** used to s
18110 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20  tore the set of 
18120 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75  table-locks requ
18130 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74  ired by the stat
18140 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63  ement being.** c
18150 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f  ompiled. Functio
18160 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  n sqlite3TableLo
18170 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  ck() is used to 
18180 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74  add entries to t
18190 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73  he.** list..*/.s
181a0 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20  truct Parse {.  
181b0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
181c0 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
181d0 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74   database struct
181e0 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ure */.  char *z
181f0 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a  ErrMsg;       /*
18200 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
18210 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64  e */.  Vdbe *pVd
18220 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  be;         /* A
18230 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65  n engine for exe
18240 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  cuting database 
18250 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  bytecode */.  in
18260 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
18270 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64     /* Return cod
18280 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e  e from execution
18290 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65   */.  u8 colName
182a0 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52  sSet;      /* TR
182b0 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75  UE after OP_Colu
182c0 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20  mnName has been 
182d0 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20  issued to pVdbe 
182e0 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68  */.  u8 checkSch
182f0 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75  ema;      /* Cau
18300 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  ses schema cooki
18310 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e  e check after an
18320 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e   error */.  u8 n
18330 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20  ested;          
18340 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
18350 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  sted calls to th
18360 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65  e parser/code ge
18370 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20  nerator */.  u8 
18380 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20  nTempReg;       
18390 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
183a0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
183b0 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d  rs in aTempReg[]
183c0 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 49 6e   */.  u8 nTempIn
183d0 55 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  Use;       /* Nu
183e0 6d 62 65 72 20 6f 66 20 61 54 65 6d 70 52 65 67  mber of aTempReg
183f0 5b 5d 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65  [] currently che
18400 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 75 38  cked out */.  u8
18410 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20   nColCache;     
18420 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
18430 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 43  entries in aColC
18440 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 75 38 20 69  ache[] */.  u8 i
18450 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20  ColCache;       
18460 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69   /* Next entry i
18470 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 74 6f  n aColCache[] to
18480 20 72 65 70 6c 61 63 65 20 2a 2f 0a 20 20 75 38   replace */.  u8
18490 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20   isMultiWrite;  
184a0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
184b0 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69  atement may modi
184c0 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70  fy/insert multip
184d0 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20  le rows */.  u8 
184e0 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20  mayAbort;       
184f0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
18500 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77  tement may throw
18510 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
18520 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65  ion */.  int aTe
18530 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a  mpReg[8];     /*
18540 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f   Holding area fo
18550 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  r temporary regi
18560 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  sters */.  int n
18570 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
18580 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74  /* Size of the t
18590 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
185a0 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
185b0 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   iRangeReg;     
185c0 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
185d0 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  ter in temporary
185e0 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
185f0 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
18600 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
18610 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65  ber of errors se
18620 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62  en */.  int nTab
18630 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18640 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f  Number of previo
18650 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56  usly allocated V
18660 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  DBE cursors */. 
18670 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
18680 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
18690 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
186a0 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
186b0 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20   int nSet;      
186c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
186d0 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f 20  of sets used so 
186e0 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e  far */.  int nOn
186f0 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ce;           /*
18700 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e   Number of OP_On
18710 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  ce instructions 
18720 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
18730 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  ckBase;         
18740 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
18750 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67  r of data during
18760 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
18770 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  ts */.  int iCac
18780 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  heLevel;     /* 
18790 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77  ColCache valid w
187a0 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  hen aColCache[].
187b0 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65  iLevel<=iCacheLe
187c0 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  vel */.  int iCa
187d0 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a  cheCnt;       /*
187e0 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f   Counter used to
187f0 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61   generate aColCa
18800 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73  che[].lru values
18810 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f   */.  struct yCo
18820 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74  lCache {.    int
18830 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
18840 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73     /* Table curs
18850 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
18860 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   int iColumn;   
18870 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
18880 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f  column number */
18890 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b  .    u8 tempReg;
188a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52             /* iR
188b0 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65 67  eg is a temp reg
188c0 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64 73  ister that needs
188d0 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a   to be freed */.
188e0 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20      int iLevel; 
188f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73            /* Nes
18900 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  ting level */.  
18910 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20    int iReg;     
18920 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77          /* Reg w
18930 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ith value of thi
18940 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e  s column. 0 mean
18950 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69  s none. */.    i
18960 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20  nt lru;         
18970 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65       /* Least re
18980 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72  cently used entr
18990 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65  y has the smalle
189a0 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  st value */.  } 
189b0 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45  aColCache[SQLITE
189c0 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f  _N_COLCACHE];  /
189d0 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63  * One for each c
189e0 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72  olumn cache entr
189f0 79 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77  y */.  yDbMask w
18a00 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53  riteMask;   /* S
18a10 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61  tart a write tra
18a20 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73  nsaction on thes
18a30 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  e databases */. 
18a40 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d   yDbMask cookieM
18a50 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b  ask;  /* Bitmask
18a60 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66   of schema verif
18a70 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ied databases */
18a80 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 47 6f 74  .  int cookieGot
18a90 6f 3b 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65  o;      /* Addre
18aa0 73 73 20 6f 66 20 4f 50 5f 47 6f 74 6f 20 74 6f  ss of OP_Goto to
18ab0 20 63 6f 6f 6b 69 65 20 76 65 72 69 66 69 65 72   cookie verifier
18ac0 20 73 75 62 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   subroutine */. 
18ad0 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65   int cookieValue
18ae0 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  [SQLITE_MAX_ATTA
18af0 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c  CHED+2];  /* Val
18b00 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74  ues of cookies t
18b10 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e  o verify */.  in
18b20 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20  t regRowid;     
18b30 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
18b40 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20  olding rowid of 
18b50 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74  CREATE TABLE ent
18b60 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  ry */.  int regR
18b70 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  oot;         /* 
18b80 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
18b90 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
18ba0 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74  r for new object
18bb0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41  s */.  int nMaxA
18bc0 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  rg;         /* M
18bd0 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74  ax args passed t
18be0 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  o user function 
18bf0 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  by sub-program *
18c00 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72  /.  Token constr
18c10 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65  aintName;/* Name
18c20 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69   of the constrai
18c30 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  nt currently bei
18c40 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66  ng parsed */.#if
18c50 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
18c60 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
18c70 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20  int nTableLock; 
18c80 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
18c90 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61   of locks in aTa
18ca0 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62  bleLock */.  Tab
18cb0 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f  leLock *aTableLo
18cc0 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20  ck; /* Required 
18cd0 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20  table locks for 
18ce0 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
18cf0 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75  e */.#endif.  Au
18d00 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63  toincInfo *pAinc
18d10 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  ;  /* Informatio
18d20 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52  n about AUTOINCR
18d30 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a  EMENT counters *
18d40 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  /..  /* Informat
18d50 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63  ion used while c
18d60 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72  oding trigger pr
18d70 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72  ograms. */.  Par
18d80 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20  se *pToplevel;  
18d90 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63    /* Parse struc
18da0 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72  ture for main pr
18db0 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20  ogram (or NULL) 
18dc0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69  */.  Table *pTri
18dd0 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62  ggerTab;  /* Tab
18de0 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20  le triggers are 
18df0 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20  being coded for 
18e00 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 51 75 65  */.  double nQue
18e10 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20 45 73 74  ryLoop;   /* Est
18e20 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
18e30 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61   iterations of a
18e40 20 71 75 65 72 79 20 2a 2f 0a 20 20 75 33 32 20   query */.  u32 
18e50 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  oldmask;        
18e60 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e   /* Mask of old.
18e70 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
18e80 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65  nced */.  u32 ne
18e90 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  wmask;         /
18ea0 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  * Mask of new.* 
18eb0 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
18ec0 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67  ed */.  u8 eTrig
18ed0 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20  gerOp;       /* 
18ee0 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
18ef0 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54  SERT or TK_DELET
18f00 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e  E */.  u8 eOrcon
18f10 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  f;          /* D
18f20 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
18f30 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72  CT policy for tr
18f40 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20  igger steps */. 
18f50 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67   u8 disableTrigg
18f60 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f  ers;  /* True to
18f70 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72   disable trigger
18f80 73 20 2a 2f 0a 0a 20 20 2f 2a 20 41 62 6f 76 65  s */..  /* Above
18f90 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74   is constant bet
18fa0 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e  ween recursions.
18fb0 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74    Below is reset
18fc0 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65   before and afte
18fd0 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75  r.  ** each recu
18fe0 72 73 69 6f 6e 20 2a 2f 0a 0a 20 20 69 6e 74 20  rsion */..  int 
18ff0 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  nVar;           
19000 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19010 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73  of '?' variables
19020 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c   seen in the SQL
19030 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
19040 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20   nzVar;         
19050 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
19060 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c   of available sl
19070 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a  ots in azVar[] *
19080 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20  /.  u8 explain; 
19090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
190a0 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50   True if the EXP
190b0 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75  LAIN flag is fou
190c0 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20  nd on the query 
190d0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
190e0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
190f0 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65  BLE.  u8 declare
19100 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  Vtab;           
19110 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64  /* True if insid
19120 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  e sqlite3_declar
19130 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e  e_vtab() */.  in
19140 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  t nVtabLock;    
19150 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
19160 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62  r of virtual tab
19170 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23  les to lock */.#
19180 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69  endif.  int nAli
19190 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  as;             
191a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
191b0 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20 73 65  liased result se
191c0 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69  t columns */.  i
191d0 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
191e0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
191f0 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67  ession tree heig
19200 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75  ht of current su
19210 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e  b-select */.#ifn
19220 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
19230 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53  EXPLAIN.  int iS
19240 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20  electId;        
19250 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72      /* ID of cur
19260 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20  rent select for 
19270 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a  EXPLAIN output *
19280 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c  /.  int iNextSel
19290 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a  ectId;        /*
192a0 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20   Next available 
192b0 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58  select ID for EX
192c0 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
192d0 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 2a  #endif.  char **
192e0 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20  azVar;          
192f0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74     /* Pointers t
19300 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72 61 6d  o names of param
19310 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20  eters */.  Vdbe 
19320 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20 20  *pReprepare;    
19330 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67       /* VM being
19340 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c   reprepared (sql
19350 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29  ite3Reprepare())
19360 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 41 6c 69 61   */.  int *aAlia
19370 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
19380 2f 2a 20 52 65 67 69 73 74 65 72 20 75 73 65 64  /* Register used
19390 20 74 6f 20 68 6f 6c 64 20 61 6c 69 61 73 65 64   to hold aliased
193a0 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 63 6f 6e   result */.  con
193b0 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20  st char *zTail; 
193c0 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51         /* All SQ
193d0 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20  L text past the 
193e0 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70  last semicolon p
193f0 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65  arsed */.  Table
19400 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20   *pNewTable;    
19410 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20       /* A table 
19420 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65  being constructe
19430 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c  d by CREATE TABL
19440 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  E */.  Trigger *
19450 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20  pNewTrigger;    
19460 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65   /* Trigger unde
19470 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61  r construct by a
19480 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
19490 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
194a0 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f  *zAuthContext; /
194b0 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65  * The 6th parame
194c0 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68  ter to db->xAuth
194d0 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20   callbacks */.  
194e0 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e  Token sNameToken
194f0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b  ;         /* Tok
19500 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66  en with unqualif
19510 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  ied schema objec
19520 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65  t name */.  Toke
19530 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20  n sLastToken;   
19540 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73        /* The las
19550 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a  t token parsed *
19560 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
19570 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
19580 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b  LE.  Token sArg;
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
195a0 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  * Complete text 
195b0 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75  of a module argu
195c0 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ment */.  Table 
195d0 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20  **apVtabLock;   
195e0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
195f0 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  o virtual tables
19600 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67   needing locking
19610 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62   */.#endif.  Tab
19620 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20  le *pZombieTab; 
19630 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
19640 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20  f Table objects 
19650 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20  to delete after 
19660 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72  code gen */.  Tr
19670 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67  iggerPrg *pTrigg
19680 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65  erPrg;  /* Linke
19690 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20  d list of coded 
196a0 74 72 69 67 67 65 72 73 20 2a 2f 0a 7d 3b 0a 0a  triggers */.};..
196b0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
196c0 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  e if currently i
196d0 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33  nside an sqlite3
196e0 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
196f0 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  call..*/.#ifdef 
19700 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
19710 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69  UALTABLE.  #defi
19720 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
19730 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65  AB 0.#else.  #de
19740 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
19750 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65  VTAB (pParse->de
19760 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69  clareVtab).#endi
19770 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
19780 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
19790 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
197a0 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20  can be declared 
197b0 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75  on a stack and u
197c0 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74  sed.** to save t
197d0 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  he Parse.zAuthCo
197e0 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74  ntext value so t
197f0 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
19800 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f  stored later..*/
19810 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74  .struct AuthCont
19820 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ext {.  const ch
19830 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
19840 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64  ;   /* Put saved
19850 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
19860 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61  ext here */.  Pa
19870 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
19880 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
19890 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
198a0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69   */.};../*.** Bi
198b0 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72  tfield flags for
198c0 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72   P5 value in var
198d0 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f  ious opcodes..*/
198e0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
198f0 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78  NCHANGE       0x
19900 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  01    /* Set to 
19910 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e  update db->nChan
19920 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ge */.#define OP
19930 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
19940 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65     0x02    /* Se
19950 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
19960 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
19970 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
19980 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
19990 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
199a0 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
199b0 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
199c0 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
199d0 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
199e0 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
199f0 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
19a00 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
19a10 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
19a20 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
19a30 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
19a40 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
19a50 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
19a60 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20 20 30  _CLEARCACHE    0
19a70 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61 72 20  x20    /* Clear 
19a80 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 61 63  pseudo-table cac
19a90 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he in OP_Column 
19aa0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
19ab0 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20  G_LENGTHARG     
19ac0 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x40    /* OP_Co
19ad0 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
19ae0 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23  or length() */.#
19af0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59  define OPFLAG_TY
19b00 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30  PEOFARG     0x80
19b10 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
19b20 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   only used for t
19b30 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69  ypeof() */.#defi
19b40 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  ne OPFLAG_BULKCS
19b50 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  R       0x01    
19b60 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65  /* OP_Open** use
19b70 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63  d to open bulk c
19b80 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ursor */.#define
19b90 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20   OPFLAG_P2ISREG 
19ba0 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
19bb0 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a   P2 to OP_Open**
19bc0 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e   is a register n
19bd0 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  umber */.#define
19be0 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
19bf0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
19c00 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65   OP_Compare: use
19c10 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
19c20 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20   */../*. * Each 
19c30 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20  trigger present 
19c40 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
19c50 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64  schema is stored
19c60 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   as an instance 
19c70 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69  of. * struct Tri
19c80 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69  gger. . *. * Poi
19c90 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63  nters to instanc
19ca0 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
19cb0 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20  gger are stored 
19cc0 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20  in two ways.. * 
19cd0 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48  1. In the "trigH
19ce0 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20  ash" hash table 
19cf0 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c  (part of the sql
19d00 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65  ite3* that repre
19d10 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20  sents the . *   
19d20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73   database). This
19d30 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20   allows Trigger 
19d40 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65  structures to be
19d50 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61   retrieved by na
19d60 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72  me.. * 2. All tr
19d70 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
19d80 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  d with a single 
19d90 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e  table form a lin
19da0 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20  ked list, using 
19db0 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20  the. *    pNext 
19dc0 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74  member of struct
19dd0 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e   Trigger. A poin
19de0 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
19df0 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a   element of the.
19e00 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73   *    linked lis
19e10 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74  t is stored as t
19e20 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65  he "pTrigger" me
19e30 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f  mber of the asso
19e40 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72  ciated. *    str
19e50 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a  uct Table.. *. *
19e60 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   The "step_list"
19e70 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74   member points t
19e80 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
19e90 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20  ent of a linked 
19ea0 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69  list. * containi
19eb0 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
19ec0 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
19ed0 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70  as the trigger p
19ee0 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75  rogram.. */.stru
19ef0 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
19f00 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
19f10 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
19f20 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
19f30 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
19f40 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
19f50 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
19f60 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
19f70 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
19f80 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
19f90 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20  applies */.  u8 
19fa0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
19fb0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
19fc0 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
19fd0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
19fe0 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74         */.  u8 t
19ff0 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20  r_tm;           
1a000 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52      /* One of TR
1a010 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52  IGGER_BEFORE, TR
1a020 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20  IGGER_AFTER */. 
1a030 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20   Expr *pWhen;   
1a040 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1a050 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
1a060 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d  he expression (m
1a070 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
1a080 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e   IdList *pColumn
1a090 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  s;       /* If t
1a0a0 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45  his is an UPDATE
1a0b0 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   OF <column-list
1a0c0 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20  > trigger,.     
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0e0 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c          the <col
1a0f0 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f  umn-list> is sto
1a100 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  red here */.  Sc
1a110 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
1a120 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
1a130 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
1a140 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
1a150 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
1a160 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
1a170 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
1a180 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
1a190 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
1a1a0 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
1a1b0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
1a1c0 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
1a1d0 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
1a1e0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
1a1f0 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
1a200 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1a210 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
1a220 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
1a230 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
1a240 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
1a250 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
1a260 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
1a270 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
1a280 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ich. .**.** If t
1a290 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c  here are multipl
1a2a0 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20  e triggers, you 
1a2b0 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45  might of some BE
1a2c0 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46  FORE and some AF
1a2d0 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20  TER..** In that 
1a2e0 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74  cases, the const
1a2f0 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62  ants below can b
1a300 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e  e ORed together.
1a310 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47  .*/.#define TRIG
1a320 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64  GER_BEFORE  1.#d
1a330 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46  efine TRIGGER_AF
1a340 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41  TER   2../*. * A
1a350 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74  n instance of st
1a360 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
1a370 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
1a380 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73  e a single SQL s
1a390 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74  tatement. * that
1a3a0 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20   is a part of a 
1a3b0 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
1a3c0 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65   . *. * Instance
1a3d0 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
1a3e0 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72  gerStep are stor
1a3f0 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c  ed in a singly l
1a400 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b  inked list (link
1a410 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20  ed. * using the 
1a420 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20  "pNext" member) 
1a430 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68  referenced by th
1a440 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
1a450 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20  mber of the . * 
1a460 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63  associated struc
1a470 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e  t Trigger instan
1a480 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  ce. The first el
1a490 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e  ement of the lin
1a4a0 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74  ked list is. * t
1a4b0 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66  he first step of
1a4c0 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f   the trigger-pro
1a4d0 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65  gram.. * . * The
1a4e0 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64   "op" member ind
1a4f0 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74  icates whether t
1a500 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45  his is a "DELETE
1a510 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50  ", "INSERT", "UP
1a520 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c  DATE" or. * "SEL
1a530 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20  ECT" statement. 
1a540 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  The meanings of 
1a550 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72  the other member
1a560 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
1a570 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65  by the . * value
1a580 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c   of "op" as foll
1a590 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ows:. *. * (op =
1a5a0 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20  = TK_INSERT). * 
1a5b0 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f  orconf    -> sto
1a5c0 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  res the ON CONFL
1a5d0 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a  ICT algorithm. *
1a5e0 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66   pSelect   -> If
1a5f0 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
1a600 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45  RT INTO ... SELE
1a610 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  CT ... statement
1a620 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
1a630 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
1a640 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  es a pointer to 
1a650 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
1a660 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20  ment. Otherwise 
1a670 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20  NULL.. * target 
1a680 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f     -> A token ho
1a690 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64  lding the quoted
1a6a0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1a6b0 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74  le to insert int
1a6c0 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  o.. * pExprList 
1a6d0 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
1a6e0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
1a6f0 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74   VALUES ... stat
1a700 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
1a710 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1a720 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74   stores values t
1a730 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f  o be inserted. O
1a740 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1a750 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49  * pIdList   -> I
1a760 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1a770 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63  ERT INTO ... (<c
1a780 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41  olumn-names>) VA
1a790 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20  LUES ... . *    
1a7a0 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
1a7b0 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
1a7c0 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
1a7d0 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
1a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
1a7f0 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
1a800 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
1a810 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20  TE). * target   
1a820 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
1a830 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e  ing the quoted n
1a840 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1a850 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e   to delete from.
1a860 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
1a870 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1a880 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20  e of the DELETE 
1a890 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
1a8a0 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
1a8b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
1a8c0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1a8d0 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f  * . * (op == TK_
1a8e0 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67 65  UPDATE). * targe
1a8f0 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
1a900 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74  holding the quot
1a910 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1a920 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20 72  able to update r
1a930 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72  ows of.. * pWher
1a940 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
1a950 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
1a960 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
1a970 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
1a980 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
1a990 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
1a9a0 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69  NULL.. * pExprLi
1a9b0 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20  st -> A list of 
1a9c0 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75  the columns to u
1a9d0 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78  pdate and the ex
1a9e0 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64  pressions to upd
1a9f0 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ate. *          
1aa00 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65      them to. See
1aa10 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29   sqlite3Update()
1aa20 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
1aa30 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20  f "pChanges". * 
1aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
1aa50 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73  ument.. * . */.s
1aa60 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1aa70 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  p {.  u8 op;    
1aa80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1aa90 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20  e of TK_DELETE, 
1aaa0 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
1aab0 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20  SERT, TK_SELECT 
1aac0 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20  */.  u8 orconf; 
1aad0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
1aae0 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f  Rollback etc. */
1aaf0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
1ab00 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74  g;      /* The t
1ab10 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73  rigger that this
1ab20 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20   step is a part 
1ab30 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  of */.  Select *
1ab40 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
1ab50 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74 20  SELECT statment 
1ab60 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54  or RHS of INSERT
1ab70 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54 20   INTO .. SELECT 
1ab80 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74  ... */.  Token t
1ab90 61 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f 2a  arget;        /*
1aba0 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f   Target table fo
1abb0 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45  r DELETE, UPDATE
1abc0 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78  , INSERT */.  Ex
1abd0 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
1abe0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
1abf0 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54  clause for DELET
1ac00 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70  E or UPDATE step
1ac10 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
1ac20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53  *pExprList; /* S
1ac30 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50  ET clause for UP
1ac40 44 41 54 45 2e 20 20 56 41 4c 55 45 53 20 63 6c  DATE.  VALUES cl
1ac50 61 75 73 65 20 66 6f 72 20 49 4e 53 45 52 54 20  ause for INSERT 
1ac60 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64  */.  IdList *pId
1ac70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  List;     /* Col
1ac80 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e  umn names for IN
1ac90 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65  SERT */.  Trigge
1aca0 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f  rStep *pNext;  /
1acb0 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69  * Next in the li
1acc0 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69  nk-list */.  Tri
1acd0 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b  ggerStep *pLast;
1ace0 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e    /* Last elemen
1acf0 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20  t in link-list. 
1ad00 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c  Valid for 1st el
1ad10 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f  em only */.};../
1ad20 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1ad30 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
1ad40 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
1ad50 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71  n used by the sq
1ad60 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f  liteFix....** ro
1ad70 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77  utines as they w
1ad80 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72  alk the parse tr
1ad90 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62  ee to make datab
1ada0 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a  ase references.*
1adb0 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f  * explicit.  .*/
1adc0 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
1add0 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b  DbFixer DbFixer;
1ade0 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20  .struct DbFixer 
1adf0 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
1ae00 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  e;      /* The p
1ae10 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20  arsing context. 
1ae20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   Error messages 
1ae30 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
1ae40 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1ae50 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65  a;    /* Fix ite
1ae60 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d  ms to this schem
1ae70 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  a */.  const cha
1ae80 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61  r *zDb;    /* Ma
1ae90 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65  ke sure all obje
1aea0 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  cts are containe
1aeb0 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61  d in this databa
1aec0 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  se */.  const ch
1aed0 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54  ar *zType;  /* T
1aee0 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ype of the conta
1aef0 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
1af00 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
1af10 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  /.  const Token 
1af20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20  *pName; /* Name 
1af30 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
1af40 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
1af50 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b  r messages */.};
1af60 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
1af70 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75  ted used to accu
1af80 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20  mulate the text 
1af90 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72  of a string wher
1afa0 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e  e we.** do not n
1afb0 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20  ecessarily know 
1afc0 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69  how big the stri
1afd0 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68  ng will be in th
1afe0 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
1aff0 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71   StrAccum {.  sq
1b000 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
1b010 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64     /* Optional d
1b020 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b  atabase for look
1b030 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e  aside.  Can be N
1b040 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ULL */.  char *z
1b050 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Base;         /*
1b060 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69   A base allocati
1b070 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61  on.  Not from ma
1b080 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20  lloc. */.  char 
1b090 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20  *zText;         
1b0a0 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f  /* The string co
1b0b0 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a  llected so far *
1b0c0 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20  /.  int  nChar; 
1b0d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
1b0e0 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  th of the string
1b0f0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1b100 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20    nAlloc;       
1b110 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73    /* Amount of s
1b120 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69  pace allocated i
1b130 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74  n zText */.  int
1b140 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20    mxAlloc;      
1b150 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c    /* Maximum all
1b160 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65 6e 67  owed string leng
1b170 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 6d 61 6c  th */.  u8   mal
1b180 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 2f 2a 20  locFailed;   /* 
1b190 42 65 63 6f 6d 65 73 20 74 72 75 65 20 69 66 20  Becomes true if 
1b1a0 61 6e 79 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  any memory alloc
1b1b0 61 74 69 6f 6e 20 66 61 69 6c 73 20 2a 2f 0a 20  ation fails */. 
1b1c0 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b   u8   useMalloc;
1b1d0 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65        /* 0: none
1b1e0 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44 62 4d  ,  1: sqlite3DbM
1b1f0 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69 74  alloc,  2: sqlit
1b200 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75  e3_malloc */.  u
1b210 38 20 20 20 74 6f 6f 42 69 67 3b 20 20 20 20 20  8   tooBig;     
1b220 20 20 20 20 2f 2a 20 42 65 63 6f 6d 65 73 20 74      /* Becomes t
1b230 72 75 65 20 69 66 20 73 74 72 69 6e 67 20 73 69  rue if string si
1b240 7a 65 20 65 78 63 65 65 64 73 20 6c 69 6d 69 74  ze exceeds limit
1b250 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
1b260 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
1b270 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
1b280 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74  ed to communicat
1b290 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  e information.**
1b2a0 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69   from sqlite3Ini
1b2b0 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63  t and OP_ParseSc
1b2c0 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71  hema into the sq
1b2d0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
1b2e0 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  k..*/.typedef st
1b2f0 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33  ruct {.  sqlite3
1b300 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
1b310 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69  The database bei
1b320 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
1b330 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  /.  char **pzErr
1b340 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72  Msg;    /* Error
1b350 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20   message stored 
1b360 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44  here */.  int iD
1b370 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
1b380 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61   0 for main data
1b390 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d  base.  1 for TEM
1b3a0 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43  P, 2.. for ATTAC
1b3b0 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  Hed */.  int rc;
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b3d0 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72  Result code stor
1b3e0 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69  ed here */.} Ini
1b3f0 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74  tData;../*.** St
1b400 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69  ructure containi
1b410 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67  ng global config
1b420 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72  uration data for
1b430 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
1b440 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ary..**.** This 
1b450 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63  structure also c
1b460 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61  ontains some sta
1b470 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  te information..
1b480 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65  */.struct Sqlite
1b490 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20  3Config {.  int 
1b4a0 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20  bMemstat;       
1b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b4c0 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1b4d0 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f  memory status */
1b4e0 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65  .  int bCoreMute
1b4f0 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
1b500 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1b510 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65  enable core mute
1b520 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46  xing */.  int bF
1b530 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20  ullMutex;       
1b540 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1b550 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75  rue to enable fu
1b560 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  ll mutexing */. 
1b570 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20   int bOpenUri;  
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b590 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e     /* True to in
1b5a0 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65  terpret filename
1b5b0 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69  s as URIs */.  i
1b5c0 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20 20  nt bUseCis;     
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5e0 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67   /* Use covering
1b5f0 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c   indices for ful
1b600 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74  l-scans */.  int
1b610 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20   mxStrlen;      
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b630 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67  * Maximum string
1b640 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74   length */.  int
1b650 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20   szLookaside;   
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b670 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
1b680 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20  ide buffer size 
1b690 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73  */.  int nLookas
1b6a0 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
1b6b0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1b6c0 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
1b6d0 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71  er count */.  sq
1b6e0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
1b6f0 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  s m;            
1b700 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d  /* Low-level mem
1b710 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
1b720 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
1b730 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
1b740 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20  ods mutex;      
1b750 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74  /* Low-level mut
1b760 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  ex interface */.
1b770 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65    sqlite3_pcache
1b780 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65  _methods2 pcache
1b790 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c  2;  /* Low-level
1b7a0 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65   page-cache inte
1b7b0 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  rface */.  void 
1b7c0 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20  *pHeap;         
1b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b7e0 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61  Heap storage spa
1b7f0 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61  ce */.  int nHea
1b800 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1b810 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
1b820 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a  e of pHeap[] */.
1b830 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52    int mnReq, mxR
1b840 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
1b850 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d      /* Min and m
1b860 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73  ax heap requests
1b870 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69   sizes */.  sqli
1b880 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70  te3_int64 szMmap
1b890 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1b8a0 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65   mmap() space pe
1b8b0 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20  r open file */. 
1b8c0 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d   sqlite3_int64 m
1b8d0 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  xMmap;          
1b8e0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61     /* Maximum va
1b8f0 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a  lue for szMmap *
1b900 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74  /.  void *pScrat
1b910 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
1b920 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68        /* Scratch
1b930 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
1b940 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20   szScratch;     
1b950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b960 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73  * Size of each s
1b970 63 72 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f  cratch buffer */
1b980 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b  .  int nScratch;
1b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b9b0 66 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72  f scratch buffer
1b9c0 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61  s */.  void *pPa
1b9d0 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
1b9e0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
1b9f0 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f   cache memory */
1ba00 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20  .  int szPage;  
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1ba30 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61  each page in pPa
1ba40 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50  ge[] */.  int nP
1ba50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1ba70 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
1ba80 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
1ba90 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b  nt mxParserStack
1baa0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1bab0 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74   /* maximum dept
1bac0 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20  h of the parser 
1bad0 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73  stack */.  int s
1bae0 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65  haredCacheEnable
1baf0 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
1bb00 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63  true if shared-c
1bb10 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65  ache mode enable
1bb20 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62  d */.  /* The ab
1bb30 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69  ove might be ini
1bb40 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d  tialized to non-
1bb50 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  zero.  The follo
1bb60 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77  wing need to alw
1bb70 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c  ays.  ** initial
1bb80 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65  ly be zero, howe
1bb90 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ver. */.  int is
1bba0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1bbb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1bbc0 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61  rue after initia
1bbd0 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e  lization has fin
1bbe0 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ished */.  int i
1bbf0 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20  nProgress;      
1bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bc10 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69  True while initi
1bc20 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f  alization in pro
1bc30 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69  gress */.  int i
1bc40 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20  sMutexInit;     
1bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bc60 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78  True after mutex
1bc70 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  es are initializ
1bc80 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61  ed */.  int isMa
1bc90 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20  llocInit;       
1bca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1bcb0 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
1bcc0 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
1bcd0 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49  .  int isPCacheI
1bce0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1bcf0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1bd00 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
1bd10 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 73 71  tialized */.  sq
1bd20 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e  lite3_mutex *pIn
1bd30 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  itMutex;        
1bd40 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79  /* Mutex used by
1bd50 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c   sqlite3_initial
1bd60 69 7a 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  ize() */.  int n
1bd70 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20  RefInitMutex;   
1bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bd90 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20  Number of users 
1bda0 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f  of pInitMutex */
1bdb0 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28  .  void (*xLog)(
1bdc0 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
1bdd0 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74  char*); /* Funct
1bde0 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20  ion for logging 
1bdf0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41  */.  void *pLogA
1be00 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
1be10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
1be20 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
1be30 4c 6f 67 28 29 20 2a 2f 0a 20 20 69 6e 74 20 62  Log() */.  int b
1be40 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20  LocaltimeFault; 
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1be60 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63  True to fail loc
1be70 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a  altime() calls *
1be80 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1be90 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20  ENABLE_SQLLOG.  
1bea0 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76  void(*xSqllog)(v
1beb0 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
1bec0 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
1bed0 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67  .  void *pSqllog
1bee0 41 72 67 3b 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  Arg;.#endif.};..
1bef0 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f  /*.** Context po
1bf00 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f 77  inter passed dow
1bf10 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74 72  n through the tr
1bf20 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75  ee-walk..*/.stru
1bf30 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e  ct Walker {.  in
1bf40 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63  t (*xExprCallbac
1bf50 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  k)(Walker*, Expr
1bf60 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  *);     /* Callb
1bf70 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69  ack for expressi
1bf80 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  ons */.  int (*x
1bf90 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28  SelectCallback)(
1bfa0 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
1bfb0 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66  ;  /* Callback f
1bfc0 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20  or SELECTs */.  
1bfd0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bff0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
1c000 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f  ser context.  */
1c010 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70  .  int walkerDep
1c020 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
1c030 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c040 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65  Number of subque
1c050 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 62 53 65  ries */.  u8 bSe
1c060 6c 65 63 74 44 65 70 74 68 46 69 72 73 74 3b 20  lectDepthFirst; 
1c070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c080 20 20 20 20 2f 2a 20 44 6f 20 73 75 62 71 75 65      /* Do subque
1c090 72 69 65 73 20 66 69 72 73 74 20 2a 2f 0a 20 20  ries first */.  
1c0a0 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20  union {         
1c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74            /* Ext
1c0d0 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c  ra data for call
1c0e0 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65  back */.    Name
1c0f0 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20  Context *pNC;   
1c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c110 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67         /* Naming
1c120 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20   context */.    
1c130 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
1c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c150 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1c160 74 65 67 65 72 20 76 61 6c 75 65 20 2a 2f 0a 20  teger value */. 
1c170 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63     SrcList *pSrc
1c180 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
1c190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c1a0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1c1b0 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f      struct SrcCo
1c1c0 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20  unt *pSrcCount; 
1c1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c1e0 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d  * Counting colum
1c1f0 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  n references */.
1c200 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f    } u;.};../* Fo
1c210 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f  rward declaratio
1c220 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ns */.int sqlite
1c230 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72  3WalkExpr(Walker
1c240 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
1c250 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69  qlite3WalkExprLi
1c260 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  st(Walker*, Expr
1c270 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1c280 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61  te3WalkSelect(Wa
1c290 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
1c2a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1c2b0 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65  SelectExpr(Walke
1c2c0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
1c2d0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
1c2e0 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c  ectFrom(Walker*,
1c2f0 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a   Select*);../*.*
1c300 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
1c310 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65  om the parse-tre
1c320 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74  e walking primit
1c330 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a  ives and their.*
1c340 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a  * callbacks..*/.
1c350 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74  #define WRC_Cont
1c360 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43  inue    0   /* C
1c370 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74  ontinue down int
1c380 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64  o children */.#d
1c390 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20  efine WRC_Prune 
1c3a0 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69        1   /* Omi
1c3b0 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63  t children but c
1c3c0 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20  ontinue walking 
1c3d0 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66  siblings */.#def
1c3e0 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20  ine WRC_Abort   
1c3f0 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64      2   /* Aband
1c400 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b  on the tree walk
1c410 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d   */../*.** Assum
1c420 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74  ing zIn points t
1c430 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
1c440 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72   of a UTF-8 char
1c450 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63  acter,.** advanc
1c460 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74  e zIn to point t
1c470 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
1c480 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46   of the next UTF
1c490 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f  -8 character..*/
1c4a0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
1c4b0 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b  SKIP_UTF8(zIn) {
1c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4d0 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20          \.  if( 
1c4e0 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30  (*(zIn++))>=0xc0
1c4f0 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20   ){             
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c510 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a   \.    while( (*
1c520 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38  zIn & 0xc0)==0x8
1c530 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20  0 ){ zIn++; }   
1c540 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20            \.  } 
1c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c580 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68     \.}../*.** Th
1c590 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20  e SQLITE_*_BKPT 
1c5a0 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74  macros are subst
1c5b0 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65  itutes for the e
1c5c0 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a  rror codes with.
1c5d0 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ** the same name
1c5e0 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65   but without the
1c5f0 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20   _BKPT suffix.  
1c600 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76  These macros inv
1c610 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  oke.** routines 
1c620 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20  that report the 
1c630 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77  line-number on w
1c640 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f  hich the error o
1c650 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69  riginated.** usi
1c660 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  ng sqlite3_log()
1c670 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20  .  The routines 
1c680 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63  also provide a c
1c690 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a  onvenient place.
1c6a0 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75  ** to set a debu
1c6b0 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e  gger breakpoint.
1c6c0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  .*/.int sqlite3C
1c6d0 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29  orruptError(int)
1c6e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73  ;.int sqlite3Mis
1c6f0 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  useError(int);.i
1c700 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  nt sqlite3Cantop
1c710 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64  enError(int);.#d
1c720 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52  efine SQLITE_COR
1c730 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65  RUPT_BKPT sqlite
1c740 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f  3CorruptError(__
1c750 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
1c760 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
1c770 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  PT sqlite3Misuse
1c780 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
1c790 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
1c7a0 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c  ANTOPEN_BKPT sql
1c7b0 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f  ite3CantopenErro
1c7c0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a  r(__LINE__).../*
1c7d0 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c  .** FTS4 is real
1c7e0 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20  ly an extension 
1c7f0 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73  for FTS3.  It is
1c800 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74   enabled using t
1c810 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41  he.** SQLITE_ENA
1c820 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20  BLE_FTS3 macro. 
1c830 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f   But to avoid co
1c840 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20  nfusion we also 
1c850 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54  all.** the SQLIT
1c860 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61  E_ENABLE_FTS4 ma
1c870 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20  cro to serve as 
1c880 61 6e 20 61 6c 69 73 73 65 20 66 6f 72 20 53 51  an alisse for SQ
1c890 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1c8a0 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
1c8b0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
1c8c0 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64  TS4) && !defined
1c8d0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
1c8e0 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51  TS3).# define SQ
1c8f0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1c900 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
1c910 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65  he ctype.h heade
1c920 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20  r is needed for 
1c930 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d  non-ASCII system
1c940 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a  s.  It is also.*
1c950 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33  * needed by FTS3
1c960 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e   when FTS3 is in
1c970 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d  cluded in the am
1c980 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23  algamation..*/.#
1c990 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1c9a0 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20  TE_ASCII) || \. 
1c9b0 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
1c9c0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20  TE_ENABLE_FTS3) 
1c9d0 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
1c9e0 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29  E_AMALGAMATION))
1c9f0 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70  .# include <ctyp
1ca00 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e.h>.#endif../*.
1ca10 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1ca20 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68   macros mimic th
1ca30 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61  e standard libra
1ca40 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75  ry functions tou
1ca50 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61  pper(),.** isspa
1ca60 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c  ce(), isalnum(),
1ca70 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69   isdigit() and i
1ca80 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65  sxdigit(), respe
1ca90 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20  ctively. The.** 
1caa0 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20  sqlite versions 
1cab0 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53  only work for AS
1cac0 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20  CII characters, 
1cad0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f  regardless of lo
1cae0 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  cale..*/.#ifdef 
1caf0 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64  SQLITE_ASCII.# d
1cb00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
1cb10 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28  pper(x)  ((x)&~(
1cb20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1cb30 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1cb40 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66  x)]&0x20)).# def
1cb50 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
1cb60 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ce(x)   (sqlite3
1cb70 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
1cb80 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
1cb90 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  1).# define sqli
1cba0 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
1cbb0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1cbc0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1cbd0 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66  (x)]&0x06).# def
1cbe0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
1cbf0 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ha(x)   (sqlite3
1cc00 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
1cc10 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
1cc20 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  2).# define sqli
1cc30 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
1cc40 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1cc50 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1cc60 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66  (x)]&0x04).# def
1cc70 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
1cc80 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33  git(x)  (sqlite3
1cc90 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
1cca0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
1ccb0 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  8).# define sqli
1ccc0 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
1ccd0 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c  (sqlite3UpperToL
1cce0 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63  ower[(unsigned c
1ccf0 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a  har)(x)]).#else.
1cd00 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1cd10 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75  Toupper(x)   tou
1cd20 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  pper((unsigned c
1cd30 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1cd40 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
1cd50 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75  (x)   isspace((u
1cd60 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1cd70 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1cd80 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69  e3Isalnum(x)   i
1cd90 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64  salnum((unsigned
1cda0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1cdb0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
1cdc0 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28  ha(x)   isalpha(
1cdd0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1cde0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1cdf0 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
1ce00 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e   isdigit((unsign
1ce10 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1ce20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
1ce30 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67  digit(x)  isxdig
1ce40 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
1ce50 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1ce60 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
1ce70 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73  )   tolower((uns
1ce80 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1ce90 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
1cea0 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20  ternal function 
1ceb0 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23 64  prototypes.*/.#d
1cec0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72  efine sqlite3Str
1ced0 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
1cee0 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65 33  icmp.int sqlite3
1cef0 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63  Strlen30(const c
1cf00 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73  har*);.#define s
1cf10 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73  qlite3StrNICmp s
1cf20 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a  qlite3_strnicmp.
1cf30 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
1cf40 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f  ocInit(void);.vo
1cf50 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  id sqlite3Malloc
1cf60 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  End(void);.void 
1cf70 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 69  *sqlite3Malloc(i
1cf80 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1cf90 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69 6e 74  e3MallocZero(int
1cfa0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1cfb0 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c  DbMallocZero(sql
1cfc0 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  ite3*, int);.voi
1cfd0 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
1cfe0 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20  ocRaw(sqlite3*, 
1cff0 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  int);.char *sqli
1d000 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69  te3DbStrDup(sqli
1d010 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1d020 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1d030 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65  DbStrNDup(sqlite
1d040 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1d050 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1d060 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a  te3Realloc(void*
1d070 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1d080 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72  lite3DbReallocOr
1d090 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Free(sqlite3 *, 
1d0a0 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f  void *, int);.vo
1d0b0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
1d0c0 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  lloc(sqlite3 *, 
1d0d0 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f  void *, int);.vo
1d0e0 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
1d0f0 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
1d100 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  );.int sqlite3Ma
1d110 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b  llocSize(void*);
1d120 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61  .int sqlite3DbMa
1d130 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33  llocSize(sqlite3
1d140 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  *, void*);.void 
1d150 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d  *sqlite3ScratchM
1d160 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
1d170 20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 46   sqlite3ScratchF
1d180 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
1d190 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c   *sqlite3PageMal
1d1a0 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
1d1b0 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76  qlite3PageFree(v
1d1c0 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
1d1d0 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74  te3MemSetDefault
1d1e0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1d1f0 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  ite3BenignMalloc
1d200 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76  Hooks(void (*)(v
1d210 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76  oid), void (*)(v
1d220 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid));.int sqlit
1d230 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c  e3HeapNearlyFull
1d240 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f  (void);../*.** O
1d250 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 61  n systems with a
1d260 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65  mple stack space
1d270 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72   and that suppor
1d280 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65  t alloca(), make
1d290 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63  .** use of alloc
1d2a0 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70  a() to obtain sp
1d2b0 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75  ace for large au
1d2c0 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e  tomatic objects.
1d2d0 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a    By default,.**
1d2e0 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 72   obtain space fr
1d2f0 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a  om malloc()..**.
1d300 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20  ** The alloca() 
1d310 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65  routine never re
1d320 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69  turns NULL.  Thi
1d330 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64  s will cause cod
1d340 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20  e paths.** that 
1d350 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65  deal with sqlite
1d360 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61  3StackAlloc() fa
1d370 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72  ilures to be unr
1d380 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66  eachable..*/.#if
1d390 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41  def SQLITE_USE_A
1d3a0 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73  LLOCA.# define s
1d3b0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
1d3c0 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63  Raw(D,N)   alloc
1d3d0 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  a(N).# define sq
1d3e0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
1d3f0 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74  ero(D,N)  memset
1d400 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e  (alloca(N), 0, N
1d410 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1d420 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29  e3StackFree(D,P)
1d430 20 20 20 20 20 20 20 0a 23 65 6c 73 65 0a 23 20         .#else.# 
1d440 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1d450 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
1d460 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c     sqlite3DbMall
1d470 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66  ocRaw(D,N).# def
1d480 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1d490 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
1d4a0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
1d4b0 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  ero(D,N).# defin
1d4c0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
1d4d0 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71  ee(D,P)       sq
1d4e0 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29  lite3DbFree(D,P)
1d4f0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
1d500 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
1d510 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS3.const sqli
1d520 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
1d530 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
1d540 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e  msys3(void);.#en
1d550 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
1d560 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35  E_ENABLE_MEMSYS5
1d570 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
1d580 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
1d590 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35  te3MemGetMemsys5
1d5a0 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
1d5b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1d5c0 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c  MUTEX_OMIT.  sql
1d5d0 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
1d5e0 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
1d5f0 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f  3DefaultMutex(vo
1d600 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
1d610 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
1d620 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d  st *sqlite3NoopM
1d630 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
1d640 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
1d650 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69  ite3MutexAlloc(i
1d660 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
1d670 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64  e3MutexInit(void
1d680 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
1d690 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a  MutexEnd(void);.
1d6a0 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
1d6b0 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69  te3StatusValue(i
1d6c0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1d6d0 33 53 74 61 74 75 73 41 64 64 28 69 6e 74 2c 20  3StatusAdd(int, 
1d6e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d6f0 65 33 53 74 61 74 75 73 53 65 74 28 69 6e 74 2c  e3StatusSet(int,
1d700 20 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65 66 20   int);..#ifndef 
1d710 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
1d720 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74  TING_POINT.  int
1d730 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f   sqlite3IsNaN(do
1d740 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64  uble);.#else.# d
1d750 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
1d760 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a  aN(X)  0.#endif.
1d770 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50  .void sqlite3VXP
1d780 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
1d790 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
1d7a0 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66  *, va_list);.#if
1d7b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1d7c0 5f 54 52 41 43 45 0a 76 6f 69 64 20 73 71 6c 69  _TRACE.void sqli
1d7d0 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63  te3XPrintf(StrAc
1d7e0 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  cum*, const char
1d7f0 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a  *, ...);.#endif.
1d800 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72  char *sqlite3MPr
1d810 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
1d820 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
1d830 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d  .char *sqlite3VM
1d840 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
1d850 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
1d860 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c  list);.char *sql
1d870 69 74 65 33 4d 41 70 70 65 6e 64 66 28 73 71 6c  ite3MAppendf(sql
1d880 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73  ite3*,char*,cons
1d890 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69  t char*,...);.#i
1d8a0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
1d8b0 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65  _TEST) || define
1d8c0 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
1d8d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
1d8e0 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20  bugPrintf(const 
1d8f0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e  char*, ...);.#en
1d900 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
1d910 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76  SQLITE_TEST).  v
1d920 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74  oid *sqlite3Test
1d930 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20  TextToPtr(const 
1d940 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
1d950 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72 6d 61 74  /* Output format
1d960 74 69 6e 67 20 66 6f 72 20 53 51 4c 49 54 45 5f  ting for SQLITE_
1d970 54 45 53 54 43 54 52 4c 5f 45 58 50 4c 41 49 4e  TESTCTRL_EXPLAIN
1d980 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1d990 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 54 52  SQLITE_ENABLE_TR
1d9a0 45 45 5f 45 58 50 4c 41 49 4e 29 0a 20 20 76 6f  EE_EXPLAIN).  vo
1d9b0 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1d9c0 6e 42 65 67 69 6e 28 56 64 62 65 2a 29 3b 0a 20  nBegin(Vdbe*);. 
1d9d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1d9e0 6c 61 69 6e 50 72 69 6e 74 66 28 56 64 62 65 2a  lainPrintf(Vdbe*
1d9f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
1da00 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  ..);.  void sqli
1da10 74 65 33 45 78 70 6c 61 69 6e 4e 4c 28 56 64 62  te3ExplainNL(Vdb
1da20 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
1da30 74 65 33 45 78 70 6c 61 69 6e 50 75 73 68 28 56  te3ExplainPush(V
1da40 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  dbe*);.  void sq
1da50 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 6f 70 28  lite3ExplainPop(
1da60 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Vdbe*);.  void s
1da70 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46 69 6e  qlite3ExplainFin
1da80 69 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f  ish(Vdbe*);.  vo
1da90 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1daa0 6e 53 65 6c 65 63 74 28 56 64 62 65 2a 2c 20 53  nSelect(Vdbe*, S
1dab0 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20  elect*);.  void 
1dac0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78  sqlite3ExplainEx
1dad0 70 72 28 56 64 62 65 2a 2c 20 45 78 70 72 2a 29  pr(Vdbe*, Expr*)
1dae0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1daf0 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28  ExplainExprList(
1db00 56 64 62 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  Vdbe*, ExprList*
1db10 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  );.  const char 
1db20 2a 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 6c  *sqlite3VdbeExpl
1db30 61 6e 61 74 69 6f 6e 28 56 64 62 65 2a 29 3b 0a  anation(Vdbe*);.
1db40 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1db50 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42 65 67  qlite3ExplainBeg
1db60 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  in(X).# define s
1db70 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53 65 6c  qlite3ExplainSel
1db80 65 63 74 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  ect(A,B).# defin
1db90 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  e sqlite3Explain
1dba0 45 78 70 72 28 41 2c 42 29 0a 23 20 64 65 66 69  Expr(A,B).# defi
1dbb0 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1dbc0 6e 45 78 70 72 4c 69 73 74 28 41 2c 42 29 0a 23  nExprList(A,B).#
1dbd0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45   define sqlite3E
1dbe0 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 58 29 0a  xplainFinish(X).
1dbf0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1dc00 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28  VdbeExplanation(
1dc10 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f  X) 0.#endif...vo
1dc20 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  id sqlite3SetStr
1dc30 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c  ing(char **, sql
1dc40 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
1dc50 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
1dc60 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50  qlite3ErrorMsg(P
1dc70 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
1dc80 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71  r*, ...);.int sq
1dc90 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61  lite3Dequote(cha
1dca0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1dcb0 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73  KeywordCode(cons
1dcc0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t unsigned char*
1dcd0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
1dce0 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72  te3RunParser(Par
1dcf0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
1dd00 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64  , char **);.void
1dd10 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f   sqlite3FinishCo
1dd20 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e  ding(Parse*);.in
1dd30 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
1dd40 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  Reg(Parse*);.voi
1dd50 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
1dd60 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69  TempReg(Parse*,i
1dd70 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1dd80 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72  GetTempRange(Par
1dd90 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
1dda0 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
1ddb0 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
1ddc0 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
1ddd0 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67  ite3ClearTempReg
1dde0 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 45  Cache(Parse*);.E
1ddf0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
1de00 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
1de10 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  nt,const Token*,
1de20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
1de30 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a  te3Expr(sqlite3*
1de40 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
1de50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1de60 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65  xprAttachSubtree
1de70 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  s(sqlite3*,Expr*
1de80 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45  ,Expr*,Expr*);.E
1de90 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70  xpr *sqlite3PExp
1dea0 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45  r(Parse*, int, E
1deb0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e  xpr*, Expr*, con
1dec0 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72  st Token*);.Expr
1ded0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64   *sqlite3ExprAnd
1dee0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
1def0 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73   Expr*);.Expr *s
1df00 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69  qlite3ExprFuncti
1df10 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  on(Parse*,ExprLi
1df20 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  st*, Token*);.vo
1df30 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73  id sqlite3ExprAs
1df40 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61  signVarNumber(Pa
1df50 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
1df60 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65  id sqlite3ExprDe
1df70 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
1df80 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
1df90 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
1dfa0 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78  Append(Parse*,Ex
1dfb0 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
1dfc0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1dfd0 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73  ListSetName(Pars
1dfe0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b  e*,ExprList*,Tok
1dff0 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
1e000 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
1e010 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70  tSpan(Parse*,Exp
1e020 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a  rList*,ExprSpan*
1e030 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e040 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71  xprListDelete(sq
1e050 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74  lite3*, ExprList
1e060 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
1e070 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68  nit(sqlite3*, ch
1e080 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar**);.int sqlit
1e090 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76  e3InitCallback(v
1e0a0 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  oid*, int, char*
1e0b0 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64  *, char**);.void
1e0c0 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50   sqlite3Pragma(P
1e0d0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
1e0e0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  en*,Token*,int);
1e0f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
1e100 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
1e110 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  nnection(sqlite3
1e120 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e130 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73  ResetOneSchema(s
1e140 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
1e150 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70  id sqlite3Collap
1e160 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28  seDatabaseArray(
1e170 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
1e180 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73  sqlite3BeginPars
1e190 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  e(Parse*,int);.v
1e1a0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
1e1b0 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73  tInternalChanges
1e1c0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c  (sqlite3*);.Tabl
1e1d0 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74  e *sqlite3Result
1e1e0 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73  SetOfSelect(Pars
1e1f0 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69  e*,Select*);.voi
1e200 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73  d sqlite3OpenMas
1e210 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a  terTable(Parse *
1e220 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1e230 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50  ite3StartTable(P
1e240 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
1e250 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  en*,int,int,int,
1e260 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e270 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  e3AddColumn(Pars
1e280 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  e*,Token*);.void
1e290 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75   sqlite3AddNotNu
1e2a0 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ll(Parse*, int);
1e2b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1e2c0 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65  PrimaryKey(Parse
1e2d0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
1e2e0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
1e2f0 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65  id sqlite3AddChe
1e300 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ckConstraint(Par
1e310 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
1e320 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
1e330 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f  mnType(Parse*,To
1e340 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
1e350 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c  te3AddDefaultVal
1e360 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70  ue(Parse*,ExprSp
1e370 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
1e380 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65  e3AddCollateType
1e390 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
1e3a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
1e3b0 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  dTable(Parse*,To
1e3c0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65  ken*,Token*,Sele
1e3d0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
1e3e0 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20  3ParseUri(const 
1e3f0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
1e400 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c  *,unsigned int*,
1e410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e420 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73       sqlite3_vfs
1e430 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a  **,char**,char *
1e440 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74  *);.Btree *sqlit
1e450 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28  e3DbNameToBtree(
1e460 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1e470 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
1e480 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65  e3CodeOnce(Parse
1e490 20 2a 29 3b 0a 0a 42 69 74 76 65 63 20 2a 73 71   *);..Bitvec *sq
1e4a0 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74  lite3BitvecCreat
1e4b0 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  e(u32);.int sqli
1e4c0 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69  te3BitvecTest(Bi
1e4d0 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74  tvec*, u32);.int
1e4e0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65   sqlite3BitvecSe
1e4f0 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
1e500 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
1e510 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a  vecClear(Bitvec*
1e520 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76  , u32, void*);.v
1e530 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
1e540 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a  cDestroy(Bitvec*
1e550 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69  );.u32 sqlite3Bi
1e560 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a  tvecSize(Bitvec*
1e570 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
1e580 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28  tvecBuiltinTest(
1e590 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77 53  int,int*);..RowS
1e5a0 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65  et *sqlite3RowSe
1e5b0 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  tInit(sqlite3*, 
1e5c0 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20  void*, unsigned 
1e5d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e5e0 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f  e3RowSetClear(Ro
1e5f0 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  wSet*);.void sql
1e600 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
1e610 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a  (RowSet*, i64);.
1e620 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
1e630 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 75  tTest(RowSet*, u
1e640 38 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a  8 iBatch, i64);.
1e650 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
1e660 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69  tNext(RowSet*, i
1e670 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  64*);..void sqli
1e680 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61  te3CreateView(Pa
1e690 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
1e6a0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74  n*,Token*,Select
1e6b0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66  *,int,int);..#if
1e6c0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1e6d0 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21  _OMIT_VIEW) || !
1e6e0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1e6f0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1e700 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  ).  int sqlite3V
1e710 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
1e720 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  s(Parse*,Table*)
1e730 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
1e740 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
1e750 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20  olumnNames(A,B) 
1e760 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  0.#endif..void s
1e770 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28  qlite3DropTable(
1e780 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1e790 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1e7a0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f  d sqlite3CodeDro
1e7b0 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54  pTable(Parse*, T
1e7c0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  able*, int, int)
1e7d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
1e7e0 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
1e7f0 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66  3*, Table*);.#if
1e800 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1e810 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
1e820 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
1e830 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28  oincrementBegin(
1e840 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
1e850 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
1e860 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50  toincrementEnd(P
1e870 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23  arse *pParse);.#
1e880 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
1e890 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
1e8a0 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66  ntBegin(X).# def
1e8b0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
1e8c0 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23  ncrementEnd(X).#
1e8d0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
1e8e0 33 43 6f 64 65 43 6f 72 6f 75 74 69 6e 65 28 50  3CodeCoroutine(P
1e8f0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
1e900 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 76 6f  SelectDest*);.vo
1e910 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
1e920 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1e930 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 53 65  *, ExprList*, Se
1e940 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  lect*, IdList*, 
1e950 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1e960 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65  te3ArrayAllocate
1e970 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c  (sqlite3*,void*,
1e980 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a  int,int*,int*);.
1e990 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
1e9a0 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  dListAppend(sqli
1e9b0 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54  te3*, IdList*, T
1e9c0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
1e9d0 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49  te3IdListIndex(I
1e9e0 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  dList*,const cha
1e9f0 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  r*);.SrcList *sq
1ea00 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61  lite3SrcListEnla
1ea10 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  rge(sqlite3*, Sr
1ea20 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
1ea30 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
1ea40 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
1ea50 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
1ea60 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
1ea70 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  en*);.SrcList *s
1ea80 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
1ea90 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73  endFromTerm(Pars
1eaa0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
1eab0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20  ken*, Token*,.  
1eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eae0 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65      Token*, Sele
1eaf0 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69  ct*, Expr*, IdLi
1eb00 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
1eb10 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64  e3SrcListIndexed
1eb20 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  By(Parse *, SrcL
1eb30 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  ist *, Token *);
1eb40 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
1eb50 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73  xedByLookup(Pars
1eb60 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c  e *, struct SrcL
1eb70 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69  ist_item *);.voi
1eb80 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
1eb90 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72  ShiftJoinType(Sr
1eba0 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
1ebb0 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69  lite3SrcListAssi
1ebc0 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a  gnCursors(Parse*
1ebd0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  , SrcList*);.voi
1ebe0 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44  d sqlite3IdListD
1ebf0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
1ec00 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
1ec10 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c  qlite3SrcListDel
1ec20 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  ete(sqlite3*, Sr
1ec30 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a  cList*);.Index *
1ec40 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64  sqlite3CreateInd
1ec50 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ex(Parse*,Token*
1ec60 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a  ,Token*,SrcList*
1ec70 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54  ,ExprList*,int,T
1ec80 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
1ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1eca0 6f 6b 65 6e 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  oken*, int, int)
1ecb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  ;.void sqlite3Dr
1ecc0 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  opIndex(Parse*, 
1ecd0 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
1ece0 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
1ecf0 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  t(Parse*, Select
1ed00 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b  *, SelectDest*);
1ed10 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
1ed20 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a  SelectNew(Parse*
1ed30 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69  ,ExprList*,SrcLi
1ed40 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
1ed50 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
1ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
1ed70 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31  pr*,ExprList*,u1
1ed80 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  6,Expr*,Expr*);.
1ed90 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
1eda0 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  ctDelete(sqlite3
1edb0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62  *, Select*);.Tab
1edc0 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  le *sqlite3SrcLi
1edd0 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c  stLookup(Parse*,
1ede0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
1edf0 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c  sqlite3IsReadOnl
1ee00 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  y(Parse*, Table*
1ee10 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1ee20 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61  ite3OpenTable(Pa
1ee30 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  rse*, int iCur, 
1ee40 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c  int iDb, Table*,
1ee50 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e   int);.#if defin
1ee60 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1ee70 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
1ee80 49 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65  IMIT) && !define
1ee90 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  d(SQLITE_OMIT_SU
1eea0 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71  BQUERY).Expr *sq
1eeb0 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28  lite3LimitWhere(
1eec0 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
1eed0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
1eee0 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72  Expr*,Expr*,char
1eef0 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  *);.#endif.void 
1ef00 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f  sqlite3DeleteFro
1ef10 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
1ef20 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
1ef30 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50   sqlite3Update(P
1ef40 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
1ef50 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72   ExprList*, Expr
1ef60 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e  *, int);.WhereIn
1ef70 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65  fo *sqlite3Where
1ef80 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63  Begin(Parse*,Src
1ef90 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
1efa0 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
1efb0 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  u16,int);.void s
1efc0 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57  qlite3WhereEnd(W
1efd0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
1efe0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
1eff0 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  etColumn(Parse*,
1f000 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1f010 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69  t, int, u8);.voi
1f020 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
1f030 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
1f040 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  e(Vdbe*, Table*,
1f050 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
1f060 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1f070 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a  rCodeMove(Parse*
1f080 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1f090 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1f0a0 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72  prCacheStore(Par
1f0b0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
1f0c0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1f0d0 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50  3ExprCachePush(P
1f0e0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
1f0f0 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70  ite3ExprCachePop
1f100 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
1f110 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1f120 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65  acheRemove(Parse
1f130 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
1f140 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
1f150 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29  cheClear(Parse*)
1f160 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1f170 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43  prCacheAffinityC
1f180 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e  hange(Parse*, in
1f190 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
1f1a0 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72  ite3ExprCode(Par
1f1b0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
1f1c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1f1d0 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a  rCodeTemp(Parse*
1f1e0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  , Expr*, int*);.
1f1f0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1f200 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  odeTarget(Parse*
1f210 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
1f220 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1f230 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65  deAndCache(Parse
1f240 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
1f250 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1f260 43 6f 64 65 43 6f 6e 73 74 61 6e 74 73 28 50 61  CodeConstants(Pa
1f270 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  rse*, Expr*);.in
1f280 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1f290 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  eExprList(Parse*
1f2a0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
1f2b0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1f2c0 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50  ite3ExprIfTrue(P
1f2d0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1f2e0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1f2f0 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
1f300 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1f310 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65  int, int);.Table
1f320 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62   *sqlite3FindTab
1f330 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  le(sqlite3*,cons
1f340 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
1f350 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
1f360 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
1f370 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
1f380 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  ew,const char*, 
1f390 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
1f3a0 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
1f3b0 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73  teTableItem(Pars
1f3c0 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74  e*,int isView,st
1f3d0 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
1f3e0 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  m *);.Index *sql
1f3f0 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71  ite3FindIndex(sq
1f400 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1f410 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
1f420 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
1f430 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
1f440 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  le(sqlite3*,int,
1f450 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
1f460 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
1f470 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73  AndDeleteIndex(s
1f480 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
1f490 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
1f4a0 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72  qlite3Vacuum(Par
1f4b0 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
1f4c0 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
1f4d0 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68  *, sqlite3*);.ch
1f4e0 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46  ar *sqlite3NameF
1f4f0 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33  romToken(sqlite3
1f500 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
1f510 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
1f520 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  re(Expr*, Expr*)
1f530 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1f540 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70  rListCompare(Exp
1f550 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
1f560 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f570 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65  ExprAnalyzeAggre
1f580 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  gates(NameContex
1f590 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
1f5a0 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
1f5b0 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43  yzeAggList(NameC
1f5c0 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74  ontext*,ExprList
1f5d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
1f5e0 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53  unctionUsesThisS
1f5f0 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73  rc(Expr*, SrcLis
1f600 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74  t*);.Vdbe *sqlit
1f610 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a  e3GetVdbe(Parse*
1f620 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
1f630 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69  rngSaveState(voi
1f640 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
1f650 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65  PrngRestoreState
1f660 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1f670 69 74 65 33 50 72 6e 67 52 65 73 65 74 53 74 61  ite3PrngResetSta
1f680 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
1f690 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
1f6a0 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
1f6b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
1f6c0 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
1f6d0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
1f6e0 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
1f6f0 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
1f700 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
1f710 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
1f720 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
1f730 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
1f740 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1f750 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e  ommitTransaction
1f760 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1f770 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72  qlite3RollbackTr
1f780 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
1f790 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1f7a0 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
1f7b0 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
1f7c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
1f7d0 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
1f7e0 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
1f7f0 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
1f800 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
1f810 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
1f820 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
1f830 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
1f840 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
1f850 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29  ntNotJoin(Expr*)
1f860 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1f870 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e  rIsConstantOrFun
1f880 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  ction(Expr*);.in
1f890 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49  t sqlite3ExprIsI
1f8a0 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e  nteger(Expr*, in
1f8b0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1f8c0 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f  ExprCanBeNull(co
1f8d0 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  nst Expr*);.void
1f8e0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1f8f0 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62 65 2a  IsNullJump(Vdbe*
1f900 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 69  , const Expr*, i
1f910 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1f920 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f  lite3ExprNeedsNo
1f930 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63  AffinityChange(c
1f940 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72  onst Expr*, char
1f950 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
1f960 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72  Rowid(const char
1f970 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f980 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74  GenerateRowDelet
1f990 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
1f9a0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
1f9b0 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 29   Trigger *, int)
1f9c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
1f9d0 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65  nerateRowIndexDe
1f9e0 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62  lete(Parse*, Tab
1f9f0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b  le*, int, int*);
1fa00 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65  .int sqlite3Gene
1fa10 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72  rateIndexKey(Par
1fa20 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
1fa30 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1fa40 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
1fa50 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b  eConstraintCheck
1fa60 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  s(Parse*,Table*,
1fa70 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20  int,int,.       
1fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1faa0 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  t*,int,int,int,i
1fab0 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  nt,int*);.void s
1fac0 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e  qlite3CompleteIn
1fad0 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  sertion(Parse*, 
1fae0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1faf0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  , int*, int, int
1fb00 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
1fb10 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
1fb20 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
1fb30 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  able*, int, int)
1fb40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
1fb50 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
1fb60 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  n(Parse*, int, i
1fb70 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1fb80 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73  3MultiWrite(Pars
1fb90 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1fba0 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a  3MayAbort(Parse*
1fbb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48  );.void sqlite3H
1fbc0 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  altConstraint(Pa
1fbd0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
1fbe0 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70  char*, int);.Exp
1fbf0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75  r *sqlite3ExprDu
1fc00 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  p(sqlite3*,Expr*
1fc10 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20  ,int);.ExprList 
1fc20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
1fc30 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
1fc40 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63  rList*,int);.Src
1fc50 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
1fc60 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
1fc70 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ,SrcList*,int);.
1fc80 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
1fc90 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  dListDup(sqlite3
1fca0 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65  *,IdList*);.Sele
1fcb0 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
1fcc0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  tDup(sqlite3*,Se
1fcd0 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  lect*,int);.void
1fce0 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49   sqlite3FuncDefI
1fcf0 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48 61 73  nsert(FuncDefHas
1fd00 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46  h*, FuncDef*);.F
1fd10 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46  uncDef *sqlite3F
1fd20 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  indFunction(sqli
1fd30 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1fd40 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b  ,int,int,u8,u8);
1fd50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
1fd60 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
1fd70 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
1fd80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
1fd90 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e  isterDateTimeFun
1fda0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
1fdb0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
1fdc0 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  erGlobalFunction
1fdd0 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
1fde0 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
1fdf0 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  k(sqlite3*);.int
1fe00 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
1fe10 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69  eckSickOrOk(sqli
1fe20 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
1fe30 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28  te3ChangeCookie(
1fe40 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23  Parse*, int);..#
1fe50 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1fe60 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26  TE_OMIT_VIEW) &&
1fe70 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1fe80 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76  _OMIT_TRIGGER).v
1fe90 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72  oid sqlite3Mater
1fea0 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65  ializeView(Parse
1feb0 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
1fec0 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
1fed0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1fee0 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f  MIT_TRIGGER.  vo
1fef0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
1ff00 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
1ff10 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
1ff20 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63  ,int,IdList*,Src
1ff30 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
1ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff50 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74    Expr*,int, int
1ff60 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1ff70 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50  3FinishTrigger(P
1ff80 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74  arse*, TriggerSt
1ff90 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20  ep*, Token*);.  
1ffa0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
1ffb0 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
1ffc0 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
1ffd0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
1ffe0 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72  opTriggerPtr(Par
1fff0 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  se*, Trigger*);.
20000 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
20010 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
20020 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c  Parse *, Table*,
20030 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
20040 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20   int *pMask);.  
20050 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
20060 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73  TriggerList(Pars
20070 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20  e *, Table *);. 
20080 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
20090 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73  eRowTrigger(Pars
200a0 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69  e*, Trigger *, i
200b0 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
200c0 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20  nt, Table *,.   
200d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200e0 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e           int, in
200f0 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
20100 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
20110 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73  iggerDirect(Pars
20120 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  e *, Trigger *, 
20130 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
20140 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
20150 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65  sqliteViewTrigge
20160 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  rs(Parse*, Table
20170 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45  *, Expr*, int, E
20180 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69  xprList*);.  voi
20190 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
201a0 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74  riggerStep(sqlit
201b0 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  e3*, TriggerStep
201c0 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
201d0 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
201e0 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69  rSelectStep(sqli
201f0 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  te3*,Select*);. 
20200 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
20210 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65  lite3TriggerInse
20220 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  rtStep(sqlite3*,
20230 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c  Token*, IdList*,
20240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20260 20 20 20 20 20 20 20 20 20 45 78 70 72 4c 69 73           ExprLis
20270 74 2a 2c 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a  t*,Select*,u8);.
20280 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
20290 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64  qlite3TriggerUpd
202a0 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ateStep(sqlite3*
202b0 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
202c0 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  *, Expr*, u8);. 
202d0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
202e0 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
202f0 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
20300 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a  Token*, Expr*);.
20310 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
20320 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
20330 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
20340 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
20350 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
20360 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
20370 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
20380 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
20390 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
203a0 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
203b0 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
203c0 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
203d0 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
203e0 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
203f0 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
20400 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
20410 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  (p)).#else.# def
20420 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
20430 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45  ersExist(B,C,D,E
20440 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73  ,F) 0.# define s
20450 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
20460 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  ger(A,B).# defin
20470 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  e sqlite3DropTri
20480 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64  ggerPtr(A,B).# d
20490 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c  efine sqlite3Unl
204a0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
204b0 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66  ger(A,B,C).# def
204c0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
204d0 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c  owTrigger(A,B,C,
204e0 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64  D,E,F,G,H,I).# d
204f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
20500 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
20510 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23  t(A,B,C,D,E,F).#
20520 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
20530 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29  riggerList(X, Y)
20540 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
20550 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
20560 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73  (p) p.# define s
20570 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
20580 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  mask(A,B,C,D,E,F
20590 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e  ,G) 0.#endif..in
205a0 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70  t sqlite3JoinTyp
205b0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
205c0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
205d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
205e0 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28  reateForeignKey(
205f0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
20600 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c  *, Token*, ExprL
20610 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
20620 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72   sqlite3DeferFor
20630 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
20640 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
20650 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
20660 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73  IZATION.  void s
20670 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50  qlite3AuthRead(P
20680 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65  arse*,Expr*,Sche
20690 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20  ma*,SrcList*);. 
206a0 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
206b0 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74  Check(Parse*,int
206c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
206d0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
206e0 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
206f0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
20700 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20  extPush(Parse*, 
20710 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f  AuthContext*, co
20720 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
20730 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
20740 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e  ntextPop(AuthCon
20750 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  text*);.  int sq
20760 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c  lite3AuthReadCol
20770 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
20780 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  har *, const cha
20790 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  r *, int);.#else
207a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
207b0 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c  3AuthRead(a,b,c,
207c0 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  d).# define sqli
207d0 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62  te3AuthCheck(a,b
207e0 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54  ,c,d,e)    SQLIT
207f0 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71  E_OK.# define sq
20800 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
20810 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65  Push(a,b,c).# de
20820 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
20830 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28  ContextPop(a)  (
20840 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69  (void)(a)).#endi
20850 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74  f.void sqlite3At
20860 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
20870 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  r*, Expr*, Expr*
20880 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
20890 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  etach(Parse*, Ex
208a0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
208b0 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72  3FixInit(DbFixer
208c0 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  *, Parse*, int, 
208d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
208e0 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  st Token*);.int 
208f0 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73  sqlite3FixSrcLis
20900 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c  t(DbFixer*, SrcL
20910 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
20920 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69  e3FixSelect(DbFi
20930 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xer*, Select*);.
20940 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
20950 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  pr(DbFixer*, Exp
20960 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
20970 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69  FixExprList(DbFi
20980 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xer*, ExprList*)
20990 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
209a0 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69  TriggerStep(DbFi
209b0 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65  xer*, TriggerSte
209c0 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  p*);.int sqlite3
209d0 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20  AtoF(const char 
209e0 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74  *z, double*, int
209f0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
20a00 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
20a10 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   char *, int*);.
20a20 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28  int sqlite3Atoi(
20a30 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
20a40 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  t sqlite3Utf16By
20a50 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64  teLen(const void
20a60 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68   *pData, int nCh
20a70 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
20a80 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73  Utf8CharLen(cons
20a90 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69  t char *pData, i
20aa0 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73  nt nByte);.u32 s
20ab0 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63  qlite3Utf8Read(c
20ac0 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 0a 2f 2a 0a  onst u8**);../*.
20ad0 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72  ** Routines to r
20ae0 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76 61  ead and write va
20af0 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
20b00 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20 75  tegers.  These u
20b10 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66  sed to.** be def
20b20 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75  ined locally, bu
20b30 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65  t now we use the
20b40 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73   varint routines
20b50 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a   in the util.c.*
20b60 2a 20 66 69 6c 65 2e 20 20 43 6f 64 65 20 73 68  * file.  Code sh
20b70 6f 75 6c 64 20 75 73 65 20 74 68 65 20 4d 41 43  ould use the MAC
20b80 52 4f 20 66 6f 72 6d 73 20 62 65 6c 6f 77 2c 20  RO forms below, 
20b90 61 73 20 74 68 65 20 56 61 72 69 6e 74 33 32 20  as the Varint32 
20ba0 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 61 72 65 20  versions.** are 
20bb0 63 6f 64 65 64 20 74 6f 20 61 73 73 75 6d 65 20  coded to assume 
20bc0 74 68 65 20 73 69 6e 67 6c 65 20 62 79 74 65 20  the single byte 
20bd0 63 61 73 65 20 69 73 20 61 6c 72 65 61 64 79 20  case is already 
20be0 68 61 6e 64 6c 65 64 20 28 77 68 69 63 68 20 0a  handled (which .
20bf0 2a 2a 20 74 68 65 20 4d 41 43 52 4f 20 66 6f 72  ** the MACRO for
20c00 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69 6e 74 20  m does)..*/.int 
20c10 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
20c20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
20c30 20 75 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u64);.int sqlit
20c40 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 75 6e  e3PutVarint32(un
20c50 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 33  signed char*, u3
20c60 32 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  2);.u8 sqlite3Ge
20c70 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e  tVarint(const un
20c80 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
20c90 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65  64 *);.u8 sqlite
20ca0 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e  3GetVarint32(con
20cb0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
20cc0 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20   *, u32 *);.int 
20cd0 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
20ce0 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20  (u64 v);../*.** 
20cf0 54 68 65 20 68 65 61 64 65 72 20 6f 66 20 61 20  The header of a 
20d00 72 65 63 6f 72 64 20 63 6f 6e 73 69 73 74 73 20  record consists 
20d10 6f 66 20 61 20 73 65 71 75 65 6e 63 65 20 76 61  of a sequence va
20d20 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
20d30 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
20d40 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 61 6c   integers are al
20d50 6d 6f 73 74 20 61 6c 77 61 79 73 20 73 6d 61 6c  most always smal
20d60 6c 20 61 6e 64 20 61 72 65 20 65 6e 63 6f 64 65  l and are encode
20d70 64 20 61 73 20 61 20 73 69 6e 67 6c 65 20 62 79  d as a single by
20d80 74 65 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  te..** The follo
20d90 77 69 6e 67 20 6d 61 63 72 6f 73 20 74 61 6b 65  wing macros take
20da0 20 61 64 76 61 6e 74 61 67 65 20 74 68 69 73 20   advantage this 
20db0 66 61 63 74 20 74 6f 20 70 72 6f 76 69 64 65 20  fact to provide 
20dc0 61 20 66 61 73 74 20 65 6e 63 6f 64 65 0a 2a 2a  a fast encode.**
20dd0 20 61 6e 64 20 64 65 63 6f 64 65 20 6f 66 20 74   and decode of t
20de0 68 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20 61  he integers in a
20df0 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 2e 20   record header. 
20e00 20 49 74 20 69 73 20 66 61 73 74 65 72 20 66 6f   It is faster fo
20e10 72 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20  r the common.** 
20e20 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20 69  case where the i
20e30 6e 74 65 67 65 72 20 69 73 20 61 20 73 69 6e 67  nteger is a sing
20e40 6c 65 20 62 79 74 65 2e 20 20 49 74 20 69 73 20  le byte.  It is 
20e50 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77 65 72 20  a little slower 
20e60 77 68 65 6e 20 74 68 65 0a 2a 2a 20 69 6e 74 65  when the.** inte
20e70 67 65 72 20 69 73 20 74 77 6f 20 6f 72 20 6d 6f  ger is two or mo
20e80 72 65 20 62 79 74 65 73 2e 20 20 42 75 74 20 6f  re bytes.  But o
20e90 76 65 72 61 6c 6c 20 69 74 20 69 73 20 66 61 73  verall it is fas
20ea0 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ter..**.** The f
20eb0 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65 73 73  ollowing express
20ec0 69 6f 6e 73 20 61 72 65 20 65 71 75 69 76 61 6c  ions are equival
20ed0 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78  ent:.**.**     x
20ee0 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72   = sqlite3GetVar
20ef0 69 6e 74 33 32 28 20 41 2c 20 26 42 20 29 3b 0a  int32( A, &B );.
20f00 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74  **     x = sqlit
20f10 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 20 41  e3PutVarint32( A
20f20 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 20 20 20  , B );.**.**    
20f30 20 78 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32   x = getVarint32
20f40 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 20 20 20 20  ( A, B );.**    
20f50 20 78 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32   x = putVarint32
20f60 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a  ( A, B );.**.*/.
20f70 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
20f80 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
20f90 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38  8)((*(A)<(u8)0x8
20fa0 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41  0)?((B)=(u32)*(A
20fb0 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56  )),1:sqlite3GetV
20fc0 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32  arint32((A),(u32
20fd0 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e   *)&(B))).#defin
20fe0 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c  e putVarint32(A,
20ff0 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75  B)  \.  (u8)(((u
21000 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30  32)(B)<(u32)0x80
21010 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65  )?(*(A)=(unsigne
21020 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a  d char)(B)),1:\.
21030 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
21040 6e 74 33 32 28 28 41 29 2c 28 42 29 29 29 0a 23  nt32((A),(B))).#
21050 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
21060 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61      sqlite3GetVa
21070 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74  rint.#define put
21080 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
21090 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e  3PutVarint...con
210a0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
210b0 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
210c0 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a  (Vdbe *, Index *
210d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
210e0 61 62 6c 65 41 66 66 69 6e 69 74 79 53 74 72 28  ableAffinityStr(
210f0 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29  Vdbe *, Table *)
21100 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f  ;.char sqlite3Co
21110 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78  mpareAffinity(Ex
21120 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
21130 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  aff2);.int sqlit
21140 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f  e3IndexAffinityO
21150 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  k(Expr *pExpr, c
21160 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79  har idx_affinity
21170 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45  );.char sqlite3E
21180 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72  xprAffinity(Expr
21190 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71   *pExpr);.int sq
211a0 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73  lite3Atoi64(cons
211b0 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69  t char*, i64*, i
211c0 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  nt, u8);.void sq
211d0 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74  lite3Error(sqlit
211e0 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
211f0 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64  char*,...);.void
21200 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c   *sqlite3HexToBl
21210 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  ob(sqlite3*, con
21220 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
21230 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65  n);.u8 sqlite3He
21240 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69  xToInt(int h);.i
21250 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72  nt sqlite3TwoPar
21260 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54  tName(Parse *, T
21270 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  oken *, Token *,
21280 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66   Token **);..#if
21290 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
212a0 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
212b0 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
212c0 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28  | \.    defined(
212d0 53 51 4c 49 54 45 5f 44 45 42 55 47 5f 4f 53 5f  SQLITE_DEBUG_OS_
212e0 54 52 41 43 45 29 0a 63 6f 6e 73 74 20 63 68 61  TRACE).const cha
212f0 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d  r *sqlite3ErrNam
21300 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  e(int);.#endif..
21310 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
21320 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a  te3ErrStr(int);.
21330 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53  int sqlite3ReadS
21340 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61  chema(Parse *pPa
21350 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  rse);.CollSeq *s
21360 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65  qlite3FindCollSe
21370 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e  q(sqlite3*,u8 en
21380 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  c, const char*,i
21390 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  nt);.CollSeq *sq
213a0 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53  lite3LocateCollS
213b0 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
213c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61  , const char*zNa
213d0 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  me);.CollSeq *sq
213e0 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71  lite3ExprCollSeq
213f0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
21400 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78  Expr *pExpr);.Ex
21410 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
21420 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50  ddCollateToken(P
21430 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
21440 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78  pr*, Token*);.Ex
21450 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
21460 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28  ddCollateString(
21470 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e  Parse*,Expr*,con
21480 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20  st char*);.Expr 
21490 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70  *sqlite3ExprSkip
214a0 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a  Collate(Expr*);.
214b0 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
214c0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
214d0 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74   CollSeq *);.int
214e0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a   sqlite3CheckObj
214f0 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  ectName(Parse *,
21500 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
21510 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
21520 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74  SetChanges(sqlit
21530 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  e3 *, int);.int 
21540 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
21550 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
21560 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69  qlite3SubInt64(i
21570 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
21580 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36  lite3MulInt64(i6
21590 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
215a0 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74  ite3AbsInt32(int
215b0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
215c0 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45  _ENABLE_8_3_NAME
215d0 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  S.void sqlite3Fi
215e0 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20  leSuffix3(const 
215f0 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23  char*, char*);.#
21600 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
21610 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
21620 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20  (X,Y).#endif.u8 
21630 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
21640 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  n(const char *z,
21650 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69  int);..const voi
21660 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54  d *sqlite3ValueT
21670 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ext(sqlite3_valu
21680 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  e*, u8);.int sql
21690 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73  ite3ValueBytes(s
216a0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
216b0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
216c0 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69  ValueSetStr(sqli
216d0 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c  te3_value*, int,
216e0 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38   const void *,u8
216f0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
21700 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28             void(
21710 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
21720 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
21730 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  e(sqlite3_value*
21740 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  );.sqlite3_value
21750 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65   *sqlite3ValueNe
21760 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68  w(sqlite3 *);.ch
21770 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36  ar *sqlite3Utf16
21780 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  to8(sqlite3 *, c
21790 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
217a0 20 75 38 29 3b 0a 23 69 66 64 65 66 20 53 51 4c   u8);.#ifdef SQL
217b0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
217c0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
217d0 66 38 74 6f 31 36 28 73 71 6c 69 74 65 33 20 2a  f8to16(sqlite3 *
217e0 2c 20 75 38 2c 20 63 68 61 72 20 2a 2c 20 69 6e  , u8, char *, in
217f0 74 2c 20 69 6e 74 20 2a 29 3b 0a 23 65 6e 64 69  t, int *);.#endi
21800 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  f.int sqlite3Val
21810 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74  ueFromExpr(sqlit
21820 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38  e3 *, Expr *, u8
21830 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
21840 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lue **);.void sq
21850 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
21860 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f  ffinity(sqlite3_
21870 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29  value *, u8, u8)
21880 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
21890 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78  _AMALGAMATION.ex
218a0 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
218b0 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
218c0 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  OpcodeProperty[]
218d0 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
218e0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
218f0 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
21900 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
21910 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
21920 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d  qlite3CtypeMap[]
21930 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54  ;.extern const T
21940 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54  oken sqlite3IntT
21950 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20  okens[];.extern 
21960 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63  SQLITE_WSD struc
21970 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20  t Sqlite3Config 
21980 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65  sqlite3Config;.e
21990 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
219a0 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c   FuncDefHash sql
219b0 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69  ite3GlobalFuncti
219c0 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ons;.#ifndef SQL
219d0 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74  ITE_OMIT_WSD.ext
219e0 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50  ern int sqlite3P
219f0 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64  endingByte;.#end
21a00 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  if.#endif.void s
21a10 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
21a20 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ved(sqlite3*, in
21a30 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
21a40 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65  id sqlite3Reinde
21a50 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  x(Parse*, Token*
21a60 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
21a70 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63  sqlite3AlterFunc
21a80 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
21a90 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65  d sqlite3AlterRe
21aa0 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a  nameTable(Parse*
21ab0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
21ac0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
21ad0 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75  GetToken(const u
21ae0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
21af0 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  int *);.void sql
21b00 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28  ite3NestedParse(
21b10 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
21b20 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
21b30 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
21b40 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
21b50 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
21b60 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c  qlite3CodeSubsel
21b70 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70  ect(Parse *, Exp
21b80 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  r *, int, int);.
21b90 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
21ba0 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53  ctPrep(Parse*, S
21bb0 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
21bc0 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ext*);.int sqlit
21bd0 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28  e3MatchSpanName(
21be0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
21bf0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
21c00 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
21c10 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
21c20 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73  ResolveExprNames
21c30 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
21c40 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
21c50 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74  te3ResolveSelect
21c60 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65  Names(Parse*, Se
21c70 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
21c80 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
21c90 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f  3ResolveOrderGro
21ca0 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c  upBy(Parse*, Sel
21cb0 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ect*, ExprList*,
21cc0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
21cd0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
21ce0 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c  nDefault(Vdbe *,
21cf0 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
21d00 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21d10 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43  3AlterFinishAddC
21d20 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54  olumn(Parse *, T
21d30 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
21d40 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41  lite3AlterBeginA
21d50 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
21d60 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f  , SrcList *);.Co
21d70 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65  llSeq *sqlite3Ge
21d80 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c  tCollSeq(Parse*,
21d90 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
21da0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
21db0 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
21dc0 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
21dd0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
21de0 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c  3Analyze(Parse*,
21df0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
21e00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76  ;.int sqlite3Inv
21e10 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42  okeBusyHandler(B
21e20 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e  usyHandler*);.in
21e30 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28  t sqlite3FindDb(
21e40 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
21e50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
21e60 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33  ndDbName(sqlite3
21e70 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
21e80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e  );.int sqlite3An
21e90 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74  alysisLoad(sqlit
21ea0 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f  e3*,int iDB);.vo
21eb0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
21ec0 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c  IndexSamples(sql
21ed0 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76  ite3*,Index*);.v
21ee0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75  oid sqlite3Defau
21ef0 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29  ltRowEst(Index*)
21f00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
21f10 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69  gisterLikeFuncti
21f20 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ons(sqlite3*, in
21f30 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  t);.int sqlite3I
21f40 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71  sLikeFunction(sq
21f50 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
21f60 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  *,char*);.void s
21f70 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c  qlite3MinimumFil
21f80 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20  eFormat(Parse*, 
21f90 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
21fa0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65  sqlite3SchemaCle
21fb0 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65  ar(void *);.Sche
21fc0 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d  ma *sqlite3Schem
21fd0 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  aGet(sqlite3 *, 
21fe0 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71  Btree *);.int sq
21ff0 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64  lite3SchemaToInd
22000 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ex(sqlite3 *db, 
22010 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e  Schema *);.KeyIn
22020 66 6f 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78  fo *sqlite3Index
22030 4b 65 79 69 6e 66 6f 28 50 61 72 73 65 20 2a 2c  Keyinfo(Parse *,
22040 20 49 6e 64 65 78 20 2a 29 3b 0a 69 6e 74 20 73   Index *);.int s
22050 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63  qlite3CreateFunc
22060 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
22070 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69  t char *, int, i
22080 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76  nt, void *, .  v
22090 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
220a0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
220b0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a  ite3_value **),.
220c0 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
220d0 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
220e0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
220f0 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  ), void (*)(sqli
22100 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20  te3_context*),. 
22110 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
22120 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a  *pDestructor.);.
22130 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78  int sqlite3ApiEx
22140 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  it(sqlite3 *db, 
22150 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
22160 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73  3OpenTempDatabas
22170 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69  e(Parse *);..voi
22180 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
22190 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c  mInit(StrAccum*,
221a0 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   char*, int, int
221b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
221c0 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74  trAccumAppend(St
221d0 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68  rAccum*,const ch
221e0 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ar*,int);.void s
221f0 71 6c 69 74 65 33 41 70 70 65 6e 64 53 70 61 63  qlite3AppendSpac
22200 65 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 29  e(StrAccum*,int)
22210 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53  ;.char *sqlite3S
22220 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74  trAccumFinish(St
22230 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73  rAccum*);.void s
22240 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65  qlite3StrAccumRe
22250 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  set(StrAccum*);.
22260 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
22270 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63  ctDestInit(Selec
22280 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  tDest*,int,int);
22290 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72  .Expr *sqlite3Cr
222a0 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73  eateColumnExpr(s
222b0 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73  qlite3 *, SrcLis
222c0 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  t *, int, int);.
222d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
222e0 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69 74  kupRestart(sqlit
222f0 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f  e3_backup *);.vo
22300 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
22310 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62  Update(sqlite3_b
22320 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63  ackup *, Pgno, c
22330 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 2f 2a 0a  onst u8 *);../*.
22340 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
22350 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65   to the LEMON-ge
22360 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a  nerated parser.*
22370 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  /.void *sqlite3P
22380 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a  arserAlloc(void*
22390 28 2a 29 28 73 69 7a 65 5f 74 29 29 3b 0a 76 6f  (*)(size_t));.vo
223a0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
223b0 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
223c0 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
223d0 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28  d sqlite3Parser(
223e0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  void*, int, Toke
223f0 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  n, Parse*);.#ifd
22400 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
22410 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71  CKDEPTH.  int sq
22420 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b  lite3ParserStack
22430 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e  Peak(void*);.#en
22440 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
22450 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69  3AutoLoadExtensi
22460 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
22470 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22480 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
22490 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
224a0 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
224b0 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65  sqlite3*);.#else
224c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
224d0 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
224e0 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (X).#endif..#ifn
224f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
22500 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76  SHARED_CACHE.  v
22510 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
22520 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e  Lock(Parse *, in
22530 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73  t, int, u8, cons
22540 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65  t char *);.#else
22550 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22560 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c  e3TableLock(v,w,
22570 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23  x,y,z).#endif..#
22580 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
22590 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  T.  int sqlite3U
225a0 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20  tf8To8(unsigned 
225b0 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
225c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
225d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
225e0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
225f0 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20  3VtabClear(Y).# 
22600 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
22610 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c  tabSync(X,Y) SQL
22620 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
22630 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
22640 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  back(X).#  defin
22650 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  e sqlite3VtabCom
22660 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  mit(X).#  define
22670 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
22680 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69  nc(db) 0.#  defi
22690 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  ne sqlite3VtabLo
226a0 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65  ck(X) .#  define
226b0 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
226c0 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
226d0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
226e0 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69  kList(X).#  defi
226f0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  ne sqlite3VtabSa
22700 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29  vepoint(X, Y, Z)
22710 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
22720 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56  fine sqlite3GetV
22730 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54  Table(X,Y)  ((VT
22740 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20  able*)0).#else. 
22750 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
22760 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20  abClear(sqlite3 
22770 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  *db, Table*);.  
22780 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
22790 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69  bDisconnect(sqli
227a0 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a  te3 *db, Table *
227b0 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  p);.   int sqlit
227c0 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74  e3VtabSync(sqlit
227d0 65 33 20 2a 64 62 2c 20 63 68 61 72 20 2a 2a 29  e3 *db, char **)
227e0 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
227f0 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c  VtabRollback(sql
22800 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e  ite3 *db);.   in
22810 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  t sqlite3VtabCom
22820 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29  mit(sqlite3 *db)
22830 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
22840 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65  3VtabLock(VTable
22850 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
22860 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56  ite3VtabUnlock(V
22870 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
22880 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
22890 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a  ockList(sqlite3*
228a0 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
228b0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73  3VtabSavepoint(s
228c0 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69  qlite3 *, int, i
228d0 6e 74 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a  nt);.   VTable *
228e0 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
228f0 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
22900 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  *);.#  define sq
22910 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
22920 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61  db) ((db)->nVTra
22930 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56  ns>0 && (db)->aV
22940 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66  Trans==0).#endif
22950 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
22960 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61  bMakeWritable(Pa
22970 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f  rse*,Table*);.vo
22980 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  id sqlite3VtabBe
22990 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
229a0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
229b0 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76   Token*, int);.v
229c0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46  oid sqlite3VtabF
229d0 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65  inishParse(Parse
229e0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
229f0 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49   sqlite3VtabArgI
22a00 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  nit(Parse*);.voi
22a10 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
22a20 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54  Extend(Parse*, T
22a30 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
22a40 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
22a50 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  e(sqlite3*, int,
22a60 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
22a70 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  har **);.int sql
22a80 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e  ite3VtabCallConn
22a90 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ect(Parse*, Tabl
22aa0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
22ab0 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
22ac0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
22ad0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
22ae0 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  t sqlite3VtabBeg
22af0 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54  in(sqlite3 *, VT
22b00 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66  able *);.FuncDef
22b10 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65   *sqlite3VtabOve
22b20 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71  rloadFunction(sq
22b30 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a  lite3 *,FuncDef*
22b40 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72  , int nArg, Expr
22b50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22b60 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28  InvalidFunction(
22b70 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
22b80 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
22b90 75 65 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ue**);.int sqlit
22ba0 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49  e3VdbeParameterI
22bb0 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73  ndex(Vdbe*, cons
22bc0 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  t char*, int);.i
22bd0 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66  nt sqlite3Transf
22be0 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74  erBindings(sqlit
22bf0 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74  e3_stmt *, sqlit
22c00 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 69 6e 74 20  e3_stmt *);.int 
22c10 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
22c20 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71  (Vdbe*);.void sq
22c30 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68 65  lite3ExprListChe
22c40 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c  ckLength(Parse*,
22c50 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
22c60 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65  t char*);.CollSe
22c70 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79  q *sqlite3Binary
22c80 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50  CompareCollSeq(P
22c90 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
22ca0 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  Expr *);.int sql
22cb0 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79  ite3TempInMemory
22cc0 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29  (const sqlite3*)
22cd0 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ;.const char *sq
22ce0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
22cf0 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64  name(int);.#ifnd
22d00 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
22d10 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  AL.  int sqlite3
22d20 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74  Checkpoint(sqlit
22d30 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
22d40 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e  nt*, int*);.  in
22d50 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61  t sqlite3WalDefa
22d60 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71  ultHook(void*,sq
22d70 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
22d80 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  r*,int);.#endif.
22d90 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73  ./* Declarations
22da0 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69   for functions i
22db0 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66  n fkey.c. All of
22dc0 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61   these are repla
22dd0 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20  ced by.** no-op 
22de0 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46  macros if OMIT_F
22df0 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65  OREIGN_KEY is de
22e00 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63  fined. In this c
22e10 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a  ase no foreign.*
22e20 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c  * key functional
22e30 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ity is available
22e40 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45  . If OMIT_TRIGGE
22e50 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74  R is defined but
22e60 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  .** OMIT_FOREIGN
22e70 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c  _KEY is not, onl
22e80 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75  y some of the fu
22e90 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f  nctions are no-o
22ea0 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20  ped. In.** this 
22eb0 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  case foreign key
22ec0 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75  s are parsed, bu
22ed0 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74  t no other funct
22ee0 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20  ionality is .** 
22ef0 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63  provided (enforc
22f00 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73  ement of FK cons
22f10 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73  traints requires
22f20 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75   the triggers su
22f30 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69  b-system)..*/.#i
22f40 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
22f50 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
22f60 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EY) && !defined(
22f70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
22f80 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  GER).  void sqli
22f90 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65  te3FkCheck(Parse
22fa0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
22fb0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
22fc0 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
22fd0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20  Parse*, SrcList 
22fe0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f  *, Table*);.  vo
22ff0 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  id sqlite3FkActi
23000 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ons(Parse*, Tabl
23010 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
23020 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
23030 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
23040 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
23050 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
23060 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
23070 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
23080 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
23090 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
230a0 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
230b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
230c0 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 29  Actions(a,b,c,d)
230d0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
230e0 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c  e3FkCheck(a,b,c,
230f0 64 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  d).  #define sql
23100 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
23110 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65  a,b,c).  #define
23120 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
23130 6b 28 61 2c 62 29 20 20 20 20 20 20 30 0a 20 20  k(a,b)      0.  
23140 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
23150 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c  kRequired(a,b,c,
23160 64 29 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e  d) 0.#endif.#ifn
23170 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
23180 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
23190 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
231a0 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
231b0 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
231c0 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
231d0 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
231e0 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
231f0 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
23200 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
23210 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
23220 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
23230 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
23240 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
23250 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
23260 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
23270 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
23280 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
23290 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
232a0 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
232b0 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
232c0 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
232d0 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
232e0 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
232f0 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
23300 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
23310 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
23320 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
23330 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
23340 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
23350 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
23360 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
23370 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73  ILTIN_TEST.** is
23380 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f   not defined..*/
23390 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
233a0 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
233b0 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
233c0 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
233d0 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20  c(void);.  void 
233e0 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
233f0 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65  Malloc(void);.#e
23400 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
23410 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
23420 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69  Malloc().  #defi
23430 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  ne sqlite3EndBen
23440 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64  ignMalloc().#end
23450 69 66 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  if..#define IN_I
23460 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20  NDEX_ROWID      
23470 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 49       1.#define I
23480 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20  N_INDEX_EPH     
23490 20 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e          2.#defin
234a0 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
234b0 5f 41 53 43 20 20 20 20 20 20 20 33 0a 23 64 65  _ASC       3.#de
234c0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
234d0 44 45 58 5f 44 45 53 43 20 20 20 20 20 20 34 0a  DEX_DESC      4.
234e0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49  int sqlite3FindI
234f0 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20  nIndex(Parse *, 
23500 45 78 70 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a  Expr *, int*);..
23510 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
23520 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54  ABLE_ATOMIC_WRIT
23530 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  E.  int sqlite3J
23540 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
23550 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
23560 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
23570 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  file *, int, int
23580 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
23590 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69  JournalSize(sqli
235a0 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e  te3_vfs *);.  in
235b0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
235c0 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66  Create(sqlite3_f
235d0 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ile *);.  int sq
235e0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73  lite3JournalExis
235f0 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  ts(sqlite3_file 
23600 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  *p);.#else.  #de
23610 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
23620 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28  nalSize(pVfs) ((
23630 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29  pVfs)->szOsFile)
23640 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
23650 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28  e3JournalExists(
23660 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  p) 1.#endif..voi
23670 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  d sqlite3MemJour
23680 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
23690 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  file *);.int sql
236a0 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69  ite3MemJournalSi
236b0 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ze(void);.int sq
236c0 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61  lite3IsMemJourna
236d0 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  l(sqlite3_file *
236e0 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  );..#if SQLITE_M
236f0 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
23700 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
23710 70 72 53 65 74 48 65 69 67 68 74 28 50 61 72 73  prSetHeight(Pars
23720 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
23730 2a 70 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  *p);.  int sqlit
23740 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
23750 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20  ht(Select *);.  
23760 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
23770 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65  heckHeight(Parse
23780 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  *, int);.#else. 
23790 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
237a0 45 78 70 72 53 65 74 48 65 69 67 68 74 28 78 2c  ExprSetHeight(x,
237b0 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  y).  #define sql
237c0 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
237d0 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66  ight(x) 0.  #def
237e0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
237f0 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a  heckHeight(x,y).
23800 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69  #endif..u32 sqli
23810 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73  te3Get4byte(cons
23820 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  t u8*);.void sql
23830 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a  ite3Put4byte(u8*
23840 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20  , u32);..#ifdef 
23850 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
23860 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f  LOCK_NOTIFY.  vo
23870 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
23880 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69  tionBlocked(sqli
23890 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  te3 *, sqlite3 *
238a0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
238b0 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
238c0 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ked(sqlite3 *db)
238d0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
238e0 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
238f0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23  (sqlite3 *db);.#
23900 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
23910 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
23920 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23  Blocked(x,y).  #
23930 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
23940 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
23950 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  (x).  #define sq
23960 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
23970 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a  losed(x).#endif.
23980 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
23990 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
239a0 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46  te3ParserTrace(F
239b0 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23  ILE*, char *);.#
239c0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
239d0 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
239e0 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73  E IOTRACE exists
239f0 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c   then the global
23a00 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c   variable.** sql
23a10 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61  ite3IoTrace is a
23a20 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72   pointer to a pr
23a30 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e  intf-like routin
23a40 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69  e used to.** pri
23a50 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d  nt I/O tracing m
23a60 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66  essages. .*/.#if
23a70 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
23a80 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69  E_IOTRACE.# defi
23a90 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69  ne IOTRACE(A)  i
23aa0 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  f( sqlite3IoTrac
23ab0 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72  e ){ sqlite3IoTr
23ac0 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20  ace A; }.  void 
23ad0 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
23ae0 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51  ceSql(Vdbe*);.SQ
23af0 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64  LITE_EXTERN void
23b00 20 28 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63   (*sqlite3IoTrac
23b10 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
23b20 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
23b30 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
23b40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
23b50 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
23b60 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
23b70 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72  hese routines ar
23b80 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  e available for 
23b90 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67  the mem2.c debug
23ba0 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
23bb0 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  cator.** only.  
23bc0 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f  They are used to
23bd0 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66   verify that dif
23be0 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f  ferent "types" o
23bf0 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f  f memory.** allo
23c00 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70  cations are prop
23c10 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20  erly tracked by 
23c20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a  the system..**.*
23c30 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
23c40 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20  gSetType() sets 
23c50 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e  the "type" of an
23c60 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f   allocation to o
23c70 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d  ne of.** the MEM
23c80 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65  TYPE_* macros de
23c90 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68  fined below.  Th
23ca0 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61  e type must be a
23cb0 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a   bitmask with.**
23cc0 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65   a single bit se
23cd0 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  t..**.** sqlite3
23ce0 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
23cf0 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
23d00 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74  f any of the bit
23d10 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
23d20 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
23d30 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
23d40 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
23d50 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
23d60 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69  tType()..** sqli
23d70 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
23d80 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64  pe() is intended
23d90 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
23da0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
23db0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  nts..**.** sqlit
23dc0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
23dd0 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
23de0 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62  if none of the b
23df0 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
23e00 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
23e10 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
23e20 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
23e30 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
23e40 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a  SetType()..**.**
23e50 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73   Perhaps the mos
23e60 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e  t important poin
23e70 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65  t is the differe
23e80 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54  nce between MEMT
23e90 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20  YPE_HEAP.** and 
23ea0 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
23eb0 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61  E.  If an alloca
23ec0 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f  tion is MEMTYPE_
23ed0 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20  LOOKASIDE, that 
23ee0 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68  means.** it migh
23ef0 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  t have been allo
23f00 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  cated by lookasi
23f10 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61  de, except the a
23f20 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a  llocation was.**
23f30 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f   too large or lo
23f40 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65  okaside was alre
23f50 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73  ady full.  It is
23f60 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65   important to ve
23f70 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c  rify.** that all
23f80 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ocations that mi
23f90 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61  ght have been sa
23fa0 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61  tisfied by looka
23fb0 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  side are not.** 
23fc0 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e  passed back to n
23fd0 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
23fe0 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41  e() routines.  A
23ff0 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74  sserts such as t
24000 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62  he.** example ab
24010 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f  ove are placed o
24020 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  n the non-lookas
24030 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
24040 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  nes to verify.**
24050 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
24060 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  . .**.** All of 
24070 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f  this is no-op fo
24080 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62  r a production b
24090 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63  uild.  It only c
240a0 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61  omes into.** pla
240b0 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54  y when the SQLIT
240c0 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69  E_MEMDEBUG compi
240d0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
240e0 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  s used..*/.#ifde
240f0 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
24100 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
24110 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
24120 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
24130 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
24140 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  HasType(void*,u8
24150 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
24160 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76  MemdebugNoType(v
24170 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a  oid*,u8);.#else.
24180 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24190 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
241a0 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  X,Y)  /* no-op *
241b0 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  /.# define sqlit
241c0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
241d0 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69  e(X,Y)  1.# defi
241e0 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
241f0 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20  ugNoType(X,Y)   
24200 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65  1.#endif.#define
24210 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20   MEMTYPE_HEAP   
24220 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e      0x01  /* Gen
24230 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61  eral heap alloca
24240 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
24250 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
24260 44 45 20 20 30 78 30 32 20 20 2f 2a 20 4d 69 67  DE  0x02  /* Mig
24270 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f  ht have been loo
24280 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 20 2a 2f  kaside memory */
24290 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
242a0 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30 34  _SCRATCH    0x04
242b0 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c    /* Scratch all
242c0 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
242d0 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43  ine MEMTYPE_PCAC
242e0 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20  HE     0x08  /* 
242f0 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63  Page cache alloc
24300 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
24310 65 20 4d 45 4d 54 59 50 45 5f 44 42 20 20 20 20  e MEMTYPE_DB    
24320 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 55 73       0x10  /* Us
24330 65 73 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  es sqlite3DbMall
24340 6f 63 2c 20 6e 6f 74 20 73 71 6c 69 74 65 5f 6d  oc, not sqlite_m
24350 61 6c 6c 6f 63 20 2a 2f 0a 0a 23 65 6e 64 69 66  alloc */..#endif
24360 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48   /* _SQLITEINT_H
24370 5f 20 2a 2f 0a                                   _ */.