/ Hex Artifact Content
Login

Artifact 46fb17f604ce941551fe64c342dbeb4dbed3edaa:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74  .** Similar is t
0540: 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  rue for Mac OS X
0550: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
0560: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20  upported on Mac 
0570: 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72  OS X 9 and later
0580: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
0590: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
05a0: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f  # define _LARGE_
05b0: 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69  FILE       1.# i
05c0: 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53  fndef _FILE_OFFS
05d0: 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69  ET_BITS.#   defi
05e0: 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ne _FILE_OFFSET_
05f0: 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a  BITS 64.# endif.
0600: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0610: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0620: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75  dif../*.** Inclu
0630: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  de the configura
0640: 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70  tion header outp
0650: 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65  ut by 'configure
0660: 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67  ' if we're using
0670: 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66   the.** autoconf
0680: 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a  -based build.*/.
0690: 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c  #ifdef _HAVE_SQL
06a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e  ITE_CONFIG_H.#in
06b0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22  clude "config.h"
06c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
06d0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
06e0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
06f0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
0700: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
0710: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
0720: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
0730: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
0740: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
0750: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
0760: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
0770: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
0780: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
0790: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
07a0: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
07b0: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
07c0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
07d0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
07e0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
07f0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
0800: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
0810: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
0820: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
0830: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
0840: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
0850: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
0860: 2e 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f 47  .. */.#ifndef _G
0870: 4e 55 5f 53 4f 55 52 43 45 0a 23 20 64 65 66 69  NU_SOURCE.# defi
0880: 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ne _GNU_SOURCE.#
0890: 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
08a0: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
08b0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 42 53 44  && !defined(_BSD
08c0: 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e  _SOURCE).# defin
08d0: 65 20 5f 42 53 44 5f 53 4f 55 52 43 45 0a 23 65  e _BSD_SOURCE.#e
08e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
08f0: 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65 61  ude standard hea
0900: 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65 63  der files as nec
0910: 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66  essary.*/.#ifdef
0920: 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23   HAVE_STDINT_H.#
0930: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e  include <stdint.
0940: 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  h>.#endif.#ifdef
0950: 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f 48   HAVE_INTTYPES_H
0960: 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79  .#include <intty
0970: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  pes.h>.#endif../
0980: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
0990: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
09a0: 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74  ed to cast point
09b0: 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20  ers to integers 
09c0: 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20  and.** integers 
09d0: 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68  to pointers.  Th
09e0: 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69  e way you do thi
09f0: 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e  s varies from on
0a00: 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  e compiler.** to
0a10: 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65   the next, so we
0a20: 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20   have developed 
0a30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  the following se
0a40: 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65  t of #if stateme
0a50: 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61  nts.** to genera
0a60: 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d  te appropriate m
0a70: 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65  acros for a wide
0a80: 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c   range of compil
0a90: 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ers..**.** The c
0aa0: 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77 61  orrect "ANSI" wa
0ab0: 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20  y to do this is 
0ac0: 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70 74  to use the intpt
0ad0: 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55 6e  r_t type. .** Un
0ae0: 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68 61  fortunately, tha
0af0: 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f 74  t typedef is not
0b00: 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c   available on al
0b10: 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a  l compilers, or.
0b20: 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61 69  ** if it is avai
0b30: 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69 72  lable, it requir
0b40: 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f  es an #include o
0b50: 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64 65  f specific heade
0b60: 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79 20  rs.** that vary 
0b70: 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65  from one machine
0b80: 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a   to the next..**
0b90: 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36 30  .** Ticket #3860
0ba0: 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d  :  The llvm-gcc-
0bb0: 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f  4.2 compiler fro
0bc0: 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f  m Apple chokes o
0bd0: 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64 2a  n.** the ((void*
0be0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0bf0: 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75 74   construct.  But
0c00: 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20   MSVC chokes on 
0c10: 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a  ((void*)(X))..**
0c20: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 64   So we have to d
0c30: 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f 73  efine the macros
0c40: 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77 61   in different wa
0c50: 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ys depending on 
0c60: 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e  the.** compiler.
0c70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0c80: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0c90: 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65 20  )  /* This case 
0ca0: 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20  should work for 
0cb0: 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  GCC */.# define 
0cc0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
0cd0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 5f  R(X)  ((void*)(_
0ce0: 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29  _PTRDIFF_TYPE__)
0cf0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
0d00: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
0d10: 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54 52  X)  ((int)(__PTR
0d20: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
0d30: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
0d40: 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20 20  __GNUC__)       
0d50: 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d  /* Works for com
0d60: 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68 61  pilers other tha
0d70: 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69  n LLVM */.# defi
0d80: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
0d90: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
0da0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0dc0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
0dd0: 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29 58  ((int)(((char*)X
0de0: 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65 6c  )-(char*)0)).#el
0df0: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f  if defined(HAVE_
0e00: 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55  STDINT_H)   /* U
0e10: 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66 20  se this case if 
0e20: 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65 61  we have ANSI hea
0e30: 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  ders */.# define
0e40: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0e50: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0e60: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 20  intptr_t)(X)).# 
0e70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0e80: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0e90: 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29  nt)(intptr_t)(X)
0ea0: 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20 20  ).#else         
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ec0: 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61 20   /* Generates a 
0ed0: 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69 74  warning - but it
0ee0: 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f   always works */
0ef0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0f00: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
0f10: 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20 64  ((void*)(X)).# d
0f20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
0f30: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
0f40: 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  t)(X)).#endif../
0f50: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
0f60: 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f  THREADSAFE macro
0f70: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
0f80: 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a   as 0, 1, or 2..
0f90: 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78  ** 0 means mutex
0fa0: 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74  es are permanent
0fb0: 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74  ly disable and t
0fc0: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65  he library is ne
0fd0: 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66  ver.** threadsaf
0fe0: 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20  e.  1 means the 
0ff0: 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61  library is seria
1000: 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74  lized which is t
1010: 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65  he highest.** le
1020: 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66  vel of threadsaf
1030: 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68  ety.  2 means th
1040: 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c  e library is mul
1050: 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c  tithreaded - mul
1060: 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73  tiple.** threads
1070: 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20   can use SQLite 
1080: 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77  as long as no tw
1090: 6f 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f  o threads try to
10a0: 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a   use the same.**
10b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
10c0: 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65  tion at the same
10d0: 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64   time..**.** Old
10e0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
10f0: 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70  QLite used an op
1100: 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46  tional THREADSAF
1110: 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73  E macro..** We s
1120: 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20  upport that for 
1130: 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21  legacy..*/.#if !
1140: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1150: 48 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20  HREADSAFE).# if 
1160: 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41  defined(THREADSA
1170: 46 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  FE).#   define S
1180: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
1190: 20 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c   THREADSAFE.# el
11a0: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
11b0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
11c0: 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37  1 /* IMP: R-0727
11d0: 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64  2-22309 */.# end
11e0: 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  if.#endif../*.**
11f0: 20 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77   Powersafe overw
1200: 72 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65  rite is on by de
1210: 66 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20  fault.  But can 
1220: 62 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73  be turned off us
1230: 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c  ing.** the -DSQL
1240: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1250: 45 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e  ERWRITE=0 comman
1260: 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a  d-line option..*
1270: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1280: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1290: 52 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51  RITE.# define SQ
12a0: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
12b0: 56 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69  VERWRITE 1.#endi
12c0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  f../*.** The SQL
12d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
12e0: 54 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73 74  TATUS macro must
12f0: 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 65   be defined as e
1300: 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a  ither 0 or 1..**
1310: 20 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20 77   It determines w
1320: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
1330: 65 20 66 65 61 74 75 72 65 73 20 72 65 6c 61 74  e features relat
1340: 65 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54 45  ed to .** SQLITE
1350: 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55  _CONFIG_MEMSTATU
1360: 53 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  S are available 
1370: 62 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e 6f  by default or no
1380: 74 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63 61  t. This value ca
1390: 6e 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64 64  n.** be overridd
13a0: 65 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  en at runtime us
13b0: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
13c0: 63 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a 2f  config() API..*/
13d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
13e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
13f0: 53 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65  STATUS).# define
1400: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
1410: 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64  MEMSTATUS 1.#end
1420: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c  if../*.** Exactl
1430: 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
1440: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75  lowing macros mu
1450: 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e  st be defined in
1460: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65   order to.** spe
1470: 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72  cify which memor
1480: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62  y allocation sub
1490: 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a  system to use..*
14a0: 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  *.**     SQLITE_
14b0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20  SYSTEM_MALLOC   
14c0: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f         // Use no
14d0: 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c  rmal system mall
14e0: 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49  oc().**     SQLI
14f0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20  TE_WIN32_MALLOC 
1500: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1510: 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65   Win32 native he
1520: 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51  ap API.**     SQ
1530: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55              // U
1550: 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63 61  se a stub alloca
1560: 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73 20  tor that always 
1570: 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c  fails.**     SQL
1580: 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20  ITE_MEMDEBUG    
1590: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65             // De
15a0: 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20  bugging version 
15b0: 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63  of system malloc
15c0: 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64  ().**.** On Wind
15d0: 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c 49  ows, if the SQLI
15e0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f  TE_WIN32_MALLOC_
15f0: 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20 69  VALIDATE macro i
1600: 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74 68  s defined and th
1610: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d 61  e.** assert() ma
1620: 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c 20  cro is enabled, 
1630: 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74  each call into t
1640: 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  he Win32 native 
1650: 68 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a 2a  heap subsystem.*
1660: 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65 61  * will cause Hea
1670: 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65 20  pValidate to be 
1680: 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61 70  called.  If heap
1690: 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75   validation shou
16a0: 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61  ld fail, an.** a
16b0: 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65  ssertion will be
16c0: 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a   triggered..**.*
16d0: 2a 20 28 48 69 73 74 6f 72 69 63 61 6c 20 6e 6f  * (Historical no
16e0: 74 65 3a 20 20 54 68 65 72 65 20 75 73 65 64 20  te:  There used 
16f0: 74 6f 20 62 65 20 73 65 76 65 72 61 6c 20 6f 74  to be several ot
1700: 68 65 72 20 6f 70 74 69 6f 6e 73 2c 20 62 75 74  her options, but
1710: 20 77 65 27 76 65 0a 2a 2a 20 70 61 72 65 64 20   we've.** pared 
1720: 69 74 20 64 6f 77 6e 20 74 6f 20 6a 75 73 74 20  it down to just 
1730: 74 68 65 73 65 20 74 68 72 65 65 2e 29 0a 2a 2a  these three.).**
1740: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
1750: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
1760: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
1770: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1780: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
1790: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
17a0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
17b0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
17c0: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
17d0: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
17e0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
17f0: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
1800: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
1810: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
1820: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
1830: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
1840: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
1850: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
1860: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
1870: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
1880: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
1890: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
18a0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
18b0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
18c0: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
18d0: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
18e0: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
18f0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1900: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1910: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
1920: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
1930: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
1940: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
1950: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
1960: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
1970: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
1980: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
1990: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
19a0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
19b0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
19c0: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
19d0: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
19e0: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
19f0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1a00: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
1a10: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
1a20: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
1a30: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
1a40: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
1a50: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
1a60: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
1a70: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
1a80: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
1a90: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
1aa0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
1ab0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
1ac0: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
1ad0: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
1ae0: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
1af0: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
1b00: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
1b10: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
1b20: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
1b30: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
1b40: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
1b50: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
1b60: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
1b70: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
1b80: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
1b90: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
1ba0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
1bb0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
1bc0: 2f 2a 0a 2a 2a 20 54 68 65 20 54 43 4c 20 68 65  /*.** The TCL he
1bd0: 61 64 65 72 73 20 61 72 65 20 6f 6e 6c 79 20 6e  aders are only n
1be0: 65 65 64 65 64 20 77 68 65 6e 20 63 6f 6d 70 69  eeded when compi
1bf0: 6c 69 6e 67 20 74 68 65 20 54 43 4c 20 62 69 6e  ling the TCL bin
1c00: 64 69 6e 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  dings..*/.#if de
1c10: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 43 4c  fined(SQLITE_TCL
1c20: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 54 43 4c  ) || defined(TCL
1c30: 53 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 74  SH).# include <t
1c40: 63 6c 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  cl.h>.#endif../*
1c50: 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53  .** NDEBUG and S
1c60: 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20  QLITE_DEBUG are 
1c70: 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73  opposites.  It s
1c80: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20  hould always be 
1c90: 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  true that.** def
1ca0: 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64  ined(NDEBUG)==!d
1cb0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1cc0: 42 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69  BUG).  If this i
1cd0: 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
1ce0: 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74  true,.** make it
1cf0: 20 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e   true by definin
1d00: 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20  g or undefining 
1d10: 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65  NDEBUG..**.** Se
1d20: 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b  tting NDEBUG mak
1d30: 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c  es the code smal
1d40: 6c 65 72 20 61 6e 64 20 72 75 6e 20 66 61 73 74  ler and run fast
1d50: 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20  er by disabling 
1d60: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 61 73  the.** number as
1d70: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
1d80: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20  s in the code.  
1d90: 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64  So we want the d
1da0: 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a  efault action.**
1db0: 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55   to be for NDEBU
1dc0: 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20  G to be set and 
1dd0: 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64  NDEBUG to be und
1de0: 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53  efined only if S
1df0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69  QLITE_DEBUG.** i
1e00: 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45  s set.  Thus NDE
1e10: 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f  BUG becomes an o
1e20: 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61  pt-in rather tha
1e30: 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20  n an opt-out.** 
1e40: 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20  feature..*/.#if 
1e50: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
1e60: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1e70: 49 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65  ITE_DEBUG) .# de
1e80: 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65  fine NDEBUG 1.#e
1e90: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
1ea0: 28 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69  (NDEBUG) && defi
1eb0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
1ec0: 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47  ).# undef NDEBUG
1ed0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
1ee0: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
1ef0: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61  cro is used to a
1f00: 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74  id in coverage t
1f10: 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a  esting.  When .*
1f20: 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  * doing coverage
1f30: 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f   testing, the co
1f40: 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74  ndition inside t
1f50: 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a  he argument to.*
1f60: 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73  * testcase() mus
1f70: 74 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62  t be evaluated b
1f80: 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c  oth true and fal
1f90: 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  se in order to.*
1fa0: 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63  * get full branc
1fb0: 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65  h coverage.  The
1fc0: 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72   testcase() macr
1fd0: 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a  o is inserted.**
1fe0: 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20   to help ensure 
1ff0: 61 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f  adequate test co
2000: 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73  verage in places
2010: 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a   where simple.**
2020: 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73   condition/decis
2030: 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20  ion coverage is 
2040: 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72  inadequate.  For
2050: 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61   example, testca
2060: 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75  se().** can be u
2070: 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  sed to make sure
2080: 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73   boundary values
2090: 20 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f   are tested.  Fo
20a0: 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73  r.** bitmask tes
20b0: 74 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63  ts, testcase() c
20c0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61  an be used to ma
20d0: 6b 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74  ke sure each bit
20e0: 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61  .** is significa
20f0: 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c  nt and used at l
2100: 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73  east once.  On s
2110: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73  witch statements
2120: 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70  .** where multip
2130: 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74  le cases go to t
2140: 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66  he same block of
2150: 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28   code, testcase(
2160: 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20  ).** can insure 
2170: 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61  that all cases a
2180: 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a  re evaluated..**
2190: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
21a0: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a  E_COVERAGE_TEST.
21b0: 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
21c0: 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64  verage(int);.# d
21d0: 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58  efine testcase(X
21e0: 29 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69  )  if( X ){ sqli
21f0: 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49  te3Coverage(__LI
2200: 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23  NE__); }.#else.#
2210: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
2220: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2230: 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d  * The TESTONLY m
2240: 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20  acro is used to 
2250: 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65  enclose variable
2260: 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72   declarations or
2270: 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f  .** other bits o
2280: 66 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20  f code that are 
2290: 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72  needed to suppor
22a0: 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a  t the arguments.
22b0: 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61  ** within testca
22c0: 73 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28  se() and assert(
22d0: 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66  ) macros..*/.#if
22e0: 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47   !defined(NDEBUG
22f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
2300: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
2310: 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  T).# define TEST
2320: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
2330: 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e  .# define TESTON
2340: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
2350: 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65  .** Sometimes we
2360: 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d   need a small am
2370: 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63  ount of code suc
2380: 68 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20  h as a variable 
2390: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a  initialization.*
23a0: 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61  * to setup for a
23b0: 20 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20   later assert() 
23c0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64  statement.  We d
23d0: 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20  o not want this 
23e0: 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61  code to.** appea
23f0: 72 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20  r when assert() 
2400: 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68  is disabled.  Th
2410: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
2420: 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a  o is therefore.*
2430: 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69  * used to contai
2440: 6e 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64  n that setup cod
2450: 65 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63  e.  The "VVA" ac
2460: 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72  ronym stands for
2470: 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f  .** "Verificatio
2480: 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61  n, Validation, a
2490: 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e  nd Accreditation
24a0: 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  ".  In other wor
24b0: 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20  ds, the.** code 
24c0: 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28  within VVA_ONLY(
24d0: 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20  ) will only run 
24e0: 64 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74  during verificat
24f0: 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a  ion processes..*
2500: 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  /.#ifndef NDEBUG
2510: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
2520: 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23  LY(X)  X.#else.#
2530: 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59   define VVA_ONLY
2540: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2550: 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64  * The ALWAYS and
2560: 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75   NEVER macros su
2570: 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65  rround boolean e
2580: 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68  xpressions which
2590: 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65   .** are intende
25a0: 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74  d to always be t
25b0: 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65  rue or false, re
25c0: 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63  spectively.  Suc
25d0: 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73  h.** expressions
25e0: 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65   could be omitte
25f0: 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20  d from the code 
2600: 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74  completely.  But
2610: 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63   they.** are inc
2620: 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63  luded in a few c
2630: 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  ases in order to
2640: 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73   enhance the res
2650: 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51  ilience.** of SQ
2660: 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74  Lite to unexpect
2670: 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f  ed behavior - to
2680: 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22   make the code "
2690: 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a  self-healing".**
26a0: 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61   or "ductile" ra
26b0: 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20  ther than being 
26c0: 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72  "brittle" and cr
26d0: 61 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69  ashing at the fi
26e0: 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75  rst.** hint of u
26f0: 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f  nplanned behavio
2700: 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65  r..**.** In othe
2710: 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20  r words, ALWAYS 
2720: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64  and NEVER are ad
2730: 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76  ded for defensiv
2740: 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  e code..**.** Wh
2750: 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67  en doing coverag
2760: 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53  e testing ALWAYS
2770: 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68   and NEVER are h
2780: 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20  ard-coded to.** 
2790: 62 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  be true and fals
27a0: 65 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e  e so that the un
27b0: 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74  reachable code t
27c0: 68 65 6e 20 73 70 65 63 69 66 79 20 77 69 6c 6c  hen specify will
27d0: 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74  .** not be count
27e0: 65 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63  ed as untested c
27f0: 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ode..*/.#if defi
2800: 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52  ned(SQLITE_COVER
2810: 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69  AGE_TEST).# defi
2820: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
2830: 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e    (1).# define N
2840: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30  EVER(X)       (0
2850: 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
2860: 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  (NDEBUG).# defin
2870: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
2880: 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28   ((X)?1:(assert(
2890: 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0),0)).# define 
28a0: 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28  NEVER(X)       (
28b0: 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31  (X)?(assert(0),1
28c0: 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ):0).#else.# def
28d0: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
28e0: 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20     (X).# define 
28f0: 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28  NEVER(X)       (
2900: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2910: 20 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f   Return true (no
2920: 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69  n-zero) if the i
2930: 6e 70 75 74 20 69 73 20 61 20 69 6e 74 65 67 65  nput is a intege
2940: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
2950: 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e  rge.** to fit in
2960: 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20   32-bits.  This 
2970: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
2980: 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20  side of various 
2990: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61  testcase().** ma
29a0: 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74  cros to verify t
29b0: 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74  hat we have test
29c0: 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61  ed SQLite for la
29d0: 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74  rge-file support
29e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f  ..*/.#define IS_
29f0: 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58  BIG_INT(X)  (((X
2a00: 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66  )&~(i64)0xffffff
2a10: 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  ff)!=0)../*.** T
2a20: 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c  he macro unlikel
2a30: 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68  y() is a hint th
2a40: 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62  at surrounds a b
2a50: 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73  oolean.** expres
2a60: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75  sion that is usu
2a70: 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63  ally false.  Mac
2a80: 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72  ro likely() surr
2a90: 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65  ounds.** a boole
2aa0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
2ab0: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
2ac0: 75 65 2e 20 20 47 43 43 20 69 73 20 61 62 6c 65  ue.  GCC is able
2ad0: 20 74 6f 0a 2a 2a 20 75 73 65 20 74 68 65 73 65   to.** use these
2ae0: 20 68 69 6e 74 73 20 74 6f 20 67 65 6e 65 72 61   hints to genera
2af0: 74 65 20 62 65 74 74 65 72 20 63 6f 64 65 2c 20  te better code, 
2b00: 73 6f 6d 65 74 69 6d 65 73 2e 0a 2a 2f 0a 23 69  sometimes..*/.#i
2b10: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
2b20: 5f 5f 29 20 26 26 20 30 0a 23 20 64 65 66 69 6e  __) && 0.# defin
2b30: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 5f  e likely(X)    _
2b40: 5f 62 75 69 6c 74 69 6e 5f 65 78 70 65 63 74 28  _builtin_expect(
2b50: 28 58 29 2c 31 29 0a 23 20 64 65 66 69 6e 65 20  (X),1).# define 
2b60: 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 5f 5f 62  unlikely(X)  __b
2b70: 75 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28 58  uiltin_expect((X
2b80: 29 2c 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ),0).#else.# def
2b90: 69 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20  ine likely(X)   
2ba0: 20 21 21 28 58 29 0a 23 20 64 65 66 69 6e 65 20   !!(X).# define 
2bb0: 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 21 21 28  unlikely(X)  !!(
2bc0: 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c  X).#endif..#incl
2bd0: 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a  ude "sqlite3.h".
2be0: 23 69 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68  #include "hash.h
2bf0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73  ".#include "pars
2c00: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73  e.h".#include <s
2c10: 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  tdio.h>.#include
2c20: 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63   <stdlib.h>.#inc
2c30: 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a  lude <string.h>.
2c40: 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74  #include <assert
2c50: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
2c60: 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49  ddef.h>../*.** I
2c70: 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20  f compiling for 
2c80: 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61 74  a processor that
2c90: 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20   lacks floating 
2ca0: 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a  point support,.*
2cb0: 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e 74  * substitute int
2cc0: 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e  eger for floatin
2cd0: 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65  g-point.*/.#ifde
2ce0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
2cf0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64  OATING_POINT.# d
2d00: 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c  efine double sql
2d10: 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69  ite_int64.# defi
2d20: 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f  ne float sqlite_
2d30: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 4c  int64.# define L
2d40: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73  ONGDOUBLE_TYPE s
2d50: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69 66  qlite_int64.# if
2d60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f  ndef SQLITE_BIG_
2d70: 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20 53  DBL.#   define S
2d80: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 28  QLITE_BIG_DBL ((
2d90: 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 31  (sqlite3_int64)1
2da0: 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a 23  )<<50).# endif.#
2db0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f   define SQLITE_O
2dc0: 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e  MIT_DATETIME_FUN
2dd0: 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  CS 1.# define SQ
2de0: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20  LITE_OMIT_TRACE 
2df0: 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  1.# undef SQLITE
2e00: 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34  _MIXED_ENDIAN_64
2e10: 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65  BIT_FLOAT.# unde
2e20: 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53  f SQLITE_HAVE_IS
2e30: 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  NAN.#endif.#ifnd
2e40: 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ef SQLITE_BIG_DB
2e50: 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  L.# define SQLIT
2e60: 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39 29  E_BIG_DBL (1e99)
2e70: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
2e80: 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73 65  MIT_TEMPDB is se
2e90: 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54 45  t to 1 if SQLITE
2ea0: 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20  _OMIT_TEMPDB is 
2eb0: 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a  defined, or 0.**
2ec0: 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76 69   afterward. Havi
2ed0: 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61 6c  ng this macro al
2ee0: 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73 65  lows us to cause
2ef0: 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72 20   the C compiler 
2f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
2f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
2f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
2f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
2f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
2f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
2f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
2f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
2f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
2f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
2fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
2fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
2fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
2fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
2fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
2ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
3000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
3010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
3020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
3030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
3040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
3050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
3060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
3070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
3080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
3090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
30a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
30b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
30c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
30d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
30e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
30f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
3100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
3110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
3120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
3130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
3140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
3150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
3160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
3170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
3180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
3190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
31a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
31b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
31c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
31d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
31e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
31f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
3200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
3220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
3230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
3240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
3250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 20  _TEMP_STORE 1.# 
3280: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45  define SQLITE_TE
3290: 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20 20 2f  MP_STORE_xc 1  /
32a0: 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63  * Exclude from c
32b0: 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66  time.c */.#endif
32c0: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
32d0: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
32e0: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
32f0: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
3300: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
3310: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
3320: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
3330: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
3340: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
3350: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
3360: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
3370: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
3380: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
3390: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
33a0: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
33b0: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
33c0: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
33d0: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
33e0: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
33f0: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
3400: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
3410: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
3420: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
3430: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
3440: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
3450: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
3460: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
3470: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
3480: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
3490: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
34a0: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
34b0: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
34c0: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
34d0: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
34e0: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
34f0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
3500: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
3510: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
3520: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
3530: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
3540: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
3550: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
3560: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
3570: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
3580: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
3590: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
35a0: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
35b0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
35c0: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
35d0: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
35e0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
35f0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
3600: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
3610: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
3620: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
3630: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3640: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
3650: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
3660: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3670: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
3680: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
3690: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
36a0: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
36b0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
36c0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
36d0: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
36e0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
36f0: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
3700: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
3710: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
3720: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
3730: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
3740: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
3750: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
3760: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
3770: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
3780: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
3790: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
37a0: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
37b0: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
37c0: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
37d0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
37e0: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
37f0: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
3800: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
3810: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
3820: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
3830: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
3840: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
3850: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
3860: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
3870: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
3880: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
3890: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
38a0: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
38b0: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
38c0: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
38d0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
38e0: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
38f0: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
3900: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
3910: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3920: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
3930: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
3940: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
3950: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3960: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
3970: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
3980: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
3990: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
39a0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
39b0: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
39c0: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
39d0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
39e0: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
39f0: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
3a00: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
3a10: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
3a20: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
3a30: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
3a40: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
3a50: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
3a60: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
3a70: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
3a80: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
3a90: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
3aa0: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
3ab0: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
3ac0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
3ad0: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
3ae0: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
3af0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
3b00: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
3b10: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
3b20: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
3b30: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
3b40: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
3b50: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
3b60: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
3b70: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
3b80: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
3b90: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
3ba0: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
3bb0: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
3bc0: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
3bd0: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
3be0: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
3bf0: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
3c00: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
3c10: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
3c20: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
3c30: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
3c40: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
3c50: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
3c60: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
3c70: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
3c80: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
3c90: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
3ca0: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
3cb0: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
3cc0: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
3cd0: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
3ce0: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20   the machine is 
3cf0: 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e  big or little en
3d00: 64 69 61 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61 74  dian,.** evaluat
3d10: 65 64 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a  ed at runtime..*
3d20: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
3d30: 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e  AMALGAMATION.con
3d40: 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e  st int sqlite3on
3d50: 65 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74  e = 1;.#else.ext
3d60: 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71  ern const int sq
3d70: 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66  lite3one;.#endif
3d80: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 69 33 38  .#if defined(i38
3d90: 36 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  6) || defined(__
3da0: 69 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e  i386__) || defin
3db0: 65 64 28 5f 4d 5f 49 58 38 36 29 5c 0a 20 20 20  ed(_M_IX86)\.   
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dd0: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 64 65 66            || def
3de0: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c  ined(__x86_64) |
3df0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f  | defined(__x86_
3e00: 36 34 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53  64__).# define S
3e10: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
3e20: 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51     0.# define SQ
3e30: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
3e40: 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 1.# define SQL
3e50: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
3e60: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a   SQLITE_UTF16LE.
3e70: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
3e80: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
3e90: 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73     (*(char *)(&s
3ea0: 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23  qlite3one)==0).#
3eb0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c   define SQLITE_L
3ec0: 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63  ITTLEENDIAN (*(c
3ed0: 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f  har *)(&sqlite3o
3ee0: 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65  ne)==1).# define
3ef0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
3f00: 49 56 45 20 28 53 51 4c 49 54 45 5f 42 49 47 45  IVE (SQLITE_BIGE
3f10: 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46  NDIAN?SQLITE_UTF
3f20: 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31  16BE:SQLITE_UTF1
3f30: 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  6LE).#endif../*.
3f40: 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72  ** Constants for
3f50: 20 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64   the largest and
3f60: 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62   smallest possib
3f70: 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  le 64-bit signed
3f80: 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68   integers..** Th
3f90: 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64  ese macros are d
3fa0: 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20  esigned to work 
3fb0: 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74  correctly on bot
3fc0: 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d  h 32-bit and 64-
3fd0: 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73  bit.** compilers
3fe0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52  ..*/.#define LAR
3ff0: 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66  GEST_INT64  (0xf
4000: 66 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30  fffffff|(((i64)0
4010: 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29  x7fffffff)<<32))
4020: 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53  .#define SMALLES
4030: 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d  T_INT64 (((i64)-
4040: 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54  1) - LARGEST_INT
4050: 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e  64)../* .** Roun
4060: 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f  d up a number to
4070: 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72   the next larger
4080: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20   multiple of 8. 
4090: 20 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a   This is used.**
40a0: 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65   to force 8-byte
40b0: 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34   alignment on 64
40c0: 2d 62 69 74 20 61 72 63 68 69 74 65 63 74 75 72  -bit architectur
40d0: 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  es..*/.#define R
40e0: 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28 28 28  OUND8(x)     (((
40f0: 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a  x)+7)&~7)../*.**
4100: 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74   Round down to t
4110: 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69  he nearest multi
4120: 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66  ple of 8.*/.#def
4130: 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78  ine ROUNDDOWN8(x
4140: 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a  ) ((x)&~7)../*.*
4150: 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
4160: 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61  e pointer X is a
4170: 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62  ligned to an 8-b
4180: 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54  yte boundary.  T
4190: 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20  his.** macro is 
41a0: 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e  used only within
41b0: 20 61 73 73 65 72 74 28 29 20 74 6f 20 76 65 72   assert() to ver
41c0: 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 64  ify that the cod
41d0: 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c  e gets.** all al
41e0: 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74  ignment restrict
41f0: 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a  ions correct..**
4200: 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53  .** Except, if S
4210: 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49  QLITE_4_BYTE_ALI
4220: 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64  GNED_MALLOC is d
4230: 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65  efined, then the
4240: 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d  .** underlying m
4250: 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e  alloc() implemen
4260: 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72  tion might retur
4270: 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67  n us 4-byte alig
4280: 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e  ned.** pointers.
4290: 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20    In that case, 
42a0: 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79  only verify 4-by
42b0: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f  te alignment..*/
42c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34  .#ifdef SQLITE_4
42d0: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
42e0: 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49  LLOC.# define EI
42f0: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
4300: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
4310: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
4320: 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  )&3)==0).#else.#
4330: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
4340: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
4350: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
4360: 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d  - (char*)0)&7)==
4370: 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0).#endif../*.**
4380: 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e   Disable MMAP on
4390: 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65   platforms where
43a0: 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20   it is known to 
43b0: 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20  not work.*/.#if 
43c0: 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53  defined(__OpenBS
43d0: 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D__) || defined(
43e0: 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e  __QNXNTO__).# un
43f0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
4400: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
4410: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
4420: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
4430: 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d  ./*.** Default m
4440: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d  aximum size of m
4450: 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65  emory used by me
4460: 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20  mory-mapped I/O 
4470: 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69  in the VFS.*/.#i
4480: 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23  fdef __APPLE__.#
4490: 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74   include <Target
44a0: 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a  Conditionals.h>.
44b0: 23 20 69 66 20 54 41 52 47 45 54 5f 4f 53 5f 49  # if TARGET_OS_I
44c0: 50 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65 66 20  PHONE.#   undef 
44d0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
44e0: 53 49 5a 45 0a 23 20 20 20 64 65 66 69 6e 65 20  SIZE.#   define 
44f0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
4500: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
4510: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
4520: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
4530: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
4540: 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c  __linux__) \.  |
4550: 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32  | defined(_WIN32
4560: 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65  ) \.  || (define
4570: 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20  d(__APPLE__) && 
4580: 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f  defined(__MACH__
4590: 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  )) \.  || define
45a0: 64 28 5f 5f 73 75 6e 29 0a 23 20 20 20 64 65 66  d(__sun).#   def
45b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
45c0: 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30  MAP_SIZE 0x7fff0
45d0: 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31  000  /* 21474181
45e0: 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20  12 */.# else.#  
45f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4600: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
4610: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
4620: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
4630: 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65 78 63  SIZE_xc 1 /* exc
4640: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
4650: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  c */.#endif../*.
4660: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 4d  ** The default M
4670: 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f  MAP_SIZE is zero
4680: 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d   on all platform
4690: 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66 20  s.  Or, even if 
46a0: 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66 61  a larger.** defa
46b0: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
46c0: 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63 6f   specified at co
46d0: 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65  mpile-time, make
46e0: 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64 6f   sure that it do
46f0: 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64  es.** not exceed
4700: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61   the maximum mma
4710: 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64  p size..*/.#ifnd
4720: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
4730: 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65  T_MMAP_SIZE.# de
4740: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
4750: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  ULT_MMAP_SIZE 0.
4760: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4770: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
4780: 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75  E_xc 1  /* Exclu
4790: 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20  de from ctime.c 
47a0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51  */.#endif.#if SQ
47b0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
47c0: 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41  P_SIZE>SQLITE_MA
47d0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e  X_MMAP_SIZE.# un
47e0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
47f0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
4800: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
4810: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53  AULT_MMAP_SIZE S
4820: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4830: 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  IZE.#endif../*.*
4840: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
4850: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
4860: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
4870: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
4880: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
4890: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
48a0: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
48b0: 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  . .**.** The sql
48c0: 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20  ite.busyHandler 
48d0: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71  member of the sq
48e0: 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74  lite struct cont
48f0: 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a  ains the busy.**
4900: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68   callback for th
4910: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
4920: 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70  e. Each pager op
4930: 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c  ened via the sql
4940: 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73  ite.** handle is
4950: 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65   passed a pointe
4960: 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79  r to sqlite.busy
4970: 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73  Handler. The bus
4980: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
4990: 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74  lback is current
49a0: 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20  ly invoked only 
49b0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65  from within page
49c0: 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  r.c..*/.typedef 
49d0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
49e0: 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a  er BusyHandler;.
49f0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
4a00: 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75  er {.  int (*xFu
4a10: 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b  nc)(void *,int);
4a20: 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61    /* The busy ca
4a30: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
4a40: 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20   *pArg;         
4a50: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
4a60: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
4a70: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
4a80: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
4a90: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
4aa0: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
4ab0: 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f  sy call */.};../
4ac0: 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  *.** Name of the
4ad0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
4ae0: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73   table.  The mas
4af0: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
4b00: 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69  le.** is a speci
4b10: 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f  al table that ho
4b20: 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e  lds the names an
4b30: 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  d attributes of 
4b40: 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c  all.** user tabl
4b50: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a  es and indices..
4b60: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
4b70: 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71  R_NAME       "sq
4b80: 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65  lite_master".#de
4b90: 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52  fine TEMP_MASTER
4ba0: 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74  _NAME  "sqlite_t
4bb0: 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a  emp_master"../*.
4bc0: 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65  ** The root-page
4bd0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
4be0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a  atabase table..*
4bf0: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
4c00: 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f  _ROOT       1../
4c10: 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66  *.** The name of
4c20: 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c   the schema tabl
4c30: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
4c40: 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28  HEMA_TABLE(x)  (
4c50: 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26  (!OMIT_TEMPDB)&&
4c60: 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54  (x==1)?TEMP_MAST
4c70: 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e  ER_NAME:MASTER_N
4c80: 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f  AME)../*.** A co
4c90: 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20  nvenience macro 
4ca0: 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65  that returns the
4cb0: 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   number of eleme
4cc0: 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72  nts in.** an arr
4cd0: 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41  ay..*/.#define A
4ce0: 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28  rraySize(X)    (
4cf0: 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f  (int)(sizeof(X)/
4d00: 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a  sizeof(X[0])))..
4d10: 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20  /*.** Determine 
4d20: 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
4d30: 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  is a power of tw
4d40: 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  o.*/.#define IsP
4d50: 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28  owerOfTwo(X) (((
4d60: 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a  X)&((X)-1))==0).
4d70: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
4d80: 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20  wing value as a 
4d90: 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73  destructor means
4da0: 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44   to use sqlite3D
4db0: 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20  bFree()..** The 
4dc0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
4dd0: 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73  routine requires
4de0: 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20   two parameters 
4df0: 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a  instead of the .
4e00: 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72  ** one parameter
4e10: 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72   that destructor
4e20: 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e  s normally want.
4e30: 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20    So we have to 
4e40: 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68  introduce .** th
4e50: 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74  is magic value t
4e60: 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f  hat the code kno
4e70: 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66  ws to handle dif
4e80: 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a  ferently.  Any .
4e90: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
4ea0: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
4eb0: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
4ec0: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
4ed0: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
4ee0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
4ef0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
4f00: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
4f10: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
4f20: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
4f30: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
4f40: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
4f50: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
4f60: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
4f70: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
4f80: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
4f90: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
4fa0: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
4fb0: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
4fc0: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
4fd0: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
4fe0: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
4ff0: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
5000: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
5010: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
5020: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
5030: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
5040: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
5050: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
5060: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
5070: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
5080: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
5090: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
50a0: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
50b0: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
50c0: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
50d0: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
50e0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
50f0: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
5100: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
5110: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
5120: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
5130: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
5140: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
5150: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
5160: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
5170: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
5180: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
5190: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
51a0: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
51b0: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
51c0: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
51d0: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
51e0: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
51f0: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
5200: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
5210: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
5220: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
5230: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
5240: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
5250: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
5260: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
5270: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
5280: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
5290: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
52a0: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
52b0: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
52c0: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
52d0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
52e0: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
52f0: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
5300: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
5310: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
5320: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
5330: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
5340: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
5350: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
5360: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
5370: 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20  _WSD .  #define 
5380: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20  GLOBAL(t,v) v.  
5390: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47  #define sqlite3G
53a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69  lobalConfig sqli
53b0: 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66  te3Config.#endif
53c0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
53d0: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65  owing macros are
53e0: 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73   used to suppres
53f0: 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  s compiler warni
5400: 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61  ngs and to.** ma
5410: 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68  ke it clear to h
5420: 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65  uman readers whe
5430: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
5440: 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65  ameter is delibe
5450: 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20  rately .** left 
5460: 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68  unused within th
5470: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
5480: 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c  tion. This usual
5490: 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a  ly happens when.
54a0: 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73  ** a function is
54b0: 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75   called via a fu
54c0: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20  nction pointer. 
54d0: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20  For example the 
54e0: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
54f0: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
5500: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
5510: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
5520: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
5530: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
5540: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
5550: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
5560: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
5570: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
5580: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
5590: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
55a0: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
55b0: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
55c0: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
55d0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
55e0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
55f0: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
5600: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
5610: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
5620: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
5630: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
5640: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
5650: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
5660: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
5670: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
5680: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
5690: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
56a0: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
56b0: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
56c0: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
56d0: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
56e0: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
56f0: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
5700: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
5710: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
5720: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
5730: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
5740: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
5750: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
5760: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
5770: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
5780: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
5790: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
57a0: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
57b0: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
57c0: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
57d0: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
57e0: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
57f0: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
5800: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
5810: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
5820: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
5830: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
5840: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5850: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
5860: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
5870: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
5880: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
5890: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
58a0: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
58b0: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
58c0: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
58d0: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
58e0: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
58f0: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
5900: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
5910: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
5920: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
5930: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
5940: 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78  ruct ExprSpan Ex
5950: 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20  prSpan;.typedef 
5960: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
5970: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5980: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
5990: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a  FuncDestructor;.
59a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
59b0: 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a  uncDef FuncDef;.
59c0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
59d0: 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44  uncDefHash FuncD
59e0: 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20  efHash;.typedef 
59f0: 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64  struct IdList Id
5a00: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
5a10: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
5a20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5a30: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64   IndexSample Ind
5a40: 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65  exSample;.typede
5a50: 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73  f struct KeyClas
5a60: 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65  s KeyClass;.type
5a70: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e  def struct KeyIn
5a80: 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65  fo KeyInfo;.type
5a90: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
5aa0: 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a  side Lookaside;.
5ab0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
5ac0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f  ookasideSlot Loo
5ad0: 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65  kasideSlot;.type
5ae0: 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c  def struct Modul
5af0: 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65  e Module;.typede
5b00: 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  f struct NameCon
5b10: 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  text NameContext
5b20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5b30: 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79   Parse Parse;.ty
5b40: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
5b50: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
5b60: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
5b70: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
5b80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
5b90: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
5ba0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c  pedef struct Sel
5bb0: 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65  ectDest SelectDe
5bc0: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
5bd0: 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69  ct SrcList SrcLi
5be0: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
5bf0: 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41  ct StrAccum StrA
5c00: 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74  ccum;.typedef st
5c10: 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65  ruct Table Table
5c20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5c30: 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65   TableLock Table
5c40: 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74  Lock;.typedef st
5c50: 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e  ruct Token Token
5c60: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5c70: 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72   Trigger Trigger
5c80: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5c90: 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67   TriggerPrg Trig
5ca0: 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20  gerPrg;.typedef 
5cb0: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
5cc0: 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a  ep TriggerStep;.
5cd0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55  typedef struct U
5ce0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e  npackedRecord Un
5cf0: 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79  packedRecord;.ty
5d00: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61  pedef struct VTa
5d10: 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65  ble VTable;.type
5d20: 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43  def struct VtabC
5d30: 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65  tx VtabCtx;.type
5d40: 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65  def struct Walke
5d50: 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65  r Walker;.typede
5d60: 66 20 73 74 72 75 63 74 20 57 68 65 72 65 50 6c  f struct WherePl
5d70: 61 6e 20 57 68 65 72 65 50 6c 61 6e 3b 0a 74 79  an WherePlan;.ty
5d80: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65  pedef struct Whe
5d90: 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f  reInfo WhereInfo
5da0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5db0: 20 57 68 65 72 65 4c 65 76 65 6c 20 57 68 65 72   WhereLevel Wher
5dc0: 65 4c 65 76 65 6c 3b 0a 0a 2f 2a 0a 2a 2a 20 44  eLevel;../*.** D
5dd0: 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64  efer sourcing vd
5de0: 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68  be.h and btree.h
5df0: 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65   until after the
5e00: 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42   "u8" and .** "B
5e10: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
5e20: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
5e30: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
5e40: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
5e50: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
5e60: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
5e70: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
5e80: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
5e90: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
5ea0: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
5eb0: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
5ec0: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69  e "pcache.h"..#i
5ed0: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
5ee0: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
5ef0: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
5f00: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
5f10: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
5f20: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
5f30: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
5f40: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
5f50: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
5f60: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
5f70: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
5f80: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
5f90: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
5fa0: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
5fb0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
5fc0: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
5fd0: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
5fe0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
5ff0: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
6000: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
6010: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
6020: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
6030: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
6040: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
6050: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
6060: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
6070: 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
6080: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42          /* The B
6090: 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  *Tree structure 
60a0: 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73  for this databas
60b0: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73  e file */.  u8 s
60c0: 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20  afety_level;    
60d0: 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69   /* How aggressi
60e0: 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61  ve at syncing da
60f0: 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20  ta to disk */.  
6100: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
6110: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
6120: 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65  to database sche
6130: 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61  ma (possibly sha
6140: 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  red) */.};../*.*
6150: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
6160: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
6170: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
6180: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
6190: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
61a0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
61b0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
61c0: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
61d0: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
61e0: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
61f0: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
6200: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
6210: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
6220: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
6230: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
6240: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
6250: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
6260: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
6270: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
6280: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
6290: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
62a0: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
62b0: 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62  ** .** Schema ob
62c0: 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61  jects are automa
62d0: 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61  tically dealloca
62e0: 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73  ted when the las
62f0: 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20  t Btree that.** 
6300: 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20  references them 
6310: 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20  is destroyed.   
6320: 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20  The TEMP Schema 
6330: 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65  is manually free
6340: 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  d by.** sqlite3_
6350: 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20  close()..*.** A 
6360: 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68  thread must be h
6370: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
6380: 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  n the correspond
6390: 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64  ing Btree in ord
63a0: 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20  er.** to access 
63b0: 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20  Schema content. 
63c0: 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68   This implies th
63d0: 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75  at the thread mu
63e0: 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f  st also be.** ho
63f0: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
6400: 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e   the sqlite3 con
6410: 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  nection pointer 
6420: 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74  that owns the Bt
6430: 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45  ree..** For a TE
6440: 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20  MP Schema, only 
6450: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d  the connection m
6460: 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64  utex is required
6470: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65  ..*/.struct Sche
6480: 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d  ma {.  int schem
6490: 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44  a_cookie;   /* D
64a0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76  atabase schema v
64b0: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
64c0: 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20  r this file */. 
64d0: 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e   int iGeneration
64e0: 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74  ;     /* Generat
64f0: 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e  ion counter.  In
6500: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
6510: 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20  ach change */.  
6520: 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20  Hash tblHash;   
6530: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c       /* All tabl
6540: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
6550: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78  me */.  Hash idx
6560: 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  Hash;        /* 
6570: 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69  All (named) indi
6580: 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ces indexed by n
6590: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72  ame */.  Hash tr
65a0: 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  igHash;       /*
65b0: 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e   All triggers in
65c0: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
65d0: 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68  .  Hash fkeyHash
65e0: 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66  ;       /* All f
65f0: 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72  oreign keys by r
6600: 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20  eferenced table 
6610: 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  name */.  Table 
6620: 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f  *pSeqTab;      /
6630: 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71  * The sqlite_seq
6640: 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64  uence table used
6650: 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   by AUTOINCREMEN
6660: 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66  T */.  u8 file_f
6670: 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53  ormat;      /* S
6680: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72  chema format ver
6690: 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69  sion for this fi
66a0: 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  le */.  u8 enc; 
66b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
66c0: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73  Text encoding us
66d0: 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62  ed by this datab
66e0: 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ase */.  u16 fla
66f0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gs;           /*
6700: 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   Flags associate
6710: 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65  d with this sche
6720: 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68  ma */.  int cach
6730: 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20  e_size;      /* 
6740: 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
6750: 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61  to use in the ca
6760: 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  che */.};../*.**
6770: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
6780: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
6790: 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
67a0: 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a   bits in the .**
67b0: 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   Db.pSchema->fla
67c0: 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
67d0: 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72  fine DbHasProper
67e0: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28  ty(D,I,P)     ((
67f0: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
6800: 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  ema->flags&(P))=
6810: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
6820: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
6830: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
6840: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  b[I].pSchema->fl
6850: 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
6860: 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72  fine DbSetProper
6870: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44  ty(D,I,P)     (D
6880: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
6890: 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  a->flags|=(P).#d
68a0: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
68b0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
68c0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
68d0: 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  ma->flags&=~(P).
68e0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
68f0: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42  alues for the DB
6900: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
6910: 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  field..**.** The
6920: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
6930: 20 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74   flag is set aft
6940: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
6950: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a  schema has been.
6960: 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74  ** read into int
6970: 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65  ernal hash table
6980: 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65  s..**.** DB_Unre
6990: 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74  setViews means t
69a0: 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  hat one or more 
69b0: 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d  views have colum
69c0: 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20  n names that.** 
69d0: 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64  have been filled
69e0: 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63   out.  If the sc
69f0: 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68  hema changes, th
6a00: 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ese column names
6a10: 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65   might.** change
6a20: 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65  s and so the vie
6a30: 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62  w will need to b
6a40: 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  e reset..*/.#def
6a50: 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  ine DB_SchemaLoa
6a60: 64 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f  ded    0x0001  /
6a70: 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73  * The schema has
6a80: 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a   been loaded */.
6a90: 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73  #define DB_Unres
6aa0: 65 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30  etViews    0x000
6ab0: 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73  2  /* Some views
6ac0: 20 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f   have defined co
6ad0: 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  lumn names */.#d
6ae0: 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20  efine DB_Empty  
6af0: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20           0x0004 
6b00: 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20   /* The file is 
6b10: 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20  empty (length 0 
6b20: 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  bytes) */../*.**
6b30: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
6b40: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
6b50: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
6b60: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
6b70: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
6b80: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
6b90: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
6ba0: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
6bb0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49  SQLITE_LIMIT_TRI
6bc0: 47 47 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f  GGER_DEPTH+1)../
6bd0: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d  *.** Lookaside m
6be0: 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f  alloc is a set o
6bf0: 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66  f fixed-size buf
6c00: 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65  fers that can be
6c10: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69   used.** to sati
6c20: 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69  sfy small transi
6c30: 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ent memory alloc
6c40: 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66  ation requests f
6c50: 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73  or objects.** as
6c60: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
6c70: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
6c80: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
6c90: 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c   The use of.** l
6ca0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
6cb0: 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69  provides a signi
6cc0: 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e  ficant performan
6cd0: 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a  ce enhancement.*
6ce0: 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62  * (approx 10%) b
6cf0: 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72  y avoiding numer
6d00: 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20  ous malloc/free 
6d10: 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70  requests while p
6d20: 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74  arsing.** SQL st
6d30: 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
6d40: 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74  The Lookaside st
6d50: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f  ructure holds co
6d60: 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f  nfiguration info
6d70: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
6d80: 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  e.** lookaside m
6d90: 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e  alloc subsystem.
6da0: 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65    Each available
6db0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
6dc0: 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f  on in.** the loo
6dd0: 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d  kaside subsystem
6de0: 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20   is stored on a 
6df0: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c  linked list of L
6e00: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20  ookasideSlot.** 
6e10: 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c  objects..**.** L
6e20: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
6e30: 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c  ions are only al
6e40: 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74  lowed for object
6e50: 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63  s that are assoc
6e60: 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20  iated.** with a 
6e70: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
6e80: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
6e90: 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69   Hence, schema i
6ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f  nformation canno
6eb0: 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69  t.** be stored i
6ec0: 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61  n lookaside beca
6ed0: 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61  use in shared ca
6ee0: 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68  che mode the sch
6ef0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ema information.
6f00: 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20  ** is shared by 
6f10: 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
6f20: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20  e connections.  
6f30: 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65  Therefore, while
6f40: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65   parsing.** sche
6f50: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  ma information, 
6f60: 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45  the Lookaside.bE
6f70: 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63  nabled flag is c
6f80: 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a  leared so that.*
6f90: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * lookaside allo
6fa0: 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20  cations are not 
6fb0: 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63  used to construc
6fc0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a  t the schema obj
6fd0: 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ects..*/.struct 
6fe0: 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31  Lookaside {.  u1
6ff0: 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  6 sz;           
7000: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
7010: 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20   each buffer in 
7020: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45  bytes */.  u8 bE
7030: 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
7040: 20 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64     /* False to d
7050: 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61  isable new looka
7060: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
7070: 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63   */.  u8 bMalloc
7080: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
7090: 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20   True if pStart 
70a0: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
70b0: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a  lite3_malloc() *
70c0: 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20  /.  int nOut;   
70d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
70e0: 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73  umber of buffers
70f0: 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b   currently check
7100: 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  ed out */.  int 
7110: 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20  mxOut;          
7120: 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72      /* Highwater
7130: 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a   mark for nOut *
7140: 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33  /.  int anStat[3
7150: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
7160: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
7170: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
7180: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
7190: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72  okasideSlot *pFr
71a0: 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ee;   /* List of
71b0: 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65   available buffe
71c0: 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  rs */.  void *pS
71d0: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
71e0: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66  /* First byte of
71f0: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
7200: 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69  y space */.  voi
7210: 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  d *pEnd;        
7220: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
7230: 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61  te past end of a
7240: 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a  vailable space *
7250: 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  /.};.struct Look
7260: 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f  asideSlot {.  Lo
7270: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65  okasideSlot *pNe
7280: 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62  xt;    /* Next b
7290: 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73  uffer in the lis
72a0: 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72  t of free buffer
72b0: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
72c0: 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   hash table for 
72d0: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
72e0: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68  ions..**.** Hash
72f0: 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74   each FuncDef st
7300: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65  ructure into one
7310: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48   of the FuncDefH
7320: 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a  ash.a[] slots..*
7330: 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65  * Collisions are
7340: 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e   on the FuncDef.
7350: 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a  pHash chain..*/.
7360: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
7370: 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  sh {.  FuncDef *
7380: 61 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20  a[23];       /* 
7390: 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  Hash table for f
73a0: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
73b0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
73c0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
73d0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
73e0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
73f0: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
7400: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
7410: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
7420: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
7430: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
7440: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
7450: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
7460: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
7470: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
7480: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
7490: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
74a0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
74b0: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
74c0: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
74d0: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
74e0: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
74f0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
7500: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
7510: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
7520: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
7530: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
7540: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
7550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7560: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
7570: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
7580: 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66  n use */.  int f
7590: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
75a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63           /* Misc
75b0: 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e  ellaneous flags.
75c0: 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
75d0: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20  i64 lastRowid;  
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
75f0: 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72   ROWID of most r
7600: 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65  ecent insert (se
7610: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36  e above) */.  i6
7620: 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
7630: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
7640: 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65  efault mmap_size
7650: 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e   setting */.  un
7660: 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46  signed int openF
7670: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46  lags;       /* F
7680: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
7690: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
76a0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
76b0: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
76c0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
76d0: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
76e0: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
76f0: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
7700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7710: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
7720: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
7730: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
7740: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
7750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7760: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
7770: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
7780: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61  ations */.  u8 a
7790: 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20  utoCommit;      
77a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
77b0: 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
77c0: 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f  g. */.  u8 temp_
77d0: 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20  store;          
77e0: 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65        /* 1: file
77f0: 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65   2: memory 0: de
7800: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61  fault */.  u8 ma
7810: 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20  llocFailed;     
7820: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
7830: 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e   if we have seen
7840: 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72   a malloc failur
7850: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
7860: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
7870: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
7880: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
7890: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
78a0: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
78b0: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
78c0: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
78d0: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
78e0: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
78f0: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
7900: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
7910: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
7920: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
7930: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
7940: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
7950: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
7960: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
7970: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
7980: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
7990: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
79a0: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
79b0: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
79c0: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
79d0: 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67  */.  int nextPag
79e0: 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20  esize;          
79f0: 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61     /* Pagesize a
7a00: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
7a10: 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63  0 */.  u32 magic
7a20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7a30: 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75       /* Magic nu
7a40: 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20  mber for detect 
7a50: 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a  library misuse *
7a60: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
7a90: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
7aa0: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
7ab0: 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20  t nTotalChange; 
7ac0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
7ad0: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
7ae0: 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
7af0: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
7b00: 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  t aLimit[SQLITE_
7b10: 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c  N_LIMIT];   /* L
7b20: 69 6d 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63  imits */.  struc
7b30: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66  t sqlite3InitInf
7b40: 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  o {      /* Info
7b50: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72  rmation used dur
7b60: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
7b70: 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65  on */.    int ne
7b80: 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20  wTnum;          
7b90: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67        /* Rootpag
7ba0: 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67  e of table being
7bb0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
7bc0: 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20      u8 iDb;     
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7be0: 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65  /* Which db file
7bf0: 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61   is being initia
7c00: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
7c10: 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  busy;           
7c20: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45           /* TRUE
7c30: 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
7c40: 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20  itializing */.  
7c50: 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67    u8 orphanTrigg
7c60: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
7c70: 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   Last statement 
7c80: 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50  is orphaned TEMP
7c90: 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20   trigger */.  } 
7ca0: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 61 63 74 69  init;.  int acti
7cb0: 76 65 56 64 62 65 43 6e 74 3b 20 20 20 20 20 20  veVdbeCnt;      
7cc0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
7cd0: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
7ce0: 6c 79 20 65 78 65 63 75 74 69 6e 67 20 2a 2f 0a  ly executing */.
7cf0: 20 20 69 6e 74 20 77 72 69 74 65 56 64 62 65 43    int writeVdbeC
7d00: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
7d10: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
7d20: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 61  ive VDBEs that a
7d30: 72 65 20 77 72 69 74 69 6e 67 20 2a 2f 0a 20 20  re writing */.  
7d40: 69 6e 74 20 76 64 62 65 45 78 65 63 43 6e 74 3b  int vdbeExecCnt;
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7d60: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
7d70: 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45  d calls to VdbeE
7d80: 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  xec() */.  int n
7d90: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
7da0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
7db0: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
7dc0: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
7dd0: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
7de0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
7df0: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
7e00: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
7e10: 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65  .  void (*xTrace
7e20: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
7e30: 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  ar*);        /* 
7e40: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
7e50: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
7e60: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7e80: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
7e90: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
7ea0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f  */.  void (*xPro
7eb0: 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  file)(void*,cons
7ec0: 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f  t char*,u64);  /
7ed0: 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63  * Profiling func
7ee0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
7ef0: 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20  pProfileArg;    
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f10: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
7f20: 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74  to profile funct
7f30: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
7f40: 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20  CommitArg;      
7f50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
7f60: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69  gument to xCommi
7f70: 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  tCallback() */  
7f80: 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69   .  int (*xCommi
7f90: 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  tCallback)(void*
7fa0: 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64  );    /* Invoked
7fb0: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
7fc0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f  . */.  void *pRo
7fd0: 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20  llbackArg;      
7fe0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
7ff0: 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63  ment to xRollbac
8000: 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  kCallback() */  
8010: 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c   .  void (*xRoll
8020: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
8030: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
8040: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
8050: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
8060: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
8070: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
8080: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
8090: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
80a0: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
80b0: 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  64);.#ifndef SQL
80c0: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
80d0: 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63  nt (*xWalCallbac
80e0: 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74  k)(void *, sqlit
80f0: 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
8100: 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64   *, int);.  void
8110: 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69   *pWalArg;.#endi
8120: 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  f.  void(*xCollN
8130: 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c  eeded)(void*,sql
8140: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
8150: 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  ep,const char*);
8160: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
8170: 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71  eded16)(void*,sq
8180: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
8190: 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  Rep,const void*)
81a0: 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e  ;.  void *pCollN
81b0: 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69  eededArg;.  sqli
81c0: 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b  te3_value *pErr;
81d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
81e0: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
81f0: 65 73 73 61 67 65 20 2a 2f 0a 20 20 63 68 61 72  essage */.  char
8200: 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
8210: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
8220: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
8230: 65 73 73 61 67 65 20 28 55 54 46 2d 38 20 65 6e  essage (UTF-8 en
8240: 63 6f 64 65 64 29 20 2a 2f 0a 20 20 63 68 61 72  coded) */.  char
8250: 20 2a 7a 45 72 72 4d 73 67 31 36 3b 20 20 20 20   *zErrMsg16;    
8260: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
8270: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
8280: 65 73 73 61 67 65 20 28 55 54 46 2d 31 36 20 65  essage (UTF-16 e
8290: 6e 63 6f 64 65 64 29 20 2a 2f 0a 20 20 75 6e 69  ncoded) */.  uni
82a0: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
82b0: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
82c0: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
82d0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
82e0: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
82f0: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
8300: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
8310: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
8320: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
8330: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
8340: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
8350: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
8360: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
8370: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
8380: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
8390: 0a 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28  .  int (*xAuth)(
83a0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
83b0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
83c0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
83d0: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20  nst char*);.    
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
8400: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
8410: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
8420: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
8430: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8440: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
8450: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
8460: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
8470: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
8480: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
8490: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
84a0: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
84b0: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
84c0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
84d0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
84e0: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
84f0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
8500: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
8510: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
8520: 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f    int nProgressO
8530: 70 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ps;             
8540: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
8550: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
8560: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
8570: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
8580: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
8590: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72  TABLE.  int nVTr
85a0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
85b0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
85c0: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
85d0: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f  ns */.  Hash aMo
85e0: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
85f0: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
8600: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
8610: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
8620: 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61  .  VtabCtx *pVta
8630: 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20  bCtx;           
8640: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
8650: 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e  active vtab conn
8660: 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20  ect/create */.  
8670: 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73  VTable **aVTrans
8680: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
8690: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
86a0: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
86b0: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62  ctions */.  VTab
86c0: 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b  le *pDisconnect;
86d0: 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63      /* Disconnec
86e0: 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20  t these in next 
86f0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
8700: 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75  ) */.#endif.  Fu
8710: 6e 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b  ncDefHash aFunc;
8720: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
8730: 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e  ash table of con
8740: 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  nection function
8750: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c  s */.  Hash aCol
8760: 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  lSeq;           
8770: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c       /* All coll
8780: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
8790: 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72  */.  BusyHandler
87a0: 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20   busyHandler;   
87b0: 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62     /* Busy callb
87c0: 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53  ack */.  Db aDbS
87d0: 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20  tatic[2];       
87e0: 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63         /* Static
87f0: 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32   space for the 2
8800: 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64   default backend
8810: 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  s */.  Savepoint
8820: 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20   *pSavepoint;   
8830: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
8840: 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74  active savepoint
8850: 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54  s */.  int busyT
8860: 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20  imeout;         
8870: 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e       /* Busy han
8880: 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e  dler timeout, in
8890: 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e   msec */.  int n
88a0: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
88b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
88c0: 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61  er of non-transa
88d0: 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73  ction savepoints
88e0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65   */.  int nState
88f0: 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ment;           
8900: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
8910: 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e   nested statemen
8920: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20  t-transactions  
8930: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
8940: 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
8950: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
8960: 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  ed constraints t
8970: 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  his transaction.
8980: 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74   */.  int *pnByt
8990: 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20  esFreed;        
89a0: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55      /* If not NU
89b0: 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  LL, increment th
89c0: 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a  is in DbFree() *
89d0: 2f 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  /..#ifdef SQLITE
89e0: 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e  _ENABLE_UNLOCK_N
89f0: 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66  OTIFY.  /* The f
8a00: 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c  ollowing variabl
8a10: 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65  es are all prote
8a20: 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54  cted by the STAT
8a30: 49 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20  IC_MASTER .  ** 
8a40: 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71  mutex, not by sq
8a50: 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65  lite3.mutex. The
8a60: 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f  y are used by co
8a70: 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20  de in notify.c. 
8a80: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
8a90: 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74  X.pUnlockConnect
8aa0: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
8ab0: 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69  ns that X is wai
8ac0: 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20  ting for Y to.  
8ad0: 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61  ** unlock so tha
8ae0: 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64  t it can proceed
8af0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e  ..  **.  ** When
8b00: 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e   X.pBlockingConn
8b10: 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20  ection==Y, that 
8b20: 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74  means that somet
8b30: 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65  hing that X trie
8b40: 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20  d.  ** tried to 
8b50: 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c  do recently fail
8b60: 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ed with an SQLIT
8b70: 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64  E_LOCKED error d
8b80: 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a  ue to locks.  **
8b90: 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f   held by Y..  */
8ba0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f  .  sqlite3 *pBlo
8bb0: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b  ckingConnection;
8bc0: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
8bd0: 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54  hat caused SQLIT
8be0: 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71  E_LOCKED */.  sq
8bf0: 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f  lite3 *pUnlockCo
8c00: 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20  nnection;       
8c10: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
8c20: 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75  n to watch for u
8c30: 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  nlock */.  void 
8c40: 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20  *pUnlockArg;    
8c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c60: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
8c70: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f  xUnlockNotify */
8c80: 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63  .  void (*xUnloc
8c90: 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a  kNotify)(void **
8ca0: 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f  , int);  /* Unlo
8cb0: 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61  ck notify callba
8cc0: 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ck */.  sqlite3 
8cd0: 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20  *pNextBlocked;  
8ce0: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
8cf0: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f   list of all blo
8d00: 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  cked connections
8d10: 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
8d20: 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20  *.** A macro to 
8d30: 64 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63  discover the enc
8d40: 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62  oding of a datab
8d50: 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ase..*/.#define 
8d60: 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61  ENC(db) ((db)->a
8d70: 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65  Db[0].pSchema->e
8d80: 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  nc)../*.** Possi
8d90: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
8da0: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
8db0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
8dc0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20  ITE_VdbeTrace   
8dd0: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
8de0: 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20  * True to trace 
8df0: 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a  VDBE execution *
8e00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8e10: 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20  _InternChanges  
8e20: 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55  0x00000002  /* U
8e30: 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20  ncommitted Hash 
8e40: 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f  table changes */
8e50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8e60: 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30  FullColNames   0
8e70: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68  x00000004  /* Sh
8e80: 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e  ow full column n
8e90: 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a  ames on SELECT *
8ea0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8eb0: 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20  _ShortColNames  
8ec0: 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 53  0x00000008  /* S
8ed0: 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e  how short column
8ee0: 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  s names */.#defi
8ef0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  ne SQLITE_CountR
8f00: 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30  ows      0x00000
8f10: 30 31 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f  010  /* Count ro
8f20: 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e  ws changed by IN
8f30: 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20  SERT, */.       
8f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f60: 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20     /*   DELETE, 
8f70: 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65  or UPDATE and re
8f80: 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20  turn */.        
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fb0: 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74    /*   the count
8fc0: 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63   using a callbac
8fd0: 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  k. */.#define SQ
8fe0: 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63  LITE_NullCallbac
8ff0: 6b 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20  k   0x00000020  
9000: 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61  /* Invoke the ca
9010: 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74  llback once if t
9020: 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  he */.          
9030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9050: 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20  /*   result set 
9060: 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  is empty */.#def
9070: 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  ine SQLITE_SqlTr
9080: 61 63 65 20 20 20 20 20 20 20 30 78 30 30 30 30  ace       0x0000
9090: 30 30 34 30 20 20 2f 2a 20 44 65 62 75 67 20 70  0040  /* Debug p
90a0: 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65  rint SQL as it e
90b0: 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69  xecutes */.#defi
90c0: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69  ne SQLITE_VdbeLi
90d0: 73 74 69 6e 67 20 20 20 20 30 78 30 30 30 30 30  sting    0x00000
90e0: 30 38 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69  080  /* Debug li
90f0: 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70  stings of VDBE p
9100: 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69  rograms */.#defi
9110: 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53  ne SQLITE_WriteS
9120: 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30  chema    0x00000
9130: 31 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70  100  /* OK to up
9140: 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54  date SQLITE_MAST
9150: 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ER */.#define SQ
9160: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
9170: 61 63 65 20 30 78 30 30 30 30 30 32 30 30 20 20  ace 0x00000200  
9180: 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33  /* Trace sqlite3
9190: 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c  VdbeAddOp() call
91a0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
91b0: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
91c0: 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f     0x00000400  /
91d0: 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65  * Do not enforce
91e0: 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
91f0: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
9200: 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
9210: 74 74 65 64 20 30 78 30 30 30 30 38 30 30 20 20  tted 0x0000800  
9220: 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61  /* For shared-ca
9230: 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66  che mode */.#def
9240: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63  ine SQLITE_Legac
9250: 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30  yFileFmt  0x0000
9260: 31 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20  1000  /* Create 
9270: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e  new databases in
9280: 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65   format 1 */.#de
9290: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
92a0: 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30  FSync      0x000
92b0: 30 32 30 30 30 20 20 2f 2a 20 55 73 65 20 66 75  02000  /* Use fu
92c0: 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20  ll fsync on the 
92d0: 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69  backend */.#defi
92e0: 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  ne SQLITE_CkptFu
92f0: 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 34  llFSync  0x00004
9300: 30 30 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  000  /* Use full
9310: 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b   fsync for check
9320: 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  point */.#define
9330: 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79   SQLITE_Recovery
9340: 4d 6f 64 65 20 20 20 30 78 30 30 30 30 38 30 30  Mode   0x0000800
9350: 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68  0  /* Ignore sch
9360: 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64  ema errors */.#d
9370: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76  efine SQLITE_Rev
9380: 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30  erseOrder   0x00
9390: 30 31 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72  010000  /* Rever
93a0: 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c  se unordered SEL
93b0: 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ECTs */.#define 
93c0: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
93d0: 72 73 20 20 20 20 30 78 30 30 30 32 30 30 30 30  rs    0x00020000
93e0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75    /* Enable recu
93f0: 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a  rsive triggers *
9400: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9410: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20  _ForeignKeys    
9420: 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45  0x00040000  /* E
9430: 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b  nforce foreign k
9440: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20  ey constraints  
9450: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9460: 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20  E_AutoIndex     
9470: 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20   0x00080000  /* 
9480: 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63  Enable automatic
9490: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
94a0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65  ine SQLITE_Prefe
94b0: 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 31 30  rBuiltin  0x0010
94c0: 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65  0000  /* Prefere
94d0: 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20  nce to built-in 
94e0: 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65  funcs */.#define
94f0: 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65   SQLITE_LoadExte
9500: 6e 73 69 6f 6e 20 20 30 78 30 30 32 30 30 30 30  nsion  0x0020000
9510: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61  0  /* Enable loa
9520: 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23  d_extension */.#
9530: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
9540: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
9550: 30 34 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0400000  /* True
9560: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
9570: 65 72 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69  ers */../*.** Bi
9580: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
9590: 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65  3.dbOptFlags fie
95a0: 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ld that are used
95b0: 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
95c0: 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
95d0: 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
95e0: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e  OPTIMIZATIONS,..
95f0: 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a  .) interface to.
9600: 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64  ** selectively d
9610: 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f  isable various o
9620: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f  ptimizations..*/
9630: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9640: 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30  QueryFlattener 0
9650: 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79  x0001   /* Query
9660: 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23   flattening */.#
9670: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
9680: 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30  lumnCache    0x0
9690: 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  002   /* Column 
96a0: 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65  cache */.#define
96b0: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
96c0: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
96d0: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
96e0: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
96f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
9700: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
9710: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
9720: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23  t factoring */.#
9730: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 64  define SQLITE_Id
9740: 78 52 65 61 6c 41 73 49 6e 74 20 20 20 30 78 30  xRealAsInt   0x0
9750: 30 31 30 20 20 20 2f 2a 20 53 74 6f 72 65 20 52  010   /* Store R
9760: 45 41 4c 20 61 73 20 49 4e 54 20 69 6e 20 69 6e  EAL as INT in in
9770: 64 69 63 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dices */.#define
9780: 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74   SQLITE_Distinct
9790: 4f 70 74 20 20 20 20 30 78 30 30 32 30 20 20 20  Opt    0x0020   
97a0: 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e  /* DISTINCT usin
97b0: 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  g indexes */.#de
97c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65  fine SQLITE_Cove
97d0: 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 34  rIdxScan   0x004
97e0: 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20  0   /* Covering 
97f0: 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23  index scans */.#
9800: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72  define SQLITE_Or
9810: 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30  derByIdxJoin 0x0
9820: 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42  080   /* ORDER B
9830: 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69  Y of joins via i
9840: 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
9850: 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75  SQLITE_SubqCorou
9860: 74 69 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f  tine  0x0100   /
9870: 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62 71 75  * Evaluate subqu
9880: 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69  eries as corouti
9890: 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nes */.#define S
98a0: 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65  QLITE_Transitive
98b0: 20 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a       0x0200   /*
98c0: 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73   Transitive cons
98d0: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
98e0: 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74  ne SQLITE_AllOpt
98f0: 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20  s        0xffff 
9900: 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a    /* All optimiz
9910: 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
9920: 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74   Macros for test
9930: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
9940: 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ot optimizations
9950: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20   are enabled or 
9960: 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66  disabled..*/.#if
9970: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
9980: 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64  _BUILTIN_TEST.#d
9990: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
99a0: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
99b0: 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62  ask)  (((db)->db
99c0: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
99d0: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74  !=0).#define Opt
99e0: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
99f0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28  (db, mask)   (((
9a00: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
9a10: 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73  (mask))==0).#els
9a20: 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  e.#define Optimi
9a30: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
9a40: 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66  b, mask)  0.#def
9a50: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
9a60: 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  Enabled(db, mask
9a70: 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )   1.#endif../*
9a80: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
9a90: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
9aa0: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
9ab0: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
9ac0: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
9ad0: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
9ae0: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
9af0: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
9b00: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
9b10: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
9b20: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
9b30: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
9b40: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
9b50: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
9b60: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
9b70: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
9b80: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
9b90: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
9ba0: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
9bb0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
9bc0: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
9bd0: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
9be0: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
9bf0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9c00: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
9c10: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
9c20: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
9c30: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
9c40: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
9c50: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
9c60: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
9c70: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
9c80: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
9c90: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
9ca0: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
9cb0: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
9cc0: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
9cd0: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
9ce0: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
9cf0: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
9d00: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
9d10: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
9d20: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41  ** structure.  A
9d30: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
9d40: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74   structure is st
9d50: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
9d60: 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68  te.aFunc.** hash
9d70: 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75   table.  When mu
9d80: 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73  ltiple functions
9d90: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e   have the same n
9da0: 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61  ame, the hash ta
9db0: 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f  ble.** points to
9dc0: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
9dd0: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
9de0: 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  es..*/.struct Fu
9df0: 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41  ncDef {.  i16 nA
9e00: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rg;            /
9e10: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
9e20: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
9e30: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
9e40: 75 38 20 69 50 72 65 66 45 6e 63 3b 20 20 20 20  u8 iPrefEnc;    
9e50: 20 20 20 20 20 2f 2a 20 50 72 65 66 65 72 72 65       /* Preferre
9e60: 64 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  d text encoding 
9e70: 28 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 31 36  (SQLITE_UTF8, 16
9e80: 4c 45 2c 20 31 36 42 45 29 20 2a 2f 0a 20 20 75  LE, 16BE) */.  u
9e90: 38 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  8 flags;        
9ea0: 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62      /* Some comb
9eb0: 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54  ination of SQLIT
9ec0: 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f  E_FUNC_* */.  vo
9ed0: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20  id *pUserData;  
9ee0: 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20     /* User data 
9ef0: 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46  parameter */.  F
9f00: 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20  uncDef *pNext;  
9f10: 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63      /* Next func
9f20: 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e  tion with same n
9f30: 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ame */.  void (*
9f40: 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  xFunc)(sqlite3_c
9f50: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
9f60: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
9f70: 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f   Regular functio
9f80: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  n */.  void (*xS
9f90: 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tep)(sqlite3_con
9fa0: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
9fb0: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41  3_value**); /* A
9fc0: 67 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f  ggregate step */
9fd0: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
9fe0: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
9ff0: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
a000: 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67         /* Aggreg
a010: 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f  ate finalizer */
a020: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
a030: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e          /* SQL n
a040: 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
a050: 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65  ion. */.  FuncDe
a060: 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f  f *pHash;      /
a070: 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69  * Next with a di
a080: 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74  fferent name but
a090: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a   the same hash *
a0a0: 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  /.  FuncDestruct
a0b0: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
a0c0: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
a0d0: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
a0e0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d  or function */.}
a0f0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74  ;../*.** This st
a100: 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c  ructure encapsul
a110: 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63  ates a user-func
a120: 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20  tion destructor 
a130: 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20  callback (as.** 
a140: 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67  configured using
a150: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
a160: 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66  _v2()) and a ref
a170: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20  erence counter. 
a180: 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66  When.** create_f
a190: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20  unction_v2() is 
a1a0: 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65  called to create
a1b0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68   a function with
a1c0: 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a   a destructor,.*
a1d0: 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63  * a single objec
a1e0: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
a1f0: 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e  s allocated. Fun
a200: 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66  cDestructor.nRef
a210: 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74   is set to .** t
a220: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e  he number of Fun
a230: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65  cDef objects cre
a240: 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f  ated (either 1 o
a250: 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  r 3, depending o
a260: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20  n whether.** or 
a270: 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65  not the specifie
a280: 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51  d encoding is SQ
a290: 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46  LITE_ANY). The F
a2a0: 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74  uncDef.pDestruct
a2b0: 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20  or.** member of 
a2c0: 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20  each of the new 
a2d0: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
a2e0: 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20  is set to point 
a2f0: 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64  to the allocated
a300: 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74  .** FuncDestruct
a310: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61  or..**.** Therea
a320: 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f  fter, when one o
a330: 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62  f the FuncDef ob
a340: 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64  jects is deleted
a350: 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a  , the reference.
a360: 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73  ** count on this
a370: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65   object is decre
a380: 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20  mented. When it 
a390: 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64  reaches 0, the d
a3a0: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20  estructor.** is 
a3b0: 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20  invoked and the 
a3c0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73  FuncDestructor s
a3d0: 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a  tructure freed..
a3e0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
a3f0: 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74  structor {.  int
a400: 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a   nRef;.  void (*
a410: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
a420: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  );.  void *pUser
a430: 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  Data;.};../*.** 
a440: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
a450: 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67  for FuncDef.flag
a460: 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  s.  Note that th
a470: 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54  e _LENGTH and _T
a480: 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20  YPEOF.** values 
a490: 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  must correspond 
a4a0: 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  to OPFLAG_LENGTH
a4b0: 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
a4c0: 59 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65  YPEOFARG.  There
a4d0: 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29  .** are assert()
a4e0: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
a4f0: 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66  he code to verif
a500: 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69  y this..*/.#defi
a510: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
a520: 49 4b 45 20 20 20 20 20 30 78 30 31 20 2f 2a 20  IKE     0x01 /* 
a530: 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68  Candidate for th
a540: 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74  e LIKE optimizat
a550: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
a560: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20  QLITE_FUNC_CASE 
a570: 20 20 20 20 30 78 30 32 20 2f 2a 20 43 61 73 65      0x02 /* Case
a580: 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d  -sensitive LIKE-
a590: 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  type function */
a5a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a5b0: 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78  FUNC_EPHEM    0x
a5c0: 30 34 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e  04 /* Ephemeral.
a5d0: 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44    Delete with VD
a5e0: 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  BE */.#define SQ
a5f0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
a600: 4c 4c 20 30 78 30 38 20 2f 2a 20 73 71 6c 69 74  LL 0x08 /* sqlit
a610: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
a620: 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c  () might be call
a630: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
a640: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
a650: 20 20 20 30 78 31 30 20 2f 2a 20 42 75 69 6c 74     0x10 /* Built
a660: 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67  -in count(*) agg
a670: 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  regate */.#defin
a680: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
a690: 41 4c 45 53 43 45 20 30 78 32 30 20 2f 2a 20 42  ALESCE 0x20 /* B
a6a0: 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65  uilt-in coalesce
a6b0: 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 66  () or ifnull() f
a6c0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
a6d0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
a6e0: 45 4e 47 54 48 20 20 20 30 78 34 30 20 2f 2a 20  ENGTH   0x40 /* 
a6f0: 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28  Built-in length(
a700: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
a710: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
a720: 43 5f 54 59 50 45 4f 46 20 20 20 30 78 38 30 20  C_TYPEOF   0x80 
a730: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65  /* Built-in type
a740: 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  of() function */
a750: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
a760: 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72  owing three macr
a770: 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20  os, FUNCTION(), 
a780: 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41  LIKEFUNC() and A
a790: 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a  GGREGATE() are.*
a7a0: 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65  * used to create
a7b0: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72   the initializer
a7c0: 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65  s for the FuncDe
a7d0: 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a  f structures..**
a7e0: 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a  .**   FUNCTION(z
a7f0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
a800: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
a810: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
a820: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
a830: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
a840: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
a850: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70  Name .**     imp
a860: 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75  lemented by C fu
a870: 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61  nction xFunc tha
a880: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
a890: 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a  rguments. The.**
a8a0: 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73 65       value passe
a8b0: 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61 73  d as iArg is cas
a8c0: 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61  t to a (void*) a
a8d0: 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c  nd made availabl
a8e0: 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20  e.**     as the 
a8f0: 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
a900: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20  e3_user_data()) 
a910: 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  for the function
a920: 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72 67  . If .**     arg
a930: 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75  ument bNC is tru
a940: 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49  e, then the SQLI
a950: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
a960: 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a   flag is set..**
a970: 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
a980: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
a990: 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
a9a0: 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
a9b0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
a9c0: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
a9d0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
a9e0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
a9f0: 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
aa00: 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
aa10: 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
aa20: 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
aa30: 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
aa40: 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
aa50: 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
aa60: 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
aa70: 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
aa80: 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c  ION()..**.**   L
aa90: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
aaa0: 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73  Arg, pArg, flags
aab0: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
aac0: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
aad0: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
aae0: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
aaf0: 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20  on zName .**    
ab00: 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
ab10: 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64  rg arguments and
ab20: 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
ab30: 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a  by a call to C .
ab40: 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20  **     function 
ab50: 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65  likeFunc. Argume
ab60: 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20  nt pArg is cast 
ab70: 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e  to a (void *) an
ab80: 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76  d made.**     av
ab90: 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66  ailable as the f
aba0: 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74  unction user-dat
abb0: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
abc0: 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20  data()). The.** 
abd0: 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67      FuncDef.flag
abe0: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  s variable is se
abf0: 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70  t to the value p
ac00: 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61  assed as the fla
ac10: 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65  gs.**     parame
ac20: 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
ac30: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
ac40: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
ac50: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
ac60: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  g, SQLITE_UTF8, 
ac70: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
ac80: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
ac90: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
aca0: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
acb0: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
acc0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
acd0: 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c  FUNCTION2(zName,
ace0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
acf0: 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c  , xFunc, extraFl
ad00: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
ad10: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 28 62 4e  SQLITE_UTF8, (bN
ad20: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
ad30: 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
ad40: 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  gs, \.   SQLITE_
ad50: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
ad60: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
ad70: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
ad80: 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43  #define STR_FUNC
ad90: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
ada0: 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , pArg, bNC, xFu
adb0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
adc0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 62 4e 43 2a  QLITE_UTF8, bNC*
add0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
ade0: 43 4f 4c 4c 2c 20 5c 0a 20 20 20 70 41 72 67 2c  COLL, \.   pArg,
adf0: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
ae00: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
ae10: 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
ae20: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
ae30: 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
ae40: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
ae50: 20 66 6c 61 67 73 2c 20 28 76 6f 69 64 20 2a 29   flags, (void *)
ae60: 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63  arg, 0, likeFunc
ae70: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
ae80: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41 47  0, 0}.#define AG
ae90: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
aea0: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
aeb0: 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20  tep, xFinal) \. 
aec0: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
aed0: 54 46 38 2c 20 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8, nc*SQLITE_F
aee0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a  UNC_NEEDCOLL, \.
aef0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
af00: 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c  _PTR(arg), 0, 0,
af10: 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a   xStep,xFinal,#z
af20: 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a  Name,0,0}../*.**
af30: 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
af40: 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
af50: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
af60: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
af70: 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
af80: 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
af90: 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
afa0: 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
afb0: 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
afc0: 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
afd0: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
afe0: 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
aff0: 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
b000: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
b010: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
b020: 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
b030: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
b040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b050: 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
b060: 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
b070: 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
b080: 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
b090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0a0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
b0b0: 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
b0c0: 69 6f 6e 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ions */.  Savepo
b0d0: 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
b0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b0f0: 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
b100: 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
b110: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
b120: 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
b130: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
b140: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
b150: 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
b160: 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
b170: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
b180: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
b190: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
b1a0: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
b1b0: 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
b1c0: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
b1d0: 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
b1e0: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
b1f0: 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
b200: 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
b210: 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
b220: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
b230: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
b240: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
b250: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
b260: 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
b270: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
b280: 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
b290: 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
b2a0: 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
b2b0: 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
b2c0: 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
b2d0: 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
b2e0: 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
b2f0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
b300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b310: 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
b320: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
b330: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
b340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b350: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
b360: 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
b370: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
b380: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
b390: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
b3a0: 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
b3b0: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
b3c0: 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
b3d0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
b3e0: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
b3f0: 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
b400: 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
b410: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
b420: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
b430: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
b440: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
b450: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
b460: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  s column */.  Ex
b470: 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f  pr *pDflt;     /
b480: 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * Default value 
b490: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
b4a0: 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b  /.  char *zDflt;
b4b0: 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
b4c0: 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66   text of the def
b4d0: 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  ault value */.  
b4e0: 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20  char *zType;    
b4f0: 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f   /* Data type fo
b500: 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  r this column */
b510: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20  .  char *zColl; 
b520: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
b530: 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e   sequence.  If N
b540: 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66  ULL, use the def
b550: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74  ault */.  u8 not
b560: 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e  Null;      /* An
b570: 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61   OE_ code for ha
b580: 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c  ndling a NOT NUL
b590: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
b5a0: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
b5b0: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
b5c0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20   SQLITE_AFF_... 
b5d0: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  values */.  u16 
b5e0: 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20  colFlags;    /* 
b5f0: 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69  Boolean properti
b600: 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47  es.  See COLFLAG
b610: 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20  _ defines below 
b620: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
b630: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c  d values for Col
b640: 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f  umn.colFlags:.*/
b650: 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
b660: 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31  _PRIMKEY  0x0001
b670: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73      /* Column is
b680: 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69   part of the pri
b690: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
b6a0: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  ine COLFLAG_HIDD
b6b0: 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f  EN   0x0002    /
b6c0: 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  * A hidden colum
b6d0: 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74  n in a virtual t
b6e0: 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  able */../*.** A
b6f0: 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75   "Collating Sequ
b700: 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64  ence" is defined
b710: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
b720: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
b730: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43  .** structure. C
b740: 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63  onceptually, a c
b750: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
b760: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  e consists of a 
b770: 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f  name and.** a co
b780: 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65  mparison routine
b790: 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
b7a0: 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20  e order of that 
b7b0: 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20  sequence..**.** 
b7c0: 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20  If CollSeq.xCmp 
b7d0: 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e  is NULL, it mean
b7e0: 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f  s that the.** co
b7f0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
b800: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
b810: 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e  Indices built on
b820: 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a   an undefined.**
b830: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
b840: 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72  nce may not be r
b850: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a  ead or written..
b860: 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  */.struct CollSe
b870: 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  q {.  char *zNam
b880: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
b890: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ame of the colla
b8a0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55  ting sequence, U
b8b0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a  TF-8 encoded */.
b8c0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
b8d0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
b8e0: 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64  encoding handled
b8f0: 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   by xCmp() */.  
b900: 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20  void *pUser;    
b910: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
b920: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28  rgument to xCmp(
b930: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d  ) */.  int (*xCm
b940: 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  p)(void*,int, co
b950: 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
b960: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
b970: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
b980: 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63  d*);  /* Destruc
b990: 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f  tor for pUser */
b9a0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72  .};../*.** A sor
b9b0: 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65  t order can be e
b9c0: 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53  ither ASC or DES
b9d0: 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  C..*/.#define SQ
b9e0: 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20  LITE_SO_ASC     
b9f0: 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    0  /* Sort in 
ba00: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
ba10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ba20: 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31  E_SO_DESC      1
ba30: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
ba40: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
ba50: 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66  ./*.** Column af
ba60: 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a  finity types..**
ba70: 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74  .** These used t
ba80: 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20  o have mnemonic 
ba90: 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f  name like 'i' fo
baa0: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  r SQLITE_AFF_INT
bab0: 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20  EGER and.** 't' 
bac0: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  for SQLITE_AFF_T
bad0: 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e  EXT.  But we can
bae0: 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73   save a little s
baf0: 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  pace and improve
bb00: 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20  .** the speed a 
bb10: 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72  little by number
bb20: 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63  ing the values c
bb30: 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a  onsecutively.  .
bb40: 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
bb50: 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
bb60: 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
bb70: 6e 20 77 69 74 68 20 27 61 27 2e 20 20 54 68 61  n with 'a'.  Tha
bb80: 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
bb90: 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
bba0: 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
bbb0: 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
bbc0: 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
bbd0: 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
bbe0: 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
bbf0: 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
bc00: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
bc10: 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
bc20: 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
bc30: 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
bc40: 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
bc50: 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
bc60: 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
bc70: 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64  omparison..*/.#d
bc80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
bc90: 5f 54 45 58 54 20 20 20 20 20 27 61 27 0a 23 64  _TEXT     'a'.#d
bca0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
bcb0: 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23 64  _NONE     'b'.#d
bcc0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
bcd0: 5f 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23 64  _NUMERIC  'c'.#d
bce0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
bcf0: 5f 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23 64  _INTEGER  'd'.#d
bd00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
bd10: 5f 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a 23  _REAL     'e'..#
bd20: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
bd30: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
bd40: 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45  X)  ((X)>=SQLITE
bd50: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f  _AFF_NUMERIC)../
bd60: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
bd70: 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20  AFF_MASK values 
bd80: 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69  masks off the si
bd90: 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f  gnificant bits o
bda0: 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79  f an.** affinity
bdb0: 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66   value. .*/.#def
bdc0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  ine SQLITE_AFF_M
bdd0: 41 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f 2a  ASK     0x67../*
bde0: 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62  .** Additional b
bdf0: 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  it values that c
be00: 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20  an be ORed with 
be10: 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68  an affinity with
be20: 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20  out.** changing 
be30: 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2f  the affinity..*/
be40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
be50: 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 30  JUMPIFNULL   0x0
be60: 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65  8  /* jumps if e
be70: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
be80: 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
be90: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
bea0: 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 53 74       0x10  /* St
beb0: 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  ore result in re
bec0: 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61  g[P2] rather tha
bed0: 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e  n jump */.#defin
bee0: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
bef0: 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e        0x80  /* N
bf00: 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a  ULL=NULL */../*.
bf10: 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20  ** An object of 
bf20: 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65  this type is cre
bf30: 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69  ated for each vi
bf40: 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73  rtual table pres
bf50: 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61  ent in.** the da
bf60: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a  tabase schema. .
bf70: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74  **.** If the dat
bf80: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
bf90: 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65  shared, then the
bfa0: 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e  re is one instan
bfb0: 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74  ce of this.** st
bfc0: 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68  ructure for each
bfd0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
bfe0: 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20  tion (sqlite3*) 
bff0: 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68  that uses the sh
c000: 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20  ared.** schema. 
c010: 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20  This is because 
c020: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
c030: 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65  nnection require
c040: 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65  s its own unique
c050: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
c060: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
c070: 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f  * handle used to
c080: 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
c090: 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d  ual table .** im
c0a0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
c0b0: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
c0c0: 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
c0d0: 68 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a  hared between .*
c0e0: 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
c0f0: 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65  ctions, even whe
c100: 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  n the rest of th
c110: 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  e in-memory data
c120: 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20  base .** schema 
c130: 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68  is shared, as th
c140: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
c150: 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68   often stores th
c160: 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
c170: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
c180: 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61  passed to it via
c190: 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20   the xConnect() 
c1a0: 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74  or xCreate() met
c1b0: 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e  hod.** during in
c1c0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74  itialization int
c1d0: 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61  ernally. This da
c1e0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
c1f0: 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20  n handle may.** 
c200: 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20  then be used by 
c210: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
c220: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
c230: 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20   to access real 
c240: 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69  tables .** withi
c250: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
c260: 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70  So that they app
c270: 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74  ear as part of t
c280: 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74  he callers .** t
c290: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73  ransaction, thes
c2a0: 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20  e accesses need 
c2b0: 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74  to be made via t
c2c0: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
c2d0: 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   .** connection 
c2e0: 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20  as that used to 
c2f0: 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72  execute SQL oper
c300: 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69  ations on the vi
c310: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  rtual table..**.
c320: 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62  ** All VTable ob
c330: 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65  jects that corre
c340: 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c  spond to a singl
c350: 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61  e table in a sha
c360: 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  red.** database 
c370: 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69  schema are initi
c380: 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ally stored in a
c390: 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69   linked-list poi
c3a0: 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68  nted to by.** th
c3b0: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
c3c0: 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20  member variable 
c3d0: 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
c3e0: 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63  ding Table objec
c3f0: 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71  t..** When an sq
c400: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
c410: 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71  operation is req
c420: 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20  uired to access 
c430: 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
c440: 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65  able, it searche
c450: 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74  s the list for t
c460: 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63  he VTable that c
c470: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
c480: 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  e.** database co
c490: 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74  nnection doing t
c4a0: 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20  he preparing so 
c4b0: 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f  as to use the co
c4c0: 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33  rrect.** sqlite3
c4d0: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e  _vtab* handle in
c4e0: 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
c4f0: 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ery..**.** When 
c500: 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62  an in-memory Tab
c510: 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c  le object is del
c520: 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c  eted (for exampl
c530: 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63  e when the.** sc
c540: 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65  hema is being re
c550: 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20  loaded for some 
c560: 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61  reason), the VTa
c570: 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ble objects are 
c580: 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20  not .** deleted 
c590: 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f  and the sqlite3_
c5a0: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72  vtab* handles ar
c5b0: 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63  e not xDisconnec
c5c0: 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69  t()ed .** immedi
c5d0: 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
c5e0: 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
c5f0: 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
c600: 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
c610: 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
c620: 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
c630: 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
c640: 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
c650: 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
c660: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
c670: 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
c680: 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
c690: 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a  Disconnected .**
c6a0: 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61   next time a sta
c6b0: 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
c6c0: 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71  ed using said sq
c6d0: 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20  lite3*. This is 
c6e0: 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  done.** to avoid
c6f0: 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73   deadlock issues
c700: 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
c710: 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ple sqlite3.mute
c720: 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65  x mutexes..** Re
c730: 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20  fer to comments 
c740: 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73  above function s
c750: 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
c760: 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a  List() for an.**
c770: 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20   explanation as 
c780: 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66  to why it is saf
c790: 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72  e to add an entr
c7a0: 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e  y to an sqlite3.
c7b0: 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c  pDisconnect.** l
c7c0: 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64  ist without hold
c7d0: 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
c7e0: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75  nding sqlite3.mu
c7f0: 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  tex mutex..**.**
c800: 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
c810: 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20  objects of this 
c820: 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61  type is always a
c830: 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20  llocated by .** 
c840: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28  sqlite3DbMalloc(
c850: 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  ), using the con
c860: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73  nection handle s
c870: 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e  tored in VTable.
c880: 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69  db as .** the fi
c890: 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  rst argument..*/
c8a0: 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b  .struct VTable {
c8b0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c8d0: 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  Database connect
c8e0: 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
c8f0: 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ith this table *
c900: 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64  /.  Module *pMod
c910: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
c920: 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75   Pointer to modu
c930: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
c940: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  n */.  sqlite3_v
c950: 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20  tab *pVtab;     
c960: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
c970: 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a  tab instance */.
c980: 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
c990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c9a0: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
c9b0: 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  s to this struct
c9c0: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e  ure */.  u8 bCon
c9d0: 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20  straint;        
c9e0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
c9f0: 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75  nstraints are su
ca00: 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74  pported */.  int
ca10: 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20   iSavepoint;    
ca20: 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20         /* Depth 
ca30: 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54  of the SAVEPOINT
ca40: 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62   stack */.  VTab
ca50: 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  le *pNext;      
ca60: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
ca70: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65   linked list (se
ca80: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a  e above) */.};..
ca90: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 74  /*.** Each SQL t
caa0: 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
cab0: 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
cac0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
cad0: 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67  the.** following
cae0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
caf0: 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73  * Table.zName is
cb00: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
cb10: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61 73   table.  The cas
cb20: 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e of the origina
cb30: 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42 4c  l.** CREATE TABL
cb40: 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73  E statement is s
cb50: 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65 20  tored, but case 
cb60: 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61  is not significa
cb70: 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72  nt for.** compar
cb80: 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62  isons..**.** Tab
cb90: 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e  le.nCol is the n
cba0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
cbb0: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   in this table. 
cbc0: 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61   Table.aCol is a
cbd0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  .** pointer to a
cbe0: 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d  n array of Colum
cbf0: 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f 6e  n structures, on
cc00: 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
cc10: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  n..**.** If the 
cc20: 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e 54  table has an INT
cc30: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
cc40: 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b  , then Table.iPK
cc50: 65 79 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ey is the index 
cc60: 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e  of.** the column
cc70: 20 74 68 61 74 20 69 73 20 74 68 61 74 20 6b 65   that is that ke
cc80: 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20 54  y.   Otherwise T
cc90: 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e 65  able.iPKey is ne
cca0: 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a  gative.  Note.**
ccb0: 20 74 68 61 74 20 74 68 65 20 64 61 74 61 74 79   that the dataty
ccc0: 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52  pe of the PRIMAR
ccd0: 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49 4e  Y KEY must be IN
cce0: 54 45 47 45 52 20 66 6f 72 20 74 68 69 73 20 66  TEGER for this f
ccf0: 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65  ield to.** be se
cd00: 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50  t.  An INTEGER P
cd10: 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75 73  RIMARY KEY is us
cd20: 65 64 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  ed as the rowid 
cd30: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a  for each row of.
cd40: 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  ** the table.  I
cd50: 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e 6f  f a table has no
cd60: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
cd70: 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61 6e   KEY, then a ran
cd80: 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20  dom rowid.** is 
cd90: 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65 61  generated for ea
cda0: 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61  ch row of the ta
cdb0: 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69 6d  ble.  TF_HasPrim
cdc0: 61 72 79 4b 65 79 20 69 73 20 73 65 74 20 69 66  aryKey is set if
cdd0: 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68 61  .** the table ha
cde0: 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b 45  s any PRIMARY KE
cdf0: 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f 74  Y, INTEGER or ot
ce00: 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  herwise..**.** T
ce10: 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68 65  able.tnum is the
ce20: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
ce30: 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65 20   the root BTree 
ce40: 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
ce50: 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61  e in the.** data
ce60: 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20 54  base file.  If T
ce70: 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65 20  able.iDb is the 
ce80: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
ce90: 61 62 61 73 65 20 74 61 62 6c 65 20 62 61 63 6b  abase table back
cea0: 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65  end.** in sqlite
ceb0: 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f  .aDb[].  0 is fo
cec0: 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
ced0: 61 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f 72  ase and 1 is for
cee0: 20 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a 2a   the file that.*
cef0: 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72  * holds temporar
cf00: 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  y tables and ind
cf10: 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70 68  ices.  If TF_Eph
cf20: 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a  emeral is set.**
cf30: 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
cf40: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66  is stored in a f
cf50: 69 6c 65 20 74 68 61 74 20 69 73 20 61 75 74 6f  ile that is auto
cf60: 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65  matically delete
cf70: 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44  d.** when the VD
cf80: 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65  BE cursor to the
cf90: 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64   table is closed
cfa0: 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  .  In this case 
cfb0: 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72  Table.tnum .** r
cfc0: 65 66 65 72 73 20 56 44 42 45 20 63 75 72 73 6f  efers VDBE curso
cfd0: 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f  r number that ho
cfe0: 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70  lds the table op
cff0: 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72  en, not to the r
d000: 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62  oot.** page numb
d010: 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74  er.  Transient t
d020: 61 62 6c 65 73 20 61 72 65 20 75 73 65 64 20 74  ables are used t
d030: 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c  o hold the resul
d040: 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71  ts of a.** sub-q
d050: 75 65 72 79 20 74 68 61 74 20 61 70 70 65 61 72  uery that appear
d060: 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72  s instead of a r
d070: 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  eal table name i
d080: 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
d090: 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43  e .** of a SELEC
d0a0: 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
d0b0: 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20  struct Table {. 
d0c0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
d0d0: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
d0e0: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
d0f0: 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a  ew */.  Column *
d100: 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  aCol;        /* 
d110: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
d120: 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  t each column */
d130: 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78  .  Index *pIndex
d140: 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  ;       /* List 
d150: 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f  of SQL indexes o
d160: 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f  n this table. */
d170: 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
d180: 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20  ct;     /* NULL 
d190: 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69  for tables.  Poi
d1a0: 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f  nts to definitio
d1b0: 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a  n if a view. */.
d1c0: 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20    FKey *pFKey;  
d1d0: 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64         /* Linked
d1e0: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72   list of all for
d1f0: 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69  eign keys in thi
d200: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61  s table */.  cha
d210: 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
d220: 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
d230: 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
d240: 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
d250: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
d260: 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20  TE_OMIT_CHECK.  
d270: 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b  ExprList *pCheck
d280: 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43  ;    /* All CHEC
d290: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
d2a0: 0a 23 65 6e 64 69 66 0a 20 20 74 52 6f 77 63 6e  .#endif.  tRowcn
d2b0: 74 20 6e 52 6f 77 45 73 74 3b 20 20 20 20 20 2f  t nRowEst;     /
d2c0: 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73  * Estimated rows
d2d0: 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d   in table - from
d2e0: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
d2f0: 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  ble */.  int tnu
d300: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
d310: 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65   Root BTree node
d320: 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20   for this table 
d330: 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29  (see note above)
d340: 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b   */.  i16 iPKey;
d350: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
d360: 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75   not negative, u
d370: 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61  se aCol[iPKey] a
d380: 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  s the primary ke
d390: 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b  y */.  i16 nCol;
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d3b0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
d3c0: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
d3d0: 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20  /.  u16 nRef;   
d3e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
d3f0: 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
d400: 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
d410: 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20    u8 tabFlags;  
d420: 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
d430: 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
d440: 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20  .  u8 keyConf;  
d450: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20          /* What 
d460: 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66  to do in case of
d470: 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66   uniqueness conf
d480: 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f  lict on iPKey */
d490: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d4a0: 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a  OMIT_ALTERTABLE.
d4b0: 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73    int addColOffs
d4c0: 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74  et;    /* Offset
d4d0: 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   in CREATE TABLE
d4e0: 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e   stmt to add a n
d4f0: 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e  ew column */.#en
d500: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
d510: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
d520: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75  ABLE.  int nModu
d530: 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e  leArg;      /* N
d540: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
d550: 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ts to the module
d560: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d   */.  char **azM
d570: 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65  oduleArg;  /* Te
d580: 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65  xt of all module
d590: 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f   args. [0] is mo
d5a0: 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56  dule name */.  V
d5b0: 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20  Table *pVTable; 
d5c0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56      /* List of V
d5d0: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a  Table objects. *
d5e0: 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67  /.#endif.  Trigg
d5f0: 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
d600: 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67  /* List of trigg
d610: 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53  ers stored in pS
d620: 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d  chema */.  Schem
d630: 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
d640: 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63  /* Schema that c
d650: 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62  ontains this tab
d660: 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  le */.  Table *p
d670: 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20  NextZombie;  /* 
d680: 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73  Next on the Pars
d690: 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73  e.pZombieTab lis
d6a0: 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
d6b0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
d6c0: 72 20 54 61 62 65 2e 74 61 62 46 6c 61 67 73 2e  r Tabe.tabFlags.
d6d0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
d6e0: 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
d6f0: 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
d700: 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
d710: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
d720: 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
d730: 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
d740: 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
d750: 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
d760: 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
d770: 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
d780: 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
d790: 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
d7a0: 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
d7b0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
d7c0: 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
d7d0: 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
d7e0: 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
d7f0: 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
d800: 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
d810: 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 0a 2f 2a 0a  l table */.../*.
d820: 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77  ** Test to see w
d830: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
d840: 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75  table is a virtu
d850: 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  al table.  This 
d860: 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20  is.** done as a 
d870: 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74  macro so that it
d880: 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a   will be optimiz
d890: 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74  ed out when virt
d8a0: 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70  ual.** table sup
d8b0: 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20  port is omitted 
d8c0: 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a  from the build..
d8d0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
d8e0: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
d8f0: 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73  BLE.#  define Is
d900: 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
d910: 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
d920: 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30  & TF_Virtual)!=0
d930: 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
d940: 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28  ddenColumn(X) ((
d950: 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
d960: 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
d970: 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  =0).#else.#  def
d980: 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
d990: 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
d9a0: 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
d9b0: 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (X) 0.#endif../*
d9c0: 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
d9d0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
d9e0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
d9f0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
da00: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
da10: 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
da20: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
da30: 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
da40: 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
da50: 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
da60: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
da70: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
da80: 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
da90: 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
daa0: 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
dab0: 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
dac0: 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
dad0: 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
dae0: 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
daf0: 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
db00: 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
db10: 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
db20: 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
db30: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
db40: 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
db50: 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
db60: 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
db70: 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
db80: 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
db90: 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
dba0: 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
dbb0: 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
dbc0: 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
dbd0: 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e  .** Each REFEREN
dbe0: 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72  CES clause gener
dbf0: 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ates an instance
dc00: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
dc10: 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77  g structure.** w
dc20: 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64  hich is attached
dc30: 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62   to the from-tab
dc40: 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c  le.  The to-tabl
dc50: 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74  e need not exist
dc60: 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f   when.** the fro
dc70: 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  m-table is creat
dc80: 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e  ed.  The existen
dc90: 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62  ce of the to-tab
dca0: 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65  le is not checke
dcb0: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65  d..*/.struct FKe
dcc0: 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72  y {.  Table *pFr
dcd0: 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  om;     /* Table
dce0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
dcf0: 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
dd00: 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a  e (aka: Child) *
dd10: 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46  /.  FKey *pNextF
dd20: 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 66 6f  rom;  /* Next fo
dd30: 72 65 69 67 6e 20 6b 65 79 20 69 6e 20 70 46 72  reign key in pFr
dd40: 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  om */.  char *zT
dd50: 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  o;        /* Nam
dd60: 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20  e of table that 
dd70: 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74  the key points t
dd80: 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20  o (aka: Parent) 
dd90: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
dda0: 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 66  To;    /* Next f
ddb0: 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61  oreign key on ta
ddc0: 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f  ble named zTo */
ddd0: 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f  .  FKey *pPrevTo
dde0: 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73  ;    /* Previous
ddf0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20   foreign key on 
de00: 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20  table named zTo 
de10: 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
de20: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
de30: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
de40: 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
de50: 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
de60: 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
de70: 72 72 65 64 3b 20 20 20 20 2f 2a 20 54 72 75 65  rred;    /* True
de80: 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63   if constraint c
de90: 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72  hecking is defer
dea0: 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20  red till COMMIT 
deb0: 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b  */.  u8 aAction[
dec0: 32 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  2];          /* 
ded0: 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e  ON DELETE and ON
dee0: 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c   UPDATE actions,
def0: 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f   respectively */
df00: 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72  .  Trigger *apTr
df10: 69 67 67 65 72 5b 32 5d 3b 20 20 2f 2a 20 54 72  igger[2];  /* Tr
df20: 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69  iggers for aActi
df30: 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a  on[] actions */.
df40: 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70    struct sColMap
df50: 20 7b 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f   {  /* Mapping o
df60: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72  f columns in pFr
df70: 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e  om to columns in
df80: 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20   zTo */.    int 
df90: 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 2f  iFrom;         /
dfa0: 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d  * Index of colum
dfb0: 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  n in pFrom */.  
dfc0: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20    char *zCol;   
dfd0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
dfe0: 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20  column in zTo.  
dff0: 49 66 20 30 20 75 73 65 20 50 52 49 4d 41 52 59  If 0 use PRIMARY
e000: 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
e010: 5b 31 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  [1];        /* O
e020: 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
e030: 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
e040: 20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20   s */.};../*.** 
e050: 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
e060: 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77  many different w
e070: 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61  ays to resolve a
e080: 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
e090: 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20  rror.  ROLLBACK 
e0a0: 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
e0b0: 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69   that a constrai
e0c0: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20  nt violation.** 
e0d0: 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61  causes the opera
e0e0: 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20  tion in process 
e0f0: 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20  to fail and for 
e100: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
e110: 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65  saction.** to be
e120: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41   rolled back.  A
e130: 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20  BORT processing 
e140: 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74  means the operat
e150: 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a  ion in process.*
e160: 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20  * fails and any 
e170: 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72  prior changes fr
e180: 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72  om that one oper
e190: 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64  ation are backed
e1a0: 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65   out,.** but the
e1b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
e1c0: 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  not rolled back.
e1d0: 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e    FAIL processin
e1e0: 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20  g means that.** 
e1f0: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
e200: 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20   progress stops 
e210: 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65  and returns an e
e220: 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20  rror code.  But 
e230: 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73  prior.** changes
e240: 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65   due to the same
e250: 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e   operation are n
e260: 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e  ot backed out an
e270: 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  d no rollback.**
e280: 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45   occurs.  IGNORE
e290: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
e2a0: 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74  particular row t
e2b0: 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63  hat caused the c
e2c0: 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
e2d0: 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74  or is not insert
e2e0: 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20  ed or updated.  
e2f0: 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
e300: 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
e310: 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  r.** is returned
e320: 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73  .  REPLACE means
e330: 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e   that preexistin
e340: 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  g database rows 
e350: 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61  that caused.** a
e360: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
e370: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
e380: 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74   removed so that
e390: 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20   the new insert 
e3a0: 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e  or.** update can
e3b0: 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65   proceed.  Proce
e3c0: 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
e3d0: 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20  and no error is 
e3e0: 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  reported..**.** 
e3f0: 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c  RESTRICT, SETNUL
e400: 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61  L, and CASCADE a
e410: 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c  ctions apply onl
e420: 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79  y to foreign key
e430: 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69  s..** RESTRICT i
e440: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42  s the same as AB
e450: 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ORT for IMMEDIAT
e460: 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  E foreign keys a
e470: 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  nd the.** same a
e480: 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44  s ROLLBACK for D
e490: 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53  EFERRED keys.  S
e4a0: 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61  ETNULL means tha
e4b0: 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  t the foreign.**
e4c0: 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e   key is set to N
e4d0: 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65  ULL.  CASCADE me
e4e0: 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54  ans that a DELET
e4f0: 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74  E or UPDATE of t
e500: 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64  he.** referenced
e510: 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72   table row is pr
e520: 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68  opagated into th
e530: 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73  e row that holds
e540: 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20   the.** foreign 
e550: 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20  key..** .** The 
e560: 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c  following symbol
e570: 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ic values are us
e580: 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69  ed to record whi
e590: 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63  ch type.** of ac
e5a0: 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f  tion to take..*/
e5b0: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65  .#define OE_None
e5c0: 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72       0   /* Ther
e5d0: 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69  e is no constrai
e5e0: 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23  nt to check */.#
e5f0: 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61  define OE_Rollba
e600: 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74  ck 1   /* Fail t
e610: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64  he operation and
e620: 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72   rollback the tr
e630: 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
e640: 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20  fine OE_Abort   
e650: 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74   2   /* Back out
e660: 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20   changes but do 
e670: 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  no rollback tran
e680: 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
e690: 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33  ne OE_Fail     3
e6a0: 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f     /* Stop the o
e6b0: 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61  peration but lea
e6c0: 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61  ve all prior cha
e6d0: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
e6e0: 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20  OE_Ignore   4   
e6f0: 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72  /* Ignore the er
e700: 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74  ror. Do not do t
e710: 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  he INSERT or UPD
e720: 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
e730: 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f  E_Replace  5   /
e740: 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e  * Delete existin
e750: 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64  g record, then d
e760: 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  o INSERT or UPDA
e770: 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  TE */..#define O
e780: 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f  E_Restrict 6   /
e790: 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49  * OE_Abort for I
e7a0: 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c  MMEDIATE, OE_Rol
e7b0: 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52  lback for DEFERR
e7c0: 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ED */.#define OE
e7d0: 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a  _SetNull  7   /*
e7e0: 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
e7f0: 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55   key value to NU
e800: 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  LL */.#define OE
e810: 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a  _SetDflt  8   /*
e820: 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
e830: 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74   key value to it
e840: 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65  s default */.#de
e850: 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20  fine OE_Cascade 
e860: 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20   9   /* Cascade 
e870: 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a  the changes */..
e880: 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75  #define OE_Defau
e890: 6c 74 20 20 39 39 20 20 2f 2a 20 44 6f 20 77 68  lt  99  /* Do wh
e8a0: 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75  atever the defau
e8b0: 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a  lt action is */.
e8c0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
e8d0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
e8e0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
e8f0: 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
e900: 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
e910: 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65  t to sqlite3Vdbe
e920: 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69  KeyCompare and i
e930: 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f  s used to contro
e940: 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72  l the .** compar
e950: 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20  ison of the two 
e960: 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2f 0a 73  index keys..*/.s
e970: 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a  truct KeyInfo {.
e980: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
e990: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
e9a0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e9b0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
e9c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
e9d0: 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65  t encoding - one
e9e0: 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55   of the SQLITE_U
e9f0: 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  TF* values */.  
ea00: 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
ea10: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
ea20: 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
ea30: 6c 5b 5d 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  l[] */.  u8 *aSo
ea40: 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20  rtOrder;     /* 
ea50: 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65  Sort order for e
ea60: 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 4d 61 79  ach column.  May
ea70: 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 43 6f   be NULL */.  Co
ea80: 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
ea90: 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
eaa0: 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
eab0: 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
eac0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
ead0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
eae0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
eaf0: 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
eb00: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a  mation about a.*
eb10: 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72  * single index r
eb20: 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61  ecord that has a
eb30: 6c 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73  lready been pars
eb40: 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69  ed out into indi
eb50: 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73  vidual.** values
eb60: 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64  ..**.** A record
eb70: 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   is an object th
eb80: 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  at contains one 
eb90: 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f  or more fields o
eba0: 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72  f data..** Recor
ebb0: 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  ds are used to s
ebc0: 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  tore the content
ebd0: 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20   of a table row 
ebe0: 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  and to store.** 
ebf0: 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e  the key of an in
ec00: 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63  dex.  A blob enc
ec10: 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72  oding of a recor
ec20: 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  d is created by.
ec30: 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  ** the OP_MakeRe
ec40: 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74  cord opcode of t
ec50: 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64  he VDBE and is d
ec60: 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74  isassembled by t
ec70: 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he.** OP_Column 
ec80: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
ec90: 69 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  is structure hol
eca0: 64 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74  ds a record that
ecb0: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
ecc0: 6e 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a  n disassembled.*
ecd0: 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74  * into its const
ece0: 69 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a  ituent fields..*
ecf0: 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  /.struct Unpacke
ed00: 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49  dRecord {.  KeyI
ed10: 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
ed20: 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64  /* Collation and
ed30: 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f   sort-order info
ed40: 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36  rmation */.  u16
ed50: 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
ed60: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
ed70: 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d  tries in apMem[]
ed80: 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 3b 20   */.  u8 flags; 
ed90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 6f 6f            /* Boo
eda0: 6c 65 61 6e 20 73 65 74 74 69 6e 67 73 2e 20 20  lean settings.  
edb0: 55 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c  UNPACKED_... bel
edc0: 6f 77 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69  ow */.  i64 rowi
edd0: 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55  d;          /* U
ede0: 73 65 64 20 62 79 20 55 4e 50 41 43 4b 45 44 5f  sed by UNPACKED_
edf0: 50 52 45 46 49 58 5f 53 45 41 52 43 48 20 2a 2f  PREFIX_SEARCH */
ee00: 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20  .  Mem *aMem;   
ee10: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73         /* Values
ee20: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
ee30: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 6f 66 20  lowed values of 
ee40: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2e 66  UnpackedRecord.f
ee50: 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
ee60: 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
ee70: 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20         0x01  /* 
ee80: 4d 61 6b 65 20 74 68 69 73 20 6b 65 79 20 61 6e  Make this key an
ee90: 20 65 70 73 69 6c 6f 6e 20 6c 61 72 67 65 72 20   epsilon larger 
eea0: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43  */.#define UNPAC
eeb0: 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
eec0: 20 20 30 78 30 32 20 20 2f 2a 20 41 20 70 72 65    0x02  /* A pre
eed0: 66 69 78 20 6d 61 74 63 68 20 69 73 20 63 6f 6e  fix match is con
eee0: 73 69 64 65 72 65 64 20 4f 4b 20 2a 2f 0a 23 64  sidered OK */.#d
eef0: 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50  efine UNPACKED_P
ef00: 52 45 46 49 58 5f 53 45 41 52 43 48 20 30 78 30  REFIX_SEARCH 0x0
ef10: 34 20 20 2f 2a 20 49 67 6e 6f 72 65 20 66 69 6e  4  /* Ignore fin
ef20: 61 6c 20 28 72 6f 77 69 64 29 20 66 69 65 6c 64  al (rowid) field
ef30: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
ef40: 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70  SQL index is rep
ef50: 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
ef60: 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ry by an.** inst
ef70: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
ef80: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
ef90: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d  .**.** The colum
efa0: 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
efb0: 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69  that are to be i
efc0: 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72  ndexed are descr
efd0: 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61  ibed.** by the a
efe0: 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20  iColumn[] field 
eff0: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
f000: 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
f010: 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68   suppose.** we h
f020: 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ave the followin
f030: 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65  g table and inde
f040: 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  x:.**.**     CRE
f050: 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31  ATE TABLE Ex1(c1
f060: 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33   int, c2 int, c3
f070: 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43   text);.**     C
f080: 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20  REATE INDEX Ex2 
f090: 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a  ON Ex1(c3,c1);.*
f0a0: 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c  *.** In the Tabl
f0b0: 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  e structure desc
f0c0: 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c  ribing Ex1, nCol
f0d0: 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72  ==3 because ther
f0e0: 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63  e are.** three c
f0f0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
f100: 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64  ble.  In the Ind
f110: 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ex structure des
f120: 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20  cribing.** Ex2, 
f130: 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65  nColumn==2 since
f140: 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75   2 of the 3 colu
f150: 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69  mns of Ex1 are i
f160: 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76  ndexed..** The v
f170: 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e  alue of aiColumn
f180: 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43   is {2, 0}.  aiC
f190: 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61  olumn[0]==2 beca
f1a0: 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73  use the .** firs
f1b0: 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  t column to be i
f1c0: 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20  ndexed (c3) has 
f1d0: 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e  an index of 2 in
f1e0: 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20   Ex1.aCol[]..** 
f1f0: 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
f200: 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
f210: 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c1) has an inde
f220: 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31  x of 0 in.** Ex1
f230: 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45  .aCol[], hence E
f240: 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d  x2.aiColumn[1]==
f250: 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64  0..**.** The Ind
f260: 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64  ex.onError field
f270: 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
f280: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69  her or not the i
f290: 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a  ndexed columns.*
f2a0: 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  * must be unique
f2b0: 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20   and what to do 
f2c0: 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e  if they are not.
f2d0: 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45    When Index.onE
f2e0: 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a  rror=OE_None,.**
f2f0: 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69   it means this i
f300: 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69  s not a unique i
f310: 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65  ndex.  Otherwise
f320: 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20   it is a unique 
f330: 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65  index.** and the
f340: 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e   value of Index.
f350: 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65  onError indicate
f360: 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c   the which confl
f370: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a  ict resolution .
f380: 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  ** algorithm to 
f390: 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20  employ whenever 
f3a0: 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
f3b0: 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e  de to insert a n
f3c0: 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65  on-unique.** ele
f3d0: 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
f3e0: 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a  Index {.  char *
f3f0: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
f400: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
f410: 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  is index */.  in
f420: 74 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  t *aiColumn;    
f430: 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
f440: 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
f450: 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20   by this index. 
f460: 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 74   1st is 0 */.  t
f470: 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74  Rowcnt *aiRowEst
f480: 3b 20 20 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20  ;       /* From 
f490: 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f  ANALYZE: Est. ro
f4a0: 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65  ws selected by e
f4b0: 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
f4c0: 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20  Table *pTable;  
f4d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
f4e0: 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20  SQL table being 
f4f0: 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61  indexed */.  cha
f500: 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
f510: 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
f520: 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
f530: 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
f540: 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
f550: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
f560: 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69     /* The next i
f570: 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20  ndex associated 
f580: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61  with the same ta
f590: 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ble */.  Schema 
f5a0: 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
f5b0: 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
f5c0: 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65  aining this inde
f5d0: 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  x */.  u8 *aSort
f5e0: 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
f5f0: 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* for each colu
f600: 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20  mn: True==DESC, 
f610: 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20  False==ASC */.  
f620: 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20  char **azColl;  
f630: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61           /* Arra
f640: 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  y of collation s
f650: 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f  equence names fo
f660: 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  r index */.  int
f670: 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
f680: 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65        /* DB Page
f690: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74   containing root
f6a0: 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
f6b0: 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b  /.  u16 nColumn;
f6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f6d0: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
f6e0: 73 20 69 6e 20 74 61 62 6c 65 20 75 73 65 64 20  s in table used 
f6f0: 62 79 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  by this index */
f700: 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20  .  u8 onError;  
f710: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
f720: 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f  E_Abort, OE_Igno
f730: 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20  re, OE_Replace, 
f740: 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20  or OE_None */.  
f750: 75 6e 73 69 67 6e 65 64 20 61 75 74 6f 49 6e 64  unsigned autoInd
f760: 65 78 3a 32 3b 20 20 20 20 2f 2a 20 31 3d 3d 55  ex:2;    /* 1==U
f770: 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52  NIQUE, 2==PRIMAR
f780: 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45  Y KEY, 0==CREATE
f790: 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69   INDEX */.  unsi
f7a0: 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a  gned bUnordered:
f7b0: 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  1;   /* Use this
f7c0: 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72   index for == or
f7d0: 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79   IN queries only
f7e0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
f7f0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 20  E_ENABLE_STAT3. 
f800: 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20   int nSample;   
f810: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
f820: 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
f830: 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a  in aSample[] */.
f840: 20 20 74 52 6f 77 63 6e 74 20 61 76 67 45 71 3b    tRowcnt avgEq;
f850: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76             /* Av
f860: 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 20  erage nEq value 
f870: 66 6f 72 20 6b 65 79 20 76 61 6c 75 65 73 20 6e  for key values n
f880: 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f  ot in aSample */
f890: 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a  .  IndexSample *
f8a0: 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53  aSample;    /* S
f8b0: 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65  amples of the le
f8c0: 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 23  ft-most key */.#
f8d0: 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
f8e0: 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72  Each sample stor
f8f0: 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
f900: 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20  _stat3 table is 
f910: 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
f920: 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20  emory .** using 
f930: 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74  a structure of t
f940: 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64  his type.  See d
f950: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20  ocumentation at 
f960: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a  the top of the.*
f970: 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72  * analyze.c sour
f980: 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69  ce file for addi
f990: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
f9a0: 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  on..*/.struct In
f9b0: 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 75 6e  dexSample {.  un
f9c0: 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  ion {.    char *
f9d0: 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  z;        /* Val
f9e0: 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53  ue if eType is S
f9f0: 51 4c 49 54 45 5f 54 45 58 54 20 6f 72 20 53 51  QLITE_TEXT or SQ
fa00: 4c 49 54 45 5f 42 4c 4f 42 20 2a 2f 0a 20 20 20  LITE_BLOB */.   
fa10: 20 64 6f 75 62 6c 65 20 72 3b 20 20 20 20 20 20   double r;      
fa20: 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65 54 79   /* Value if eTy
fa30: 70 65 20 69 73 20 53 51 4c 49 54 45 5f 46 4c 4f  pe is SQLITE_FLO
fa40: 41 54 20 2a 2f 0a 20 20 20 20 69 36 34 20 69 3b  AT */.    i64 i;
fa50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
fa60: 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53  ue if eType is S
fa70: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 2a 2f  QLITE_INTEGER */
fa80: 0a 20 20 7d 20 75 3b 0a 20 20 75 38 20 65 54 79  .  } u;.  u8 eTy
fa90: 70 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  pe;         /* S
faa0: 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 53 51 4c 49  QLITE_NULL, SQLI
fab0: 54 45 5f 49 4e 54 45 47 45 52 20 2e 2e 2e 20 65  TE_INTEGER ... e
fac0: 74 63 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79  tc. */.  int nBy
fad0: 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 69  te;        /* Si
fae0: 7a 65 20 69 6e 20 62 79 74 65 20 6f 66 20 74 65  ze in byte of te
faf0: 78 74 20 6f 72 20 62 6c 6f 62 2e 20 2a 2f 0a 20  xt or blob. */. 
fb00: 20 74 52 6f 77 63 6e 74 20 6e 45 71 3b 20 20 20   tRowcnt nEq;   
fb10: 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
fb20: 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
fb30: 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
fb40: 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
fb50: 74 52 6f 77 63 6e 74 20 6e 4c 74 3b 20 20 20 20  tRowcnt nLt;    
fb60: 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
fb70: 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
fb80: 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
fb90: 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
fba0: 20 74 52 6f 77 63 6e 74 20 6e 44 4c 74 3b 20 20   tRowcnt nDLt;  
fbb0: 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
fbc0: 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
fbd0: 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
fbe0: 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
fbf0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
fc00: 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
fc10: 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
fc20: 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
fc30: 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
fc40: 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
fc50: 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
fc60: 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
fc70: 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65  .** Note if Toke
fc80: 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65  n.z==0 then Toke
fc90: 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e  n.dyn and Token.
fca0: 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20  n are undefined 
fcb0: 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61  and.** may conta
fcc0: 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73  in random values
fcd0: 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61  .  Do not make a
fce0: 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61  ny assumptions a
fcf0: 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a  bout Token.dyn.*
fd00: 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68  * and Token.n wh
fd10: 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a  en Token.z==0..*
fd20: 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
fd30: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
fd40: 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
fd50: 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
fd60: 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
fd70: 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
fd80: 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
fd90: 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
fda0: 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
fdb0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
fdc0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
fdd0: 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
fde0: 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
fdf0: 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
fe00: 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
fe10: 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
fe20: 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
fe30: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
fe40: 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
fe50: 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
fe60: 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
fe70: 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
fe80: 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
fe90: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
fea0: 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
feb0: 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
fec0: 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
fed0: 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
fee0: 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
fef0: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
ff00: 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
ff10: 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
ff20: 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
ff30: 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
ff40: 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
ff50: 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
ff60: 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
ff70: 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
ff80: 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
ff90: 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
ffa0: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
ffb0: 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
ffc0: 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
ffd0: 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
ffe0: 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
fff0: 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
10000 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
10010 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
10020 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
10030 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
10040 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
10050 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
10060 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
10070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10080 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
10090 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
100a0 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
100b0 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
100c0 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
100d0 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
100e0 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
100f0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
10100 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
10110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10120 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
10130 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
10140 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
10150 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
10160 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
10170 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
10180 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
10190 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
101a0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
101b0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
101c0 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
101d0 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
101e0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
101f0 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
10200 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  dex */.  ExprLis
10210 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
10220 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
10230 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
10240 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
10250 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
10260 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
10270 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
10280 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
10290 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
102a0 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
102b0 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
102c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
102d0 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
102e0 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
102f0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
10300 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
10310 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
10320 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
10330 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
10340 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
10350 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
10360 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
10370 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
10380 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
10390 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
103a0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
103b0 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
103c0 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
103d0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
103e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
103f0 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
10400 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
10410 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
10420 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
10430 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
10440 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
10450 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
10460 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
10470 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
10480 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
10490 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
104a0 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
104b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104c0 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
104d0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
104e0 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
104f0 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10510 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
10520 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
10530 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
10540 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
10550 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10560 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
10570 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
10580 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
10590 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
105a0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
105b0 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
105c0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
105d0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
105e0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
105f0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
10600 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
10610 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
10620 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
10630 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
10640 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
10650 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
10660 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
10670 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
10680 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
10690 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
106a0 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
106b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
106c0 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
106d0 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
106e0 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
106f0 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
10700 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
10710 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
10720 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
10730 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
10740 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
10750 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
10760 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
10770 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
10780 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
10790 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
107a0 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
107b0 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
107c0 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
107d0 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
107e0 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
107f0 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
10800 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
10810 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
10820 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
10830 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
10840 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
10850 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
10860 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
10870 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
10880 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
10890 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
108a0 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
108b0 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
108c0 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
108d0 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
108e0 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
108f0 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
10900 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
10910 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
10920 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
10930 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
10940 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
10950 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
10960 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
10970 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
10980 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
10990 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
109a0 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
109b0 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
109c0 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
109d0 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
109e0 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
109f0 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
10a00 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
10a10 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
10a20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
10a30 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
10a40 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
10a50 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
10a60 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
10a70 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
10a80 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
10a90 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
10aa0 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
10ab0 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
10ac0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
10ad0 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
10ae0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
10af0 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
10b00 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
10b10 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
10b20 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  B, .** or TK_STR
10b30 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
10b40 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
10b50 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
10b60 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
10b70 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
10b80 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
10b90 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
10ba0 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
10bb0 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76  ntains the .** v
10bc0 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69  ariable name. Fi
10bd0 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78  nally, if the ex
10be0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
10bf0 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f  QL function (TK_
10c00 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68  FUNCTION),.** th
10c10 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
10c20 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20  ntains the name 
10c30 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
10c40 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67  .**.** Expr.pRig
10c50 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66  ht and Expr.pLef
10c60 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61  t are the left a
10c70 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72  nd right subexpr
10c80 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20  essions of a.** 
10c90 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
10ca0 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20   Either or both 
10cb0 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a  may be NULL..**.
10cc0 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  ** Expr.x.pList 
10cd0 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67  is a list of arg
10ce0 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78  uments if the ex
10cf0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
10d00 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  QL function,.** 
10d10 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  a CASE expressio
10d20 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65  n or an IN expre
10d30 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
10d40 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e  m "<lhs> IN (<y>
10d50 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45  , <z>...)"..** E
10d60 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
10d70 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70   used if the exp
10d80 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
10d90 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78  -select or an ex
10da0 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74  pression of.** t
10db0 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
10dc0 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
10dd0 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65   If the EP_xIsSe
10de0 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20  lect bit is set 
10df0 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
10e00 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
10e10 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
10e20 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69  s valid. Otherwi
10e30 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  se, Expr.x.pList
10e40 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a   is .** valid..*
10e50 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69  *.** An expressi
10e60 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49  on of the form I
10e70 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72  D or ID.ID refer
10e80 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  s to a column in
10e90 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72   a table..** For
10ea0 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e   such expression
10eb0 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65  s, Expr.op is se
10ec0 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61  t to TK_COLUMN a
10ed0 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69  nd Expr.iTable i
10ee0 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72  s.** the integer
10ef0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
10f00 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20  f a VDBE cursor 
10f10 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74  pointing to that
10f20 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78   table and.** Ex
10f30 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68  pr.iColumn is th
10f40 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
10f50 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63  for the specific
10f60 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65   column.  If the
10f70 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .** expression i
10f80 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75  s used as a resu
10f90 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61  lt in an aggrega
10fa0 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  te SELECT, then 
10fb0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
10fc0 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74  also stored in t
10fd0 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c  he Expr.iAgg col
10fe0 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65  umn in the aggre
10ff0 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20  gate so that.** 
11000 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73  it can be access
11010 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67  ed after all agg
11020 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70  regates are comp
11030 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uted..**.** If t
11040 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
11050 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69   an unbound vari
11060 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71  able marker (a q
11070 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a  uestion mark .**
11080 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
11090 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
110a0 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
110b0 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
110c0 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d  he index .** num
110d0 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
110e0 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
110f0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
11100 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
11110 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
11120 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
11130 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
11140 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
11150 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
11160 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
11170 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
11180 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
11190 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
111a0 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
111b0 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
111c0 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
111d0 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
111e0 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
111f0 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
11200 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
11210 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
11220 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
11230 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
11240 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
11250 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
11260 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
11270 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
11280 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
11290 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
112a0 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
112b0 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
112c0 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
112d0 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
112e0 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
112f0 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
11300 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
11310 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
11320 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
11330 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
11340 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
11350 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
11360 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
11370 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
11380 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
11390 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
113a0 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
113b0 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
113c0 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
113d0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
113e0 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
113f0 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
11400 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
11410 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
11420 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
11430 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
11440 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
11450 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
11460 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
11470 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
11480 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
11490 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
114a0 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
114b0 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
114c0 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
114d0 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
114e0 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
114f0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
11500 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
11510 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
11520 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
11530 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
11540 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
11550 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
11560 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
11570 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
11580 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
11590 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
115a0 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
115b0 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
115c0 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
115d0 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
115e0 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
115f0 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
11600 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
11610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11620 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
11630 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
11640 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
11650 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
11660 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
11670 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   of the column o
11680 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c  r 0 if not a col
11690 75 6d 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  umn */.  u16 fla
116a0 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
116b0 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
116c0 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
116d0 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
116e0 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
116f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
11700 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
11710 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
11720 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
11730 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
11740 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
11750 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
11760 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
11770 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
11780 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
11790 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
117a0 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
117b0 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
117c0 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
117d0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
117e0 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
117f0 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
11800 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
11810 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
11820 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
11830 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
11840 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  on. .  *********
11850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
11890 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
118a0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
118b0 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
118c0 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
118d0 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
118e0 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
118f0 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
11900 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 46 75  pList;     /* Fu
11910 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73  nction arguments
11920 20 6f 72 20 69 6e 20 22 3c 65 78 70 72 3e 20 49   or in "<expr> I
11930 4e 20 28 3c 65 78 70 72 2d 6c 69 73 74 29 22 20  N (<expr-list)" 
11940 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
11950 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 55  Select;     /* U
11960 73 65 64 20 66 6f 72 20 73 75 62 2d 73 65 6c 65  sed for sub-sele
11970 63 74 73 20 61 6e 64 20 22 3c 65 78 70 72 3e 20  cts and "<expr> 
11980 49 4e 20 28 3c 73 65 6c 65 63 74 3e 29 22 20 2a  IN (<select>)" *
11990 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49  /.  } x;..  /* I
119a0 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
119b0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
119c0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
119d0 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
119e0 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
119f0 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
11a00 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
11a10 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
11a20 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
11a30 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
11a40 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
11a50 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
11a60 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
11a70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11aa0 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c  ******/..#if SQL
11ab0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
11ac0 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67  TH>0.  int nHeig
11ad0 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ht;           /*
11ae0 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74   Height of the t
11af0 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68  ree headed by th
11b00 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  is node */.#endi
11b10 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20  f.  int iTable; 
11b20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
11b30 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20  _COLUMN: cursor 
11b40 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20  number of table 
11b50 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20  holding column. 
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b70 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45          ** TK_RE
11b80 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72  GISTER: register
11b90 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bb0 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20   ** TK_TRIGGER: 
11bc0 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f  1 -> new, 0 -> o
11bd0 6c 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43  ld */.  ynVar iC
11be0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f  olumn;         /
11bf0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  * TK_COLUMN: col
11c00 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66  umn index.  -1 f
11c10 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20  or rowid..      
11c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c30 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c     ** TK_VARIABL
11c40 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  E: variable numb
11c50 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29  er (always >= 1)
11c60 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b  . */.  i16 iAgg;
11c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11c80 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20   Which entry in 
11c90 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d  pAggInfo->aCol[]
11ca0 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f   or ->aFunc[] */
11cb0 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69  .  i16 iRightJoi
11cc0 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20  nTable;   /* If 
11cd0 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65  EP_FromJoin, the
11ce0 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20   right table of 
11cf0 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38  the join */.  u8
11d00 20 66 6c 61 67 73 32 3b 20 20 20 20 20 20 20 20   flags2;        
11d10 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 73       /* Second s
11d20 65 74 20 6f 66 20 66 6c 61 67 73 2e 20 20 45 50  et of flags.  EP
11d30 32 5f 2e 2e 2e 20 2a 2f 0a 20 20 75 38 20 6f 70  2_... */.  u8 op
11d40 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
11d50 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    /* TK_REGISTER
11d60 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  : original value
11d70 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20   of Expr.op.    
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d90 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d       ** TK_COLUM
11da0 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  N: the value of 
11db0 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  p5 for OP_Column
11dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11dd0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
11de0 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65  AGG_FUNCTION: ne
11df0 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20  sting depth */. 
11e00 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
11e10 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
11e20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
11e30 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
11e40 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  TION */.  Table 
11e50 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
11e60 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b   /* Table for TK
11e70 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69  _COLUMN expressi
11e80 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ons. */.};../*.*
11e90 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
11ea0 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73  are the meanings
11eb0 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
11ec0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
11ed0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ..*/.#define EP_
11ee0 46 72 6f 6d 4a 6f 69 6e 20 20 20 30 78 30 30 30  FromJoin   0x000
11ef0 31 20 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64  1  /* Originated
11f00 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20   in ON or USING 
11f10 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
11f20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41   */.#define EP_A
11f30 67 67 20 20 20 20 20 20 20 20 30 78 30 30 30 32  gg        0x0002
11f40 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e    /* Contains on
11f50 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
11f60 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
11f70 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f  .#define EP_Reso
11f80 6c 76 65 64 20 20 20 30 78 30 30 30 34 20 20 2f  lved   0x0004  /
11f90 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20  * IDs have been 
11fa0 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55  resolved to COLU
11fb0 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  MNs */.#define E
11fc0 50 5f 45 72 72 6f 72 20 20 20 20 20 20 30 78 30  P_Error      0x0
11fd0 30 30 38 20 20 2f 2a 20 45 78 70 72 65 73 73 69  008  /* Expressi
11fe0 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  on contains one 
11ff0 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a  or more errors *
12000 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73  /.#define EP_Dis
12010 74 69 6e 63 74 20 20 20 30 78 30 30 31 30 20 20  tinct   0x0010  
12020 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
12030 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49  ction with DISTI
12040 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  NCT keyword */.#
12050 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c  define EP_VarSel
12060 65 63 74 20 20 30 78 30 30 32 30 20 20 2f 2a 20  ect  0x0020  /* 
12070 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65  pSelect is corre
12080 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74  lated, not const
12090 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ant */.#define E
120a0 50 5f 44 62 6c 51 75 6f 74 65 64 20 20 30 78 30  P_DblQuoted  0x0
120b0 30 34 30 20 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20  040  /* token.z 
120c0 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69  was originally i
120d0 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69  n "..." */.#defi
120e0 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20  ne EP_InfixFunc 
120f0 20 30 78 30 30 38 30 20 20 2f 2a 20 54 72 75 65   0x0080  /* True
12100 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75   for an infix fu
12110 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c  nction: LIKE, GL
12120 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69  OB, etc */.#defi
12130 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20  ne EP_Collate   
12140 20 30 78 30 31 30 30 20 20 2f 2a 20 54 72 65 65   0x0100  /* Tree
12150 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43   contains a TK_C
12160 4f 4c 4c 41 54 45 20 6f 70 65 61 72 74 6f 72 20  OLLATE opeartor 
12170 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 69  */.#define EP_Fi
12180 78 65 64 44 65 73 74 20 20 30 78 30 32 30 30 20  xedDest  0x0200 
12190 20 2f 2a 20 52 65 73 75 6c 74 20 6e 65 65 64 65   /* Result neede
121a0 64 20 69 6e 20 61 20 73 70 65 63 69 66 69 63 20  d in a specific 
121b0 72 65 67 69 73 74 65 72 20 2a 2f 0a 23 64 65 66  register */.#def
121c0 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20  ine EP_IntValue 
121d0 20 20 30 78 30 34 30 30 20 20 2f 2a 20 49 6e 74    0x0400  /* Int
121e0 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61  eger value conta
121f0 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65  ined in u.iValue
12200 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78   */.#define EP_x
12210 49 73 53 65 6c 65 63 74 20 20 30 78 30 38 30 30  IsSelect  0x0800
12220 20 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69    /* x.pSelect i
12230 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69  s valid (otherwi
12240 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a  se x.pList is) *
12250 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48 69 6e  /.#define EP_Hin
12260 74 20 20 20 20 20 20 20 30 78 31 30 30 30 20 20  t       0x1000  
12270 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f 0a 23  /* Not used */.#
12280 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65  define EP_Reduce
12290 64 20 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20  d    0x2000  /* 
122a0 45 78 70 72 20 73 74 72 75 63 74 20 69 73 20 45  Expr struct is E
122b0 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
122c0 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
122d0 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  efine EP_TokenOn
122e0 6c 79 20 20 30 78 34 30 30 30 20 20 2f 2a 20 45  ly  0x4000  /* E
122f0 78 70 72 20 73 74 72 75 63 74 20 69 73 20 45 58  xpr struct is EX
12300 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
12310 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
12320 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63  define EP_Static
12330 20 20 20 20 20 30 78 38 30 30 30 20 20 2f 2a 20       0x8000  /* 
12340 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e  Held in memory n
12350 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ot obtained from
12360 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 0a 2f 2a   malloc() */../*
12370 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
12380 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e  g are the meanin
12390 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68  gs of bits in th
123a0 65 20 45 78 70 72 2e 66 6c 61 67 73 32 20 66 69  e Expr.flags2 fi
123b0 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
123c0 45 50 32 5f 4d 61 6c 6c 6f 63 65 64 54 6f 6b 65  EP2_MallocedToke
123d0 6e 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4e 65  n  0x0001  /* Ne
123e0 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46  ed to sqlite3DbF
123f0 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65  ree() Expr.zToke
12400 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 32  n */.#define EP2
12410 5f 49 72 72 65 64 75 63 69 62 6c 65 20 20 20 20  _Irreducible    
12420 30 78 30 30 30 32 20 20 2f 2a 20 43 61 6e 6e 6f  0x0002  /* Canno
12430 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  t EXPRDUP_REDUCE
12440 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 0a 2f   this Expr */../
12450 2a 0a 2a 2a 20 54 68 65 20 70 73 65 75 64 6f 2d  *.** The pseudo-
12460 72 6f 75 74 69 6e 65 20 73 71 6c 69 74 65 33 45  routine sqlite3E
12470 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62 6c  xprSetIrreducibl
12480 65 20 73 65 74 73 20 74 68 65 20 45 50 32 5f 49  e sets the EP2_I
12490 72 72 65 64 75 63 69 62 6c 65 0a 2a 2a 20 66 6c  rreducible.** fl
124a0 61 67 20 6f 6e 20 61 6e 20 65 78 70 72 65 73 73  ag on an express
124b0 69 6f 6e 20 73 74 72 75 63 74 75 72 65 2e 20 20  ion structure.  
124c0 54 68 69 73 20 66 6c 61 67 20 69 73 20 75 73 65  This flag is use
124d0 64 20 66 6f 72 20 56 56 26 41 20 6f 6e 6c 79 2e  d for VV&A only.
124e0 20 20 54 68 65 0a 2a 2a 20 72 6f 75 74 69 6e 65    The.** routine
124f0 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
12500 61 73 20 61 20 6d 61 63 72 6f 20 74 68 61 74 20  as a macro that 
12510 6f 6e 6c 79 20 77 6f 72 6b 73 20 77 68 65 6e 20  only works when 
12520 69 6e 20 64 65 62 75 67 67 69 6e 67 20 6d 6f 64  in debugging mod
12530 65 2c 0a 2a 2a 20 73 6f 20 61 73 20 6e 6f 74 20  e,.** so as not 
12540 74 6f 20 62 75 72 64 65 6e 20 70 72 6f 64 75 63  to burden produc
12550 74 69 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69  tion code..*/.#i
12560 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
12570 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
12580 65 74 49 72 72 65 64 75 63 69 62 6c 65 28 58 29  etIrreducible(X)
12590 20 20 28 58 29 2d 3e 66 6c 61 67 73 32 20 7c 3d    (X)->flags2 |=
125a0 20 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65   EP2_Irreducible
125b0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
125c0 45 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62  ExprSetIrreducib
125d0 6c 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  le(X).#endif../*
125e0 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
125f0 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
12600 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
12610 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
12620 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66  .** Expr.flags f
12630 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
12640 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79   ExprHasProperty
12650 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d  (E,P)     (((E)-
12660 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
12670 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  ).#define ExprHa
12680 73 41 6e 79 50 72 6f 70 65 72 74 79 28 45 2c 50  sAnyProperty(E,P
12690 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
126a0 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
126b0 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
126c0 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66  (E,P)     (E)->f
126d0 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
126e0 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65  e ExprClearPrope
126f0 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e  rty(E,P)   (E)->
12700 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a  flags&=~(P)../*.
12710 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
12720 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
12730 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
12740 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
12750 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c  Expr .** struct,
12760 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
12770 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75  with the EP_Redu
12780 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20  ced flag set in 
12790 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61  Expr.flags .** a
127a0 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
127b0 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
127c0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
127d0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
127e0 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
127f0 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
12800 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
12810 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
12820 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
12830 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
12840 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
12850 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
12860 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
12870 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
12880 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
12890 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
128a0 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
128b0 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
128c0 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
128d0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
128e0 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
128f0 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
12900 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  t .** above sqli
12910 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
12920 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
12930 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
12940 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
12950 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
12960 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
12970 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
12980 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
12990 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
129a0 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
129b0 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
129c0 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
129d0 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
129e0 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
129f0 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
12a00 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
12a10 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
12a20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
12a30 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
12a40 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
12a50 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
12a60 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
12a70 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
12a80 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
12a90 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
12aa0 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
12ab0 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
12ac0 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
12ad0 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
12ae0 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
12af0 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
12b00 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
12b10 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
12b20 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
12b30 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
12b40 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
12b50 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
12b60 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
12b70 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
12b80 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
12b90 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
12ba0 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
12bb0 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
12bc0 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
12bd0 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
12be0 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
12bf0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
12c00 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
12c10 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
12c20 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
12c30 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
12c40 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
12c50 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
12c60 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
12c70 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
12c80 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
12c90 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
12ca0 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
12cb0 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
12cc0 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
12cd0 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
12ce0 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
12cf0 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
12d00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12d10 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
12d20 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
12d30 20 20 69 6e 74 20 69 45 43 75 72 73 6f 72 3b 20    int iECursor; 
12d40 20 20 20 20 20 20 20 20 20 2f 2a 20 56 44 42 45           /* VDBE
12d50 20 43 75 72 73 6f 72 20 61 73 73 6f 63 69 61 74   Cursor associat
12d60 65 64 20 77 69 74 68 20 74 68 69 73 20 45 78 70  ed with this Exp
12d70 72 4c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63  rList */.  struc
12d80 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20  t ExprList_item 
12d90 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78  { /* For each ex
12da0 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
12db0 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72  list */.    Expr
12dc0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
12dd0 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20      /* The list 
12de0 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  of expressions *
12df0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
12e00 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
12e10 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65   Token associate
12e20 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72  d with this expr
12e30 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
12e40 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20  ar *zSpan;      
12e50 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
12e60 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78  l text of the ex
12e70 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
12e80 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20  u8 sortOrder;   
12e90 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72          /* 1 for
12ea0 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41   DESC or 0 for A
12eb0 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  SC */.    unsign
12ec0 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20  ed done :1;     
12ed0 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69    /* A flag to i
12ee0 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f  ndicate when pro
12ef0 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73  cessing is finis
12f00 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  hed */.    unsig
12f10 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a  ned bSpanIsTab :
12f20 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64  1; /* zSpan hold
12f30 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  s DB.TABLE.COLUM
12f40 4e 20 2a 2f 0a 20 20 20 20 75 31 36 20 69 4f 72  N */.    u16 iOr
12f50 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 20  derByCol;       
12f60 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59   /* For ORDER BY
12f70 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  , column number 
12f80 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f  in result set */
12f90 0a 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b  .    u16 iAlias;
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12fb0 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
12fc0 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
12fd0 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 20 20  ame */.  } *a;  
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ff0 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72  /* Alloc a power
13000 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20   of two greater 
13010 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70  or equal to nExp
13020 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
13030 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
13040 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
13050 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73  used by the pars
13060 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74  er to record bot
13070 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74  h.** the parse t
13080 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65  ree for an expre
13090 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70  ssion and the sp
130a0 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  an of input text
130b0 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65   for an.** expre
130c0 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ssion..*/.struct
130d0 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78   ExprSpan {.  Ex
130e0 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
130f0 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65      /* The expre
13100 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65  ssion parse tree
13110 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
13120 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46   *zStart;   /* F
13130 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  irst character o
13140 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
13150 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
13160 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63  nd;     /* One c
13170 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68  haracter past th
13180 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74  e end of input t
13190 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ext */.};../*.**
131a0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
131b0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
131c0 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
131d0 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
131e0 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
131f0 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
13200 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
13210 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
13220 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
13230 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
13240 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
13250 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
13260 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
13270 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
13280 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
13290 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
132a0 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
132b0 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
132c0 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
132d0 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
132e0 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
132f0 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
13300 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
13310 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
13320 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
13330 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
13340 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
13350 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
13360 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
13370 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
13380 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
13390 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
133a0 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
133b0 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
133c0 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
133d0 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
133e0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
133f0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
13400 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
13410 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
13420 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
13430 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
13440 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
13450 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
13460 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
13470 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13480 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
13490 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
134a0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d  ../*.** The bitm
134b0 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66  ask datatype def
134c0 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73  ined below is us
134d0 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f  ed for various o
134e0 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a  ptimizations..**
134f0 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69  .** Changing thi
13500 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20  s from a 64-bit 
13510 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65  to a 32-bit type
13520 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62   limits the numb
13530 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20  er of.** tables 
13540 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20  in a join to 32 
13550 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20  instead of 64.  
13560 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75  But it also redu
13570 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20  ces the size.** 
13580 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62  of the library b
13590 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69  y 738 bytes on i
135a0 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  x86..*/.typedef 
135b0 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a  u64 Bitmask;../*
135c0 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
135d0 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d  f bits in a Bitm
135e0 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e  ask.  "BMS" mean
135f0 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22  s "BitMask Size"
13600 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53  ..*/.#define BMS
13610 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
13620 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a  Bitmask)*8))../*
13630 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
13640 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  g structure desc
13650 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63  ribes the FROM c
13660 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
13670 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  T statement..** 
13680 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75  Each table or su
13690 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52  bquery in the FR
136a0 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73  OM clause is a s
136b0 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20  eparate element 
136c0 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73  of.** the SrcLis
136d0 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a  t.a[] array..**.
136e0 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69  ** With the addi
136f0 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65  tion of multiple
13700 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72   database suppor
13710 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  t, the following
13720 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61   structure.** ca
13730 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74  n also be used t
13740 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72  o describe a par
13750 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75  ticular table su
13760 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  ch as the table 
13770 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66  that.** is modif
13780 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54  ied by an INSERT
13790 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44  , DELETE, or UPD
137a0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ATE statement.  
137b0 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c  In standard SQL,
137c0 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65  .** such a table
137d0 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c   must be a simpl
137e0 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74  e name: ID.  But
137f0 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20   in SQLite, the 
13800 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77  table can.** now
13810 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62   be identified b
13820 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d  y a database nam
13830 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74  e, a dot, then t
13840 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49  he table name: I
13850 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  D.ID..**.** The 
13860 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20  jointype starts 
13870 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20  out showing the 
13880 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65  join type betwee
13890 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61  n the current ta
138a0 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e  ble.** and the n
138b0 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65  ext table on the
138c0 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73   list.  The pars
138d0 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69  er builds the li
138e0 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20  st this way..** 
138f0 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69  But sqlite3SrcLi
13900 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
13910 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74  ) later shifts t
13920 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20  he jointypes so 
13930 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69  that each.** joi
13940 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20  ntype expresses 
13950 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e  the join between
13960 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74   the table and t
13970 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c  he previous tabl
13980 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  e..**.** In the 
13990 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74  colUsed field, t
139a0 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
139b0 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65  t (bit 63) is se
139c0 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a  t if the table.*
139d0 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20  * contains more 
139e0 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20  than 63 columns 
139f0 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72  and the 64-th or
13a00 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73   later column is
13a10 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74   used..*/.struct
13a20 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 31 36   SrcList {.  i16
13a30 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a   nSrc;        /*
13a40 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
13a50 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20  s or subqueries 
13a60 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
13a70 73 65 20 2a 2f 0a 20 20 69 31 36 20 6e 41 6c 6c  se */.  i16 nAll
13a80 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  oc;      /* Numb
13a90 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c  er of entries al
13aa0 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62  located in a[] b
13ab0 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74  elow */.  struct
13ac0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a   SrcList_item {.
13ad0 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68      Schema *pSch
13ae0 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20  ema;  /* Schema 
13af0 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74  to which this it
13b00 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20  em is fixed */. 
13b10 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61     char *zDataba
13b20 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  se;  /* Name of 
13b30 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
13b40 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
13b50 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
13b60 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
13b70 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  the table */.   
13b80 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20   char *zAlias;  
13b90 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61     /* The "B" pa
13ba0 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22  rt of a "A AS B"
13bb0 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20   phrase.  zName 
13bc0 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20  is the "A" */.  
13bd0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
13be0 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61      /* An SQL ta
13bf0 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ble correspondin
13c00 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  g to zName */.  
13c10 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
13c20 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20  t;  /* A SELECT 
13c30 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69  statement used i
13c40 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
13c50 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69  le name */.    i
13c60 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20  nt addrFillSub; 
13c70 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73   /* Address of s
13c80 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e  ubroutine to man
13c90 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79  ifest a subquery
13ca0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
13cb0 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67  eturn;    /* Reg
13cc0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65  ister holding re
13cd0 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20  turn address of 
13ce0 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20  addrFillSub */. 
13cf0 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20     u8 jointype; 
13d00 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20       /* Type of 
13d10 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69  join between thi
13d20 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70  s able and the p
13d30 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75  revious */.    u
13d40 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78  nsigned notIndex
13d50 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  ed :1;    /* Tru
13d60 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20  e if there is a 
13d70 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
13d80 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  se */.    unsign
13d90 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20  ed isCorrelated 
13da0 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
13db0 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72  sub-query is cor
13dc0 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 75  related */.    u
13dd0 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75  nsigned viaCorou
13de0 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70  tine :1;  /* Imp
13df0 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f  lemented as a co
13e00 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 23 69 66 6e  -routine */.#ifn
13e10 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13e20 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69  EXPLAIN.    u8 i
13e30 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a  SelectId;     /*
13e40 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20   If pSelect!=0, 
13e50 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75  the id of the su
13e60 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20  b-select in EQP 
13e70 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e  */.#endif.    in
13e80 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20  t iCursor;      
13e90 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
13ea0 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74  or number used t
13eb0 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61  o access this ta
13ec0 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ble */.    Expr 
13ed0 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20  *pOn;        /* 
13ee0 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66  The ON clause of
13ef0 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49   a join */.    I
13f00 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20  dList *pUsing;  
13f10 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c   /* The USING cl
13f20 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
13f30 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f  /.    Bitmask co
13f40 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e  lUsed;  /* Bit N
13f50 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63   (1<<N) set if c
13f60 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20  olumn N of pTab 
13f70 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63  is used */.    c
13f80 68 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20  har *zIndex;    
13f90 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66   /* Identifier f
13fa0 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20  rom "INDEXED BY 
13fb0 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65  <zIndex>" clause
13fc0 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   */.    Index *p
13fd0 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64  Index;    /* Ind
13fe0 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72  ex structure cor
13ff0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49  responding to zI
14000 6e 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a  ndex, if any */.
14010 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20    } a[1];       
14020 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74        /* One ent
14030 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e  ry for each iden
14040 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69  tifier on the li
14050 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
14060 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73  Permitted values
14070 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e   of the SrcList.
14080 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64  a.jointype field
14090 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49  .*/.#define JT_I
140a0 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20  NNER     0x0001 
140b0 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f     /* Any kind o
140c0 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73  f inner or cross
140d0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
140e0 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78   JT_CROSS     0x
140f0 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69  0002    /* Expli
14100 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43  cit use of the C
14110 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  ROSS keyword */.
14120 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52  #define JT_NATUR
14130 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f  AL   0x0004    /
14140 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61  * True for a "na
14150 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23  tural" join */.#
14160 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20  define JT_LEFT  
14170 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a      0x0008    /*
14180 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e   Left outer join
14190 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52   */.#define JT_R
141a0 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20  IGHT     0x0010 
141b0 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65     /* Right oute
141c0 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
141d0 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30  e JT_OUTER     0
141e0 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20  x0020    /* The 
141f0 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20  "OUTER" keyword 
14200 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64  is present */.#d
14210 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20  efine JT_ERROR  
14220 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20     0x0040    /* 
14230 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70  unknown or unsup
14240 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65  ported join type
14250 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 57 68   */.../*.** A Wh
14260 65 72 65 50 6c 61 6e 20 6f 62 6a 65 63 74 20 68  erePlan object h
14270 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  olds information
14280 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
14290 61 20 6c 6f 6f 6b 75 70 0a 2a 2a 20 73 74 72 61  a lookup.** stra
142a0 74 65 67 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tegy..**.** This
142b0 20 6f 62 6a 65 63 74 20 69 73 20 69 6e 74 65 6e   object is inten
142c0 64 65 64 20 74 6f 20 62 65 20 6f 70 61 71 75 65  ded to be opaque
142d0 20 6f 75 74 73 69 64 65 20 6f 66 20 74 68 65 20   outside of the 
142e0 77 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a  where.c module..
142f0 2a 2a 20 49 74 20 69 73 20 69 6e 63 6c 75 64 65  ** It is include
14300 64 20 68 65 72 65 20 6f 6e 6c 79 20 73 6f 20 74  d here only so t
14310 68 61 74 20 74 68 61 74 20 63 6f 6d 70 69 6c 65  hat that compile
14320 72 20 77 69 6c 6c 20 6b 6e 6f 77 20 68 6f 77 20  r will know how 
14330 62 69 67 20 69 74 0a 2a 2a 20 69 73 2e 20 20 4e  big it.** is.  N
14340 6f 6e 65 20 6f 66 20 74 68 65 20 66 69 65 6c 64  one of the field
14350 73 20 69 6e 20 74 68 69 73 20 6f 62 6a 65 63 74  s in this object
14360 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
14370 6f 75 74 73 69 64 65 20 6f 66 0a 2a 2a 20 74 68  outside of.** th
14380 65 20 77 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65  e where.c module
14390 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 69 6e 20 74  ..**.** Within t
143a0 68 65 20 75 6e 69 6f 6e 2c 20 70 49 64 78 20 69  he union, pIdx i
143b0 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e  s only used when
143c0 20 77 73 46 6c 61 67 73 26 57 48 45 52 45 5f 49   wsFlags&WHERE_I
143d0 4e 44 45 58 45 44 20 69 73 20 74 72 75 65 2e 0a  NDEXED is true..
143e0 2a 2a 20 70 54 65 72 6d 20 69 73 20 6f 6e 6c 79  ** pTerm is only
143f0 20 75 73 65 64 20 77 68 65 6e 20 77 73 46 6c 61   used when wsFla
14400 67 73 26 57 48 45 52 45 5f 4d 55 4c 54 49 5f 4f  gs&WHERE_MULTI_O
14410 52 20 69 73 20 74 72 75 65 2e 20 20 41 6e 64 20  R is true.  And 
14420 70 56 74 61 62 49 64 78 0a 2a 2a 20 69 73 20 6f  pVtabIdx.** is o
14430 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 20 77 73  nly used when ws
14440 46 6c 61 67 73 26 57 48 45 52 45 5f 56 49 52 54  Flags&WHERE_VIRT
14450 55 41 4c 54 41 42 4c 45 20 69 73 20 74 72 75 65  UALTABLE is true
14460 2e 20 20 49 74 20 69 73 20 6e 65 76 65 72 20 74  .  It is never t
14470 68 65 0a 2a 2a 20 63 61 73 65 20 74 68 61 74 20  he.** case that 
14480 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 6f 66  more than one of
14490 20 74 68 65 73 65 20 63 6f 6e 64 69 74 69 6f 6e   these condition
144a0 73 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 73 74  s is true..*/.st
144b0 72 75 63 74 20 57 68 65 72 65 50 6c 61 6e 20 7b  ruct WherePlan {
144c0 0a 20 20 75 33 32 20 77 73 46 6c 61 67 73 3b 20  .  u32 wsFlags; 
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 2f 2a 20 57 48 45 52 45 5f 2a 20 66 6c 61    /* WHERE_* fla
144f0 67 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  gs that describe
14500 20 74 68 65 20 73 74 72 61 74 65 67 79 20 2a 2f   the strategy */
14510 0a 20 20 75 31 36 20 6e 45 71 3b 20 20 20 20 20  .  u16 nEq;     
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14530 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 3d    /* Number of =
14540 3d 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  = constraints */
14550 0a 20 20 75 31 36 20 6e 4f 42 53 61 74 3b 20 20  .  u16 nOBSat;  
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14570 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f    /* Number of O
14580 52 44 45 52 20 42 59 20 74 65 72 6d 73 20 73 61  RDER BY terms sa
14590 74 69 73 66 69 65 64 20 2a 2f 0a 20 20 64 6f 75  tisfied */.  dou
145a0 62 6c 65 20 6e 52 6f 77 3b 20 20 20 20 20 20 20  ble nRow;       
145b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
145c0 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
145d0 6f 66 20 72 6f 77 73 20 28 66 6f 72 20 45 51 50  of rows (for EQP
145e0 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  ) */.  union {. 
145f0 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20     Index *pIdx; 
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14610 20 20 2f 2a 20 49 6e 64 65 78 20 77 68 65 6e 20    /* Index when 
14620 57 48 45 52 45 5f 49 4e 44 45 58 45 44 20 69 73  WHERE_INDEXED is
14630 20 74 72 75 65 20 2a 2f 0a 20 20 20 20 73 74 72   true */.    str
14640 75 63 74 20 57 68 65 72 65 54 65 72 6d 20 2a 70  uct WhereTerm *p
14650 54 65 72 6d 3b 20 20 20 20 20 20 20 2f 2a 20 57  Term;       /* W
14660 48 45 52 45 20 63 6c 61 75 73 65 20 74 65 72 6d  HERE clause term
14670 20 66 6f 72 20 4f 52 2d 73 65 61 72 63 68 20 2a   for OR-search *
14680 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e  /.    sqlite3_in
14690 64 65 78 5f 69 6e 66 6f 20 2a 70 56 74 61 62 49  dex_info *pVtabI
146a0 64 78 3b 20 20 2f 2a 20 56 69 72 74 75 61 6c 20  dx;  /* Virtual 
146b0 74 61 62 6c 65 20 69 6e 64 65 78 20 74 6f 20 75  table index to u
146c0 73 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a  se */.  } u;.};.
146d0 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 65 61 63 68 20  ./*.** For each 
146e0 6e 65 73 74 65 64 20 6c 6f 6f 70 20 69 6e 20 61  nested loop in a
146f0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 6d   WHERE clause im
14700 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68  plementation, th
14710 65 20 57 68 65 72 65 49 6e 66 6f 0a 2a 2a 20 73  e WhereInfo.** s
14720 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
14730 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61  s a single insta
14740 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
14750 63 74 75 72 65 2e 20 20 54 68 69 73 20 73 74 72  cture.  This str
14760 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 69 6e 74  ucture.** is int
14770 65 6e 64 65 64 20 74 6f 20 62 65 20 70 72 69 76  ended to be priv
14780 61 74 65 20 74 6f 20 74 68 65 20 77 68 65 72 65  ate to the where
14790 2e 63 20 6d 6f 64 75 6c 65 20 61 6e 64 20 73 68  .c module and sh
147a0 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61  ould not be.** a
147b0 63 63 65 73 73 20 6f 72 20 6d 6f 64 69 66 69 65  ccess or modifie
147c0 64 20 62 79 20 6f 74 68 65 72 20 6d 6f 64 75 6c  d by other modul
147d0 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 49  es..**.** The pI
147e0 64 78 49 6e 66 6f 20 66 69 65 6c 64 20 69 73 20  dxInfo field is 
147f0 75 73 65 64 20 74 6f 20 68 65 6c 70 20 70 69 63  used to help pic
14800 6b 20 74 68 65 20 62 65 73 74 20 69 6e 64 65 78  k the best index
14810 20 6f 6e 20 61 0a 2a 2a 20 76 69 72 74 75 61 6c   on a.** virtual
14820 20 74 61 62 6c 65 2e 20 20 54 68 65 20 70 49 64   table.  The pId
14830 78 49 6e 66 6f 20 70 6f 69 6e 74 65 72 20 63 6f  xInfo pointer co
14840 6e 74 61 69 6e 73 20 69 6e 64 65 78 69 6e 67 0a  ntains indexing.
14850 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ** information f
14860 6f 72 20 74 68 65 20 69 2d 74 68 20 74 61 62 6c  or the i-th tabl
14870 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
14880 61 75 73 65 20 62 65 66 6f 72 65 20 72 65 6f 72  ause before reor
14890 64 65 72 69 6e 67 2e 0a 2a 2a 20 41 6c 6c 20 74  dering..** All t
148a0 68 65 20 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e  he pIdxInfo poin
148b0 74 65 72 73 20 61 72 65 20 66 72 65 65 64 20 62  ters are freed b
148c0 79 20 77 68 65 72 65 49 6e 66 6f 46 72 65 65 28  y whereInfoFree(
148d0 29 20 69 6e 20 77 68 65 72 65 2e 63 2e 0a 2a 2a  ) in where.c..**
148e0 20 41 6c 6c 20 6f 74 68 65 72 20 69 6e 66 6f 72   All other infor
148f0 6d 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 69 2d  mation in the i-
14900 74 68 20 57 68 65 72 65 4c 65 76 65 6c 20 6f 62  th WhereLevel ob
14910 6a 65 63 74 20 66 6f 72 20 74 68 65 20 69 2d 74  ject for the i-t
14920 68 20 74 61 62 6c 65 0a 2a 2a 20 61 66 74 65 72  h table.** after
14930 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 72 64   FROM clause ord
14940 65 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74  ering..*/.struct
14950 20 57 68 65 72 65 4c 65 76 65 6c 20 7b 0a 20 20   WhereLevel {.  
14960 57 68 65 72 65 50 6c 61 6e 20 70 6c 61 6e 3b 20  WherePlan plan; 
14970 20 20 20 20 20 20 2f 2a 20 71 75 65 72 79 20 70        /* query p
14980 6c 61 6e 20 66 6f 72 20 74 68 69 73 20 65 6c 65  lan for this ele
14990 6d 65 6e 74 20 6f 66 20 74 68 65 20 46 52 4f 4d  ment of the FROM
149a0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 69 6e 74   clause */.  int
149b0 20 69 4c 65 66 74 4a 6f 69 6e 3b 20 20 20 20 20   iLeftJoin;     
149c0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 63 65 6c     /* Memory cel
149d0 6c 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  l used to implem
149e0 65 6e 74 20 4c 45 46 54 20 4f 55 54 45 52 20 4a  ent LEFT OUTER J
149f0 4f 49 4e 20 2a 2f 0a 20 20 69 6e 74 20 69 54 61  OIN */.  int iTa
14a00 62 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 2f  bCur;          /
14a10 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
14a20 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  r used to access
14a30 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
14a40 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20 20 20  int iIdxCur;    
14a50 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
14a60 45 20 63 75 72 73 6f 72 20 75 73 65 64 20 74 6f  E cursor used to
14a70 20 61 63 63 65 73 73 20 70 49 64 78 20 2a 2f 0a   access pIdx */.
14a80 20 20 69 6e 74 20 61 64 64 72 42 72 6b 3b 20 20    int addrBrk;  
14a90 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20          /* Jump 
14aa0 68 65 72 65 20 74 6f 20 62 72 65 61 6b 20 6f 75  here to break ou
14ab0 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f  t of the loop */
14ac0 0a 20 20 69 6e 74 20 61 64 64 72 4e 78 74 3b 20  .  int addrNxt; 
14ad0 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70           /* Jump
14ae0 20 68 65 72 65 20 74 6f 20 73 74 61 72 74 20 74   here to start t
14af0 68 65 20 6e 65 78 74 20 49 4e 20 63 6f 6d 62 69  he next IN combi
14b00 6e 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  nation */.  int 
14b10 61 64 64 72 43 6f 6e 74 3b 20 20 20 20 20 20 20  addrCont;       
14b20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74    /* Jump here t
14b30 6f 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20  o continue with 
14b40 74 68 65 20 6e 65 78 74 20 6c 6f 6f 70 20 63 79  the next loop cy
14b50 63 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  cle */.  int add
14b60 72 46 69 72 73 74 3b 20 20 20 20 20 20 20 20 2f  rFirst;        /
14b70 2a 20 46 69 72 73 74 20 69 6e 73 74 72 75 63 74  * First instruct
14b80 69 6f 6e 20 6f 66 20 69 6e 74 65 72 69 6f 72 20  ion of interior 
14b90 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20  of the loop */. 
14ba0 20 75 38 20 69 46 72 6f 6d 3b 20 20 20 20 20 20   u8 iFrom;      
14bb0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
14bc0 65 6e 74 72 79 20 69 6e 20 74 68 65 20 46 52 4f  entry in the FRO
14bd0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38  M clause */.  u8
14be0 20 6f 70 2c 20 70 35 3b 20 20 20 20 20 20 20 20   op, p5;        
14bf0 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 61 6e      /* Opcode an
14c00 64 20 50 35 20 6f 66 20 74 68 65 20 6f 70 63 6f  d P5 of the opco
14c10 64 65 20 74 68 61 74 20 65 6e 64 73 20 74 68 65  de that ends the
14c20 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 70   loop */.  int p
14c30 31 2c 20 70 32 3b 20 20 20 20 20 20 20 20 20 20  1, p2;          
14c40 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 6f 66 20   /* Operands of 
14c50 74 68 65 20 6f 70 63 6f 64 65 20 75 73 65 64 20  the opcode used 
14c60 74 6f 20 65 6e 64 73 20 74 68 65 20 6c 6f 6f 70  to ends the loop
14c70 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
14c80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
14c90 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
14ca0 64 65 70 65 6e 64 73 20 6f 6e 20 70 6c 61 6e 2e  depends on plan.
14cb0 77 73 46 6c 61 67 73 20 2a 2f 0a 20 20 20 20 73  wsFlags */.    s
14cc0 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 69 6e  truct {.      in
14cd0 74 20 6e 49 6e 3b 20 20 20 20 20 20 20 20 20 20  t nIn;          
14ce0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14cf0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 49 6e 4c   entries in aInL
14d00 6f 6f 70 5b 5d 20 2a 2f 0a 20 20 20 20 20 20 73  oop[] */.      s
14d10 74 72 75 63 74 20 49 6e 4c 6f 6f 70 20 7b 0a 20  truct InLoop {. 
14d20 20 20 20 20 20 20 20 69 6e 74 20 69 43 75 72 3b         int iCur;
14d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14d40 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
14d50 20 75 73 65 64 20 62 79 20 74 68 69 73 20 49 4e   used by this IN
14d60 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20   operator */.   
14d70 20 20 20 20 20 69 6e 74 20 61 64 64 72 49 6e 54       int addrInT
14d80 6f 70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  op;         /* T
14d90 6f 70 20 6f 66 20 74 68 65 20 49 4e 20 6c 6f 6f  op of the IN loo
14da0 70 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 38 20  p */.        u8 
14db0 65 45 6e 64 4c 6f 6f 70 4f 70 3b 20 20 20 20 20  eEndLoopOp;     
14dc0 20 20 20 20 2f 2a 20 49 4e 20 4c 6f 6f 70 20 74      /* IN Loop t
14dd0 65 72 6d 69 6e 61 74 6f 72 2e 20 4f 50 5f 4e 65  erminator. OP_Ne
14de0 78 74 20 6f 72 20 4f 50 5f 50 72 65 76 20 2a 2f  xt or OP_Prev */
14df0 0a 20 20 20 20 20 20 7d 20 2a 61 49 6e 4c 6f 6f  .      } *aInLoo
14e00 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
14e10 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
14e20 74 20 65 61 63 68 20 6e 65 73 74 65 64 20 49 4e  t each nested IN
14e30 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20   operator */.   
14e40 20 7d 20 69 6e 3b 20 20 20 20 20 20 20 20 20 20   } in;          
14e50 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 77         /* Used w
14e60 68 65 6e 20 70 6c 61 6e 2e 77 73 46 6c 61 67 73  hen plan.wsFlags
14e70 26 57 48 45 52 45 5f 49 4e 5f 41 42 4c 45 20 2a  &WHERE_IN_ABLE *
14e80 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 43 6f  /.    Index *pCo
14e90 76 69 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 50  vidx;       /* P
14ea0 6f 73 73 69 62 6c 65 20 63 6f 76 65 72 69 6e 67  ossible covering
14eb0 20 69 6e 64 65 78 20 66 6f 72 20 57 48 45 52 45   index for WHERE
14ec0 5f 4d 55 4c 54 49 5f 4f 52 20 2a 2f 0a 20 20 7d  _MULTI_OR */.  }
14ed0 20 75 3b 0a 20 20 64 6f 75 62 6c 65 20 72 4f 70   u;.  double rOp
14ee0 74 43 6f 73 74 3b 20 20 20 20 20 20 2f 2a 20 22  tCost;      /* "
14ef0 4f 70 74 69 6d 61 6c 22 20 63 6f 73 74 20 66 6f  Optimal" cost fo
14f00 72 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  r this level */.
14f10 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
14f20 69 6e 67 20 66 69 65 6c 64 20 69 73 20 72 65 61  ing field is rea
14f30 6c 6c 79 20 6e 6f 74 20 70 61 72 74 20 6f 66 20  lly not part of 
14f40 74 68 65 20 63 75 72 72 65 6e 74 20 6c 65 76 65  the current leve
14f50 6c 2e 20 20 42 75 74 0a 20 20 2a 2a 20 77 65 20  l.  But.  ** we 
14f60 6e 65 65 64 20 61 20 70 6c 61 63 65 20 74 6f 20  need a place to 
14f70 63 61 63 68 65 20 76 69 72 74 75 61 6c 20 74 61  cache virtual ta
14f80 62 6c 65 20 69 6e 64 65 78 20 69 6e 66 6f 72 6d  ble index inform
14f90 61 74 69 6f 6e 20 66 6f 72 20 65 61 63 68 0a 20  ation for each. 
14fa0 20 2a 2a 20 76 69 72 74 75 61 6c 20 74 61 62 6c   ** virtual tabl
14fb0 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
14fc0 61 75 73 65 20 61 6e 64 20 74 68 65 20 57 68 65  ause and the Whe
14fd0 72 65 4c 65 76 65 6c 20 73 74 72 75 63 74 75 72  reLevel structur
14fe0 65 20 69 73 0a 20 20 2a 2a 20 61 20 63 6f 6e 76  e is.  ** a conv
14ff0 65 6e 69 65 6e 74 20 70 6c 61 63 65 20 73 69 6e  enient place sin
15000 63 65 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20  ce there is one 
15010 57 68 65 72 65 4c 65 76 65 6c 20 66 6f 72 20 65  WhereLevel for e
15020 61 63 68 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a  ach FROM clause.
15030 20 20 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 20 20    ** element..  
15040 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 64  */.  sqlite3_ind
15050 65 78 5f 69 6e 66 6f 20 2a 70 49 64 78 49 6e 66  ex_info *pIdxInf
15060 6f 3b 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 66  o;  /* Index inf
15070 6f 20 66 6f 72 20 6e 2d 74 68 20 73 6f 75 72 63  o for n-th sourc
15080 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e table */.};../
15090 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f  *.** Flags appro
150a0 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77  priate for the w
150b0 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65  ctrlFlags parame
150c0 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68  ter of sqlite3Wh
150d0 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e  ereBegin().** an
150e0 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e  d the WhereInfo.
150f0 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65  wctrlFlags membe
15100 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  r..*/.#define WH
15110 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
15120 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e  AL   0x0000 /* N
15130 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  o-op */.#define 
15140 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49  WHERE_ORDERBY_MI
15150 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a  N      0x0001 /*
15160 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
15170 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66  sing for min() f
15180 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
15190 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58  HERE_ORDERBY_MAX
151a0 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20        0x0002 /* 
151b0 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
151c0 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
151d0 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
151e0 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
151f0 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57  RED  0x0004 /* W
15200 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61  ant to do one-pa
15210 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  ss UPDATE/DELETE
15220 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
15230 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20  E_DUPLICATES_OK 
15240 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20     0x0008 /* Ok 
15250 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20  to return a row 
15260 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a  more than once *
15270 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
15280 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20  OMIT_OPEN_CLOSE 
15290 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65   0x0010 /* Table
152a0 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72   cursors are alr
152b0 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  eady open */.#de
152c0 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45  fine WHERE_FORCE
152d0 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78 30 30  _TABLE      0x00
152e0 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65  20 /* Do not use
152f0 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73   an index-only s
15300 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65  earch */.#define
15310 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f   WHERE_ONETABLE_
15320 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f  ONLY    0x0040 /
15330 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20  * Only code the 
15340 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61  1st table in pTa
15350 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65  bList */.#define
15360 20 57 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20   WHERE_AND_ONLY 
15370 20 20 20 20 20 20 20 20 30 78 30 30 38 30 20 2f          0x0080 /
15380 2a 20 44 6f 6e 27 74 20 75 73 65 20 69 6e 64 69  * Don't use indi
15390 63 65 73 20 66 6f 72 20 4f 52 20 74 65 72 6d 73  ces for OR terms
153a0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 57   */../*.** The W
153b0 48 45 52 45 20 63 6c 61 75 73 65 20 70 72 6f 63  HERE clause proc
153c0 65 73 73 69 6e 67 20 72 6f 75 74 69 6e 65 20 68  essing routine h
153d0 61 73 20 74 77 6f 20 68 61 6c 76 65 73 2e 20 20  as two halves.  
153e0 54 68 65 0a 2a 2a 20 66 69 72 73 74 20 70 61 72  The.** first par
153f0 74 20 64 6f 65 73 20 74 68 65 20 73 74 61 72 74  t does the start
15400 20 6f 66 20 74 68 65 20 57 48 45 52 45 20 6c 6f   of the WHERE lo
15410 6f 70 20 61 6e 64 20 74 68 65 20 73 65 63 6f 6e  op and the secon
15420 64 0a 2a 2a 20 68 61 6c 66 20 64 6f 65 73 20 74  d.** half does t
15430 68 65 20 74 61 69 6c 20 6f 66 20 74 68 65 20 57  he tail of the W
15440 48 45 52 45 20 6c 6f 6f 70 2e 20 20 41 6e 20 69  HERE loop.  An i
15450 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
15460 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
15470 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
15480 66 69 72 73 74 20 68 61 6c 66 20 61 6e 64 20 70  first half and p
15490 61 73 73 65 64 0a 2a 2a 20 69 6e 74 6f 20 74 68  assed.** into th
154a0 65 20 73 65 63 6f 6e 64 20 68 61 6c 66 20 74 6f  e second half to
154b0 20 67 69 76 65 20 73 6f 6d 65 20 63 6f 6e 74 69   give some conti
154c0 6e 75 69 74 79 2e 0a 2a 2f 0a 73 74 72 75 63 74  nuity..*/.struct
154d0 20 57 68 65 72 65 49 6e 66 6f 20 7b 0a 20 20 50   WhereInfo {.  P
154e0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
154f0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
15500 69 6e 67 20 61 6e 64 20 63 6f 64 65 20 67 65 6e  ing and code gen
15510 65 72 61 74 69 6e 67 20 63 6f 6e 74 65 78 74 20  erating context 
15520 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 54  */.  SrcList *pT
15530 61 62 4c 69 73 74 3b 20 20 20 20 20 20 20 20 2f  abList;        /
15540 2a 20 4c 69 73 74 20 6f 66 20 74 61 62 6c 65 73  * List of tables
15550 20 69 6e 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   in the join */.
15560 20 20 75 31 36 20 6e 4f 42 53 61 74 3b 20 20 20    u16 nOBSat;   
15570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15580 75 6d 62 65 72 20 6f 66 20 4f 52 44 45 52 20 42  umber of ORDER B
15590 59 20 74 65 72 6d 73 20 73 61 74 69 73 66 69 65  Y terms satisfie
155a0 64 20 62 79 20 69 6e 64 69 63 65 73 20 2a 2f 0a  d by indices */.
155b0 20 20 75 31 36 20 77 63 74 72 6c 46 6c 61 67 73    u16 wctrlFlags
155c0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
155d0 6c 61 67 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20  lags originally 
155e0 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65  passed to sqlite
155f0 33 57 68 65 72 65 42 65 67 69 6e 28 29 20 2a 2f  3WhereBegin() */
15600 0a 20 20 75 38 20 6f 6b 4f 6e 65 50 61 73 73 3b  .  u8 okOnePass;
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15620 4f 6b 20 74 6f 20 75 73 65 20 6f 6e 65 2d 70 61  Ok to use one-pa
15630 73 73 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72  ss algorithm for
15640 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a   UPDATE/DELETE *
15650 2f 0a 20 20 75 38 20 75 6e 74 65 73 74 65 64 54  /.  u8 untestedT
15660 65 72 6d 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  erms;         /*
15670 20 4e 6f 74 20 61 6c 6c 20 57 48 45 52 45 20 74   Not all WHERE t
15680 65 72 6d 73 20 72 65 73 6f 6c 76 65 64 20 62 79  erms resolved by
15690 20 6f 75 74 65 72 20 6c 6f 6f 70 20 2a 2f 0a 20   outer loop */. 
156a0 20 75 38 20 65 44 69 73 74 69 6e 63 74 3b 20 20   u8 eDistinct;  
156b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
156c0 65 20 6f 66 20 74 68 65 20 57 48 45 52 45 5f 44  e of the WHERE_D
156d0 49 53 54 49 4e 43 54 5f 2a 20 76 61 6c 75 65 73  ISTINCT_* values
156e0 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 6e 74 20   below */.  int 
156f0 69 54 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  iTop;           
15700 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 65 72        /* The ver
15710 79 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  y beginning of t
15720 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 20 2a 2f  he WHERE loop */
15730 0a 20 20 69 6e 74 20 69 43 6f 6e 74 69 6e 75 65  .  int iContinue
15740 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15750 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 63 6f 6e  Jump here to con
15760 74 69 6e 75 65 20 77 69 74 68 20 6e 65 78 74 20  tinue with next 
15770 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
15780 69 42 72 65 61 6b 3b 20 20 20 20 20 20 20 20 20  iBreak;         
15790 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65        /* Jump he
157a0 72 65 20 74 6f 20 62 72 65 61 6b 20 6f 75 74 20  re to break out 
157b0 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20  of the loop */. 
157c0 20 69 6e 74 20 6e 4c 65 76 65 6c 3b 20 20 20 20   int nLevel;    
157d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
157e0 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 6c  mber of nested l
157f0 6f 6f 70 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  oop */.  struct 
15800 57 68 65 72 65 43 6c 61 75 73 65 20 2a 70 57 43  WhereClause *pWC
15810 3b 20 20 2f 2a 20 44 65 63 6f 6d 70 6f 73 69 74  ;  /* Decomposit
15820 69 6f 6e 20 6f 66 20 74 68 65 20 57 48 45 52 45  ion of the WHERE
15830 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 64 6f 75   clause */.  dou
15840 62 6c 65 20 73 61 76 65 64 4e 51 75 65 72 79 4c  ble savedNQueryL
15850 6f 6f 70 3b 20 20 20 2f 2a 20 70 50 61 72 73 65  oop;   /* pParse
15860 2d 3e 6e 51 75 65 72 79 4c 6f 6f 70 20 6f 75 74  ->nQueryLoop out
15870 73 69 64 65 20 74 68 65 20 57 48 45 52 45 20 6c  side the WHERE l
15880 6f 6f 70 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  oop */.  double 
15890 6e 52 6f 77 4f 75 74 3b 20 20 20 20 20 20 20 20  nRowOut;        
158a0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
158b0 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74 70 75 74  number of output
158c0 20 72 6f 77 73 20 2a 2f 0a 20 20 57 68 65 72 65   rows */.  Where
158d0 4c 65 76 65 6c 20 61 5b 31 5d 3b 20 20 20 20 20  Level a[1];     
158e0 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
158f0 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 6e  ion about each n
15900 65 73 74 20 6c 6f 6f 70 20 69 6e 20 57 48 45 52  est loop in WHER
15910 45 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  E */.};../* Allo
15920 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 57  wed values for W
15930 68 65 72 65 49 6e 66 6f 2e 65 44 69 73 74 69 6e  hereInfo.eDistin
15940 63 74 20 61 6e 64 20 44 69 73 74 69 6e 63 74 43  ct and DistinctC
15950 74 78 2e 65 54 6e 63 74 54 79 70 65 20 2a 2f 0a  tx.eTnctType */.
15960 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
15970 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
15980 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
15990 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
159a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
159b0 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
159c0 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
159d0 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
159e0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
159f0 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
15a00 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
15a10 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
15a20 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
15a30 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
15a40 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
15a50 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
15a60 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
15a70 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
15a80 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
15a90 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
15aa0 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
15ab0 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
15ac0 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
15ad0 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
15ae0 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
15af0 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
15b00 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
15b10 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
15b20 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
15b30 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
15b40 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
15b50 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
15b60 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
15b70 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
15b80 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
15b90 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
15ba0 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
15bb0 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
15bc0 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
15bd0 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
15be0 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
15bf0 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
15c00 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
15c10 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
15c20 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
15c30 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
15c40 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
15c50 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
15c60 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a  the inner-most .
15c70 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65  ** context is se
15c80 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49  arched first.  I
15c90 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f  f no match is fo
15ca0 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75  und, the next ou
15cb0 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  ter.** context i
15cc0 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74  s checked.  If t
15cd0 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f  here is still no
15ce0 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74   match, the next
15cf0 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63   context.** is c
15d00 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72  hecked.  This pr
15d10 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20  ocess continues 
15d20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d  until either a m
15d30 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a  atch is found.**
15d40 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73   or all contexts
15d50 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65   are check.  Whe
15d60 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  n a match is fou
15d70 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d  nd, the nRef mem
15d80 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ber of.** the co
15d90 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67  ntext containing
15da0 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e   the match is in
15db0 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a  cremented. .**.*
15dc0 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20  * Each subquery 
15dd0 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43  gets a new NameC
15de0 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65  ontext.  The pNe
15df0 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20  xt field points 
15e00 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  to the.** NameCo
15e10 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72  ntext in the par
15e20 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73  ent query.  Thus
15e30 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20   the process of 
15e40 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20  scanning the.** 
15e50 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74  NameContext list
15e60 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
15e70 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67  searching throug
15e80 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f  h successively o
15e90 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69  uter.** subqueri
15ea0 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61  es looking for a
15eb0 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63   match..*/.struc
15ec0 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a  t NameContext {.
15ed0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
15ee0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61         /* The pa
15ef0 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73  rser */.  SrcLis
15f00 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f  t *pSrcList;   /
15f10 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  * One or more ta
15f20 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73  bles used to res
15f30 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  olve names */.  
15f40 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
15f50 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c  ;    /* Optional
15f60 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65   list of named e
15f70 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
15f80 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
15f90 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  o;   /* Informat
15fa0 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67  ion about aggreg
15fb0 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76  ates at this lev
15fc0 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74  el */.  NameCont
15fd0 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
15fe0 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
15ff0 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
16000 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
16010 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
16020 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16030 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
16040 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
16050 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
16060 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
16070 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
16080 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
16090 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
160a0 65 73 20 2a 2f 0a 20 20 75 38 20 6e 63 46 6c 61  es */.  u8 ncFla
160b0 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  gs;          /* 
160c0 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
160d0 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
160e0 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  below */.};../*.
160f0 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
16100 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f  s for the NameCo
16110 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66  ntext, ncFlags f
16120 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
16130 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78   NC_AllowAgg  0x
16140 30 31 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61  01    /* Aggrega
16150 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  te functions are
16160 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
16170 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41  .#define NC_HasA
16180 67 67 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a  gg    0x02    /*
16190 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   One or more agg
161a0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
161b0 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
161c0 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78   NC_IsCheck   0x
161d0 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  04    /* True if
161e0 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
161f0 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
16200 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
16210 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30  e NC_InAggFunc 0
16220 78 30 38 20 20 20 20 2f 2a 20 54 72 75 65 20 69  x08    /* True i
16230 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75  f analyzing argu
16240 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20  ments to an agg 
16250 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
16260 4e 43 5f 41 73 4d 61 79 62 65 20 20 20 30 78 31  NC_AsMaybe   0x1
16270 30 20 20 20 20 2f 2a 20 52 65 73 6f 6c 76 65 20  0    /* Resolve 
16280 74 6f 20 41 53 20 74 65 72 6d 73 20 6f 66 20 74  to AS terms of t
16290 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 6e  he result set on
162a0 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly.             
162b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162c0 2a 2a 20 69 66 20 6e 6f 20 6f 74 68 65 72 20 72  ** if no other r
162d0 65 73 6f 6c 75 74 69 6f 6e 20 69 73 20 61 76 61  esolution is ava
162e0 69 6c 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ilable */../*.**
162f0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
16300 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
16310 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
16320 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   all information
16330 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65  .** needed to ge
16340 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20  nerate code for 
16350 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
16360 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
16370 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74   nLimit is set t
16380 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73  o -1 if there is
16390 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65   no LIMIT clause
163a0 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65  .  nOffset is se
163b0 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68  t to 0..** If th
163c0 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63  ere is a LIMIT c
163d0 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65  lause, the parse
163e0 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f  r sets nLimit to
163f0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
16400 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e  e.** limit and n
16410 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61  Offset to the va
16420 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65  lue of the offse
16430 74 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65  t (or 0 if there
16440 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65   is not.** offse
16450 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f  t).  But later o
16460 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f  n, nLimit and nO
16470 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65  ffset become the
16480 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
16490 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45  s.** in the VDBE
164a0 20 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65   that record the
164b0 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65   limit and offse
164c0 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a  t counters..**.*
164d0 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d  * addrOpenEphm[]
164e0 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e   entries contain
164f0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
16500 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
16510 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65   opcodes..** The
16520 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73  se addresses mus
16530 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74  t be stored so t
16540 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61  hat we can go ba
16550 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a  ck and fill in.*
16560 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f  * the P4_KEYINFO
16570 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65   and P2 paramete
16580 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68  rs later.  Neith
16590 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e  er the KeyInfo n
165a0 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  or.** the number
165b0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50   of columns in P
165c0 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65  2 can be compute
165d0 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  d at the same ti
165e0 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f  me.** as the OP_
165f0 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63  OpenEphm instruc
16600 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65  tion is coded be
16610 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f  cause not.** eno
16620 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ugh information 
16630 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75  about the compou
16640 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77  nd query is know
16650 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e  n at that point.
16660 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  .** The KeyInfo 
16670 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e  for addrOpenTran
16680 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74  [0] and [1] cont
16690 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ains collating s
166a0 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20  equences.** for 
166b0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20  the result set. 
166c0 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
166d0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
166e0 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
166f0 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73  ing.** sequences
16700 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42   for the ORDER B
16710 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72  Y clause..*/.str
16720 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45  uct Select {.  E
16730 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
16740 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65        /* The fie
16750 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  lds of the resul
16760 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  t */.  u8 op;   
16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16780 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f   One of: TK_UNIO
16790 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45  N TK_ALL TK_INTE
167a0 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20  RSECT TK_EXCEPT 
167b0 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61 67  */.  u16 selFlag
167c0 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  s;          /* V
167d0 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75  arious SF_* valu
167e0 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d  es */.  int iLim
167f0 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f  it, iOffset;   /
16800 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
16810 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54  rs holding LIMIT
16820 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65   & OFFSET counte
16830 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  rs */.  int addr
16840 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b 20 20 20 2f  OpenEphm[3];   /
16850 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f  * OP_OpenEphem o
16860 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74  pcodes related t
16870 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f  o this select */
16880 0a 20 20 64 6f 75 62 6c 65 20 6e 53 65 6c 65 63  .  double nSelec
16890 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  tRow;     /* Est
168a0 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
168b0 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a   result rows */.
168c0 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b    SrcList *pSrc;
168d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
168e0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
168f0 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
16900 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
16910 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20  HERE clause */. 
16920 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
16930 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47  pBy;    /* The G
16940 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a  ROUP BY clause *
16950 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e  /.  Expr *pHavin
16960 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  g;         /* Th
16970 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
16980 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
16990 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54  OrderBy;    /* T
169a0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
169b0 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  se */.  Select *
169c0 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f  pPrior;        /
169d0 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69  * Prior select i
169e0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  n a compound sel
169f0 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  ect statement */
16a00 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74  .  Select *pNext
16a10 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
16a20 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20  t select to the 
16a30 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  left in a compou
16a40 6e 64 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nd */.  Select *
16a50 70 52 69 67 68 74 6d 6f 73 74 3b 20 20 20 20 2f  pRightmost;    /
16a60 2a 20 52 69 67 68 74 2d 6d 6f 73 74 20 73 65 6c  * Right-most sel
16a70 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
16a80 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
16a90 6e 74 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c  nt */.  Expr *pL
16aa0 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f  imit;          /
16ab0 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  * LIMIT expressi
16ac0 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
16ad0 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78  ot used. */.  Ex
16ae0 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20  pr *pOffset;    
16af0 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65       /* OFFSET e
16b00 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
16b10 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
16b20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
16b30 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
16b40 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e  Select.selFlags.
16b50 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69    The "SF" prefi
16b60 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  x stands for.** 
16b70 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a  "Select Flag"..*
16b80 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73  /.#define SF_Dis
16b90 74 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30  tinct        0x0
16ba0 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73  001  /* Output s
16bb0 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43  hould be DISTINC
16bc0 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  T */.#define SF_
16bd0 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20  Resolved        
16be0 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74  0x0002  /* Ident
16bf0 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e  ifiers have been
16c00 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65   resolved */.#de
16c10 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74  fine SF_Aggregat
16c20 65 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20  e       0x0004  
16c30 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72  /* Contains aggr
16c40 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
16c50 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73  */.#define SF_Us
16c60 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78  esEphemeral   0x
16c70 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68  0008  /* Uses th
16c80 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  e OpenEphemeral 
16c90 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  opcode */.#defin
16ca0 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20  e SF_Expanded   
16cb0 20 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20       0x0010  /* 
16cc0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
16cd0 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20  and() called on 
16ce0 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  this */.#define 
16cf0 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20  SF_HasTypeInfo  
16d00 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52     0x0020  /* FR
16d10 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61  OM subqueries ha
16d20 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74  ve Table metadat
16d30 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  a */.#define SF_
16d40 55 73 65 53 6f 72 74 65 72 20 20 20 20 20 20 20  UseSorter       
16d50 30 78 30 30 34 30 20 20 2f 2a 20 53 6f 72 74 20  0x0040  /* Sort 
16d60 75 73 69 6e 67 20 61 20 73 6f 72 74 65 72 20 2a  using a sorter *
16d70 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c  /.#define SF_Val
16d80 75 65 73 20 20 20 20 20 20 20 20 20 20 30 78 30  ues          0x0
16d90 30 38 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69  080  /* Synthesi
16da0 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20  zed from VALUES 
16db0 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
16dc0 65 20 53 46 5f 4d 61 74 65 72 69 61 6c 69 7a 65  e SF_Materialize
16dd0 20 20 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20       0x0100  /* 
16de0 46 6f 72 63 65 20 6d 61 74 65 72 69 61 6c 69 7a  Force materializ
16df0 61 74 69 6f 6e 20 6f 66 20 76 69 65 77 73 20 2a  ation of views *
16e00 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73  /.#define SF_Nes
16e10 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30  tedFrom      0x0
16e20 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  200  /* Part of 
16e30 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
16e40 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 0a  FROM clause */..
16e50 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  ./*.** The resul
16e60 74 73 20 6f 66 20 61 20 73 65 6c 65 63 74 20 63  ts of a select c
16e70 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65  an be distribute
16e80 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
16e90 73 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52 54 22  s.  The.** "SRT"
16ea0 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53   prefix means "S
16eb0 45 4c 45 43 54 20 52 65 73 75 6c 74 20 54 79 70  ELECT Result Typ
16ec0 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  e"..*/.#define S
16ed0 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20  RT_Union        
16ee0 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
16ef0 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  lt as keys in an
16f00 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
16f10 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20  e SRT_Except    
16f20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20     2  /* Remove 
16f30 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e  result from a UN
16f40 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  ION index */.#de
16f50 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20  fine SRT_Exists 
16f60 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72        3  /* Stor
16f70 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c  e 1 if the resul
16f80 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a  t is not empty *
16f90 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
16fa0 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a  scard      4  /*
16fb0 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65   Do not save the
16fc0 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72   results anywher
16fd0 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44  e */../* The ORD
16fe0 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
16ff0 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20  ignored for all 
17000 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a  of the above */.
17010 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c  #define Ignorabl
17020 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d  eOrderby(X) ((X-
17030 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73  >eDest)<=SRT_Dis
17040 63 61 72 64 29 0a 0a 23 64 65 66 69 6e 65 20 53  card)..#define S
17050 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20  RT_Output       
17060 35 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63  5  /* Output eac
17070 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  h row of result 
17080 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d  */.#define SRT_M
17090 65 6d 20 20 20 20 20 20 20 20 20 20 36 20 20 2f  em          6  /
170a0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
170b0 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  n a memory cell 
170c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53  */.#define SRT_S
170d0 65 74 20 20 20 20 20 20 20 20 20 20 37 20 20 2f  et          7  /
170e0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20  * Store results 
170f0 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
17100 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
17110 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 20  RT_Table        
17120 38 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  8  /* Store resu
17130 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
17140 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
17150 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  id */.#define SR
17160 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 20 39  T_EphemTab     9
17170 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e    /* Create tran
17180 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74  sient tab and st
17190 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62  ore like SRT_Tab
171a0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  le */.#define SR
171b0 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 30  T_Coroutine   10
171c0 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20    /* Generate a 
171d0 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65  single row of re
171e0 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  sult */../*.** A
171f0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
17200 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69  is object descri
17210 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74  bes where to put
17220 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20   of the results 
17230 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73  of.** a SELECT s
17240 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  tatement..*/.str
17250 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b  uct SelectDest {
17260 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20  .  u8 eDest;    
17270 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64       /* How to d
17280 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65  ispose of the re
17290 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52  sults.  On of SR
172a0 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20  T_* above. */.  
172b0 63 68 61 72 20 61 66 66 53 64 73 74 3b 20 20 20  char affSdst;   
172c0 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73    /* Affinity us
172d0 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53  ed when eDest==S
172e0 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20  RT_Set */.  int 
172f0 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 2f 2a  iSDParm;      /*
17300 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65   A parameter use
17310 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64  d by the eDest d
17320 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a  isposal method *
17330 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20  /.  int iSdst;  
17340 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
17350 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73  gister where res
17360 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e  ults are written
17370 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b   */.  int nSdst;
17380 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17390 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  r of registers a
173a0 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b 0a 0a  llocated */.};..
173b0 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64  /*.** During cod
173c0 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
173d0 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
173e0 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20  do inserts into 
173f0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a  AUTOINCREMENT .*
17400 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f  * tables, the fo
17410 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74  llowing informat
17420 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20  ion is attached 
17430 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61  to the Table.u.a
17440 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e  utoInc.p.** poin
17450 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f  ter of each auto
17460 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20  increment table 
17470 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73  to record some s
17480 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ide information 
17490 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65  that.** the code
174a0 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73   generator needs
174b0 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65  .  We have to ke
174c0 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74  ep per-table aut
174d0 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e  oincrement.** in
174e0 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73  formation in cas
174f0 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f  e inserts are do
17500 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  wn within trigge
17510 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f  rs.  Triggers do
17520 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79   not.** normally
17530 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69   coordinate thei
17540 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75  r activities, bu
17550 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20  t we do need to 
17560 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a  coordinate the.*
17570 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61  * loading and sa
17580 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72  ving of autoincr
17590 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ement informatio
175a0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  n..*/.struct Aut
175b0 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74  oincInfo {.  Aut
175c0 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b  oincInfo *pNext;
175d0 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20     /* Next info 
175e0 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20  block in a list 
175f0 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20  of them all */. 
17600 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
17610 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
17620 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  this info block 
17630 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69  refers to */.  i
17640 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
17650 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
17660 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
17670 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
17680 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74  ng pTab */.  int
17690 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20   regCtr;        
176a0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
176b0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68  ister holding th
176c0 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20  e rowid counter 
176d0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a  */.};../*.** Siz
176e0 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e of the column 
176f0 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  cache.*/.#ifndef
17700 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
17710 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  HE.# define SQLI
17720 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30  TE_N_COLCACHE 10
17730 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
17740 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74  t least one inst
17750 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
17760 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
17770 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
17780 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20  ach .** trigger 
17790 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65  that may be fire
177a0 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20  d while parsing 
177b0 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  an INSERT, UPDAT
177c0 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73  E or DELETE.** s
177d0 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75  tatement. All su
177e0 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73  ch objects are s
177f0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e  tored in the lin
17800 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
17810 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69  at.** Parse.pTri
17820 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65  ggerPrg and dele
17830 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65  ted once stateme
17840 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68  nt compilation h
17850 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c  as been.** compl
17860 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64  eted..**.** A Vd
17870 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  be sub-program t
17880 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
17890 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e  he body and WHEN
178a0 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67   clause of trigg
178b0 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  er.** TriggerPrg
178c0 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d  .pTrigger, assum
178d0 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e  ing a default ON
178e0 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
178f0 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72   of.** TriggerPr
17900 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f  g.orconf, is sto
17910 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67  red in the Trigg
17920 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76  erPrg.pProgram v
17930 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  ariable..** The 
17940 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
17950 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e  g list never con
17960 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65  tains two entrie
17970 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a  s with the same.
17980 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f  ** values for bo
17990 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20  th pTrigger and 
179a0 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  orconf..**.** Th
179b0 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
179c0 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c  lmask[0] variabl
179d0 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61  e is set to a ma
179e0 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
179f0 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20  mns.** accessed 
17a00 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72  (or set to 0 for
17a10 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20   triggers fired 
17a20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49  as a result of I
17a30 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d  NSERT .** statem
17a40 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79  ents). Similarly
17a50 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  , the TriggerPrg
17a60 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72  .aColmask[1] var
17a70 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a  iable is set to.
17a80 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77  ** a mask of new
17a90 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20  .* columns used 
17aa0 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  by the program..
17ab0 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
17ac0 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72  rPrg {.  Trigger
17ad0 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20   *pTrigger;     
17ae0 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73   /* Trigger this
17af0 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64   program was cod
17b00 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69  ed from */.  Tri
17b10 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20  ggerPrg *pNext; 
17b20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74       /* Next ent
17b30 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69  ry in Parse.pTri
17b40 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a  ggerPrg list */.
17b50 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
17b60 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f  rogram;   /* Pro
17b70 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  gram implementin
17b80 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e  g pTrigger/orcon
17b90 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e  f */.  int orcon
17ba0 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  f;             /
17bb0 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
17bc0 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a  FLICT policy */.
17bd0 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32    u32 aColmask[2
17be0 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ];        /* Mas
17bf0 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77  ks of old.*, new
17c00 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73  .* columns acces
17c10 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  sed */.};../*.**
17c20 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74   The yDbMask dat
17c30 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69  atype for the bi
17c40 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74  tmask of all att
17c50 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
17c60 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
17c70 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
17c80 20 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 33   typedef sqlite3
17c90 5f 75 69 6e 74 36 34 20 79 44 62 4d 61 73 6b 3b  _uint64 yDbMask;
17ca0 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
17cb0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44   unsigned int yD
17cc0 62 4d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f  bMask;.#endif../
17cd0 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73  *.** An SQL pars
17ce0 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63  er context.  A c
17cf0 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75  opy of this stru
17d00 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
17d10 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70  through.** the p
17d20 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69  arser and down i
17d30 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73  nto all the pars
17d40 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e  er action routin
17d50 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
17d60 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e   carry around in
17d70 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
17d80 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20  s global to the 
17d90 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a  entire parse..**
17da0 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72  .** The structur
17db0 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74  e is divided int
17dc0 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68  o two parts.  Wh
17dd0 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  en the parser an
17de0 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61  d code.** genera
17df0 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76  te call themselv
17e00 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20  es recursively, 
17e10 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f  the first part o
17e20 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a  f the structure.
17e30 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ** is constant b
17e40 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  ut the second pa
17e50 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74  rt is reset at t
17e60 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64  he beginning and
17e70 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20   end of.** each 
17e80 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  recursion..**.**
17e90 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20   The nTableLock 
17ea0 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76  and aTableLock v
17eb0 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c  ariables are onl
17ec0 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68  y used if the sh
17ed0 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66  ared-cache .** f
17ee0 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
17ef0 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64  d (if sqlite3Tsd
17f00 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74  ()->useSharedDat
17f10 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79  a is true). They
17f20 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
17f30 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66  store the set of
17f40 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71   table-locks req
17f50 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61  uired by the sta
17f60 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20  tement being.** 
17f70 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69  compiled. Functi
17f80 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  on sqlite3TableL
17f90 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f  ock() is used to
17fa0 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20   add entries to 
17fb0 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a  the.** list..*/.
17fc0 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20  struct Parse {. 
17fd0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
17fe0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69        /* The mai
17ff0 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63  n database struc
18000 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ture */.  char *
18010 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f  zErrMsg;       /
18020 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  * An error messa
18030 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56  ge */.  Vdbe *pV
18040 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dbe;         /* 
18050 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78  An engine for ex
18060 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65  ecuting database
18070 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69   bytecode */.  i
18080 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
18090 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f      /* Return co
180a0 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f  de from executio
180b0 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d  n */.  u8 colNam
180c0 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54  esSet;      /* T
180d0 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c  RUE after OP_Col
180e0 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e  umnName has been
180f0 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65   issued to pVdbe
18100 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63   */.  u8 checkSc
18110 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61  hema;      /* Ca
18120 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b  uses schema cook
18130 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61  ie check after a
18140 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20  n error */.  u8 
18150 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20  nested;         
18160 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
18170 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74  ested calls to t
18180 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67  he parser/code g
18190 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38  enerator */.  u8
181a0 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20   nTempReg;      
181b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
181c0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
181d0 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b  ers in aTempReg[
181e0 5d 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 49  ] */.  u8 nTempI
181f0 6e 55 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 4e  nUse;       /* N
18200 75 6d 62 65 72 20 6f 66 20 61 54 65 6d 70 52 65  umber of aTempRe
18210 67 5b 5d 20 63 75 72 72 65 6e 74 6c 79 20 63 68  g[] currently ch
18220 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 75  ecked out */.  u
18230 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20 20  8 nColCache;    
18240 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18250 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
18260 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 75 38 20  Cache[] */.  u8 
18270 69 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20  iColCache;      
18280 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
18290 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 74  in aColCache[] t
182a0 6f 20 72 65 70 6c 61 63 65 20 2a 2f 0a 20 20 75  o replace */.  u
182b0 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20  8 isMultiWrite; 
182c0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
182d0 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64  tatement may mod
182e0 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69  ify/insert multi
182f0 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38  ple rows */.  u8
18300 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20   mayAbort;      
18310 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
18320 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f  atement may thro
18330 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
18340 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 61 54  tion */.  int aT
18350 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f  empReg[8];     /
18360 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66  * Holding area f
18370 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  or temporary reg
18380 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20  isters */.  int 
18390 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  nRangeReg;      
183a0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
183b0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
183c0 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
183d0 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t iRangeReg;    
183e0 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69     /* First regi
183f0 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72  ster in temporar
18400 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
18410 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
18420 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
18430 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73  mber of errors s
18440 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61  een */.  int nTa
18450 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
18460 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69   Number of previ
18470 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  ously allocated 
18480 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a  VDBE cursors */.
18490 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
184a0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
184b0 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
184c0 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
184d0 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20    int nSet;     
184e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
184f0 20 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f   of sets used so
18500 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
18510 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nce;           /
18520 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f  * Number of OP_O
18530 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  nce instructions
18540 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
18550 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20   ckBase;        
18560 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
18570 65 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e  er of data durin
18580 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  g check constrai
18590 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  nts */.  int iCa
185a0 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  cheLevel;     /*
185b0 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20   ColCache valid 
185c0 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d  when aColCache[]
185d0 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c  .iLevel<=iCacheL
185e0 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43  evel */.  int iC
185f0 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f  acheCnt;       /
18600 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74  * Counter used t
18610 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43  o generate aColC
18620 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65  ache[].lru value
18630 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43  s */.  struct yC
18640 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e  olCache {.    in
18650 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
18660 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72      /* Table cur
18670 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
18680 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20    int iColumn;  
18690 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
186a0 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a   column number *
186b0 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67  /.    u8 tempReg
186c0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ;           /* i
186d0 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65  Reg is a temp re
186e0 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64  gister that need
186f0 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f  s to be freed */
18700 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b  .    int iLevel;
18710 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
18720 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20  sting level */. 
18730 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20     int iReg;    
18740 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20           /* Reg 
18750 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68  with value of th
18760 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61  is column. 0 mea
18770 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20  ns none. */.    
18780 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20  int lru;        
18790 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72        /* Least r
187a0 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74  ecently used ent
187b0 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c  ry has the small
187c0 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d  est value */.  }
187d0 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54   aColCache[SQLIT
187e0 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20  E_N_COLCACHE];  
187f0 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20  /* One for each 
18800 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74  column cache ent
18810 72 79 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  ry */.  yDbMask 
18820 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20  writeMask;   /* 
18830 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72  Start a write tr
18840 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65  ansaction on the
18850 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  se databases */.
18860 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65    yDbMask cookie
18870 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73  Mask;  /* Bitmas
18880 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69  k of schema veri
18890 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a  fied databases *
188a0 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 47 6f  /.  int cookieGo
188b0 74 6f 3b 20 20 20 20 20 20 2f 2a 20 41 64 64 72  to;      /* Addr
188c0 65 73 73 20 6f 66 20 4f 50 5f 47 6f 74 6f 20 74  ess of OP_Goto t
188d0 6f 20 63 6f 6f 6b 69 65 20 76 65 72 69 66 69 65  o cookie verifie
188e0 72 20 73 75 62 72 6f 75 74 69 6e 65 20 2a 2f 0a  r subroutine */.
188f0 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75    int cookieValu
18900 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  e[SQLITE_MAX_ATT
18910 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61  ACHED+2];  /* Va
18920 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20  lues of cookies 
18930 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69  to verify */.  i
18940 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20  nt regRowid;    
18950 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
18960 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66  holding rowid of
18970 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e   CREATE TABLE en
18980 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  try */.  int reg
18990 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Root;         /*
189a0 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
189b0 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  g root page numb
189c0 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63  er for new objec
189d0 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78  ts */.  int nMax
189e0 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Arg;         /* 
189f0 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20  Max args passed 
18a00 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  to user function
18a10 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20   by sub-program 
18a20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74  */.  Token const
18a30 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d  raintName;/* Nam
18a40 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61  e of the constra
18a50 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65  int currently be
18a60 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 23 69  ing parsed */.#i
18a70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
18a80 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
18a90 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b   int nTableLock;
18aa0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18ab0 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54  r of locks in aT
18ac0 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61  ableLock */.  Ta
18ad0 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c  bleLock *aTableL
18ae0 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64  ock; /* Required
18af0 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72   table locks for
18b00 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
18b10 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41  de */.#endif.  A
18b20 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e  utoincInfo *pAin
18b30 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  c;  /* Informati
18b40 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43  on about AUTOINC
18b50 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20  REMENT counters 
18b60 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  */..  /* Informa
18b70 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20  tion used while 
18b80 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20 70  coding trigger p
18b90 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61  rograms. */.  Pa
18ba0 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20  rse *pToplevel; 
18bb0 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75     /* Parse stru
18bc0 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70  cture for main p
18bd0 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29  rogram (or NULL)
18be0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72   */.  Table *pTr
18bf0 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61  iggerTab;  /* Ta
18c00 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65  ble triggers are
18c10 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72   being coded for
18c20 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 51 75   */.  double nQu
18c30 65 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20 45 73  eryLoop;   /* Es
18c40 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
18c50 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
18c60 61 20 71 75 65 72 79 20 2a 2f 0a 20 20 75 33 32  a query */.  u32
18c70 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20   oldmask;       
18c80 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64    /* Mask of old
18c90 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
18ca0 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e  enced */.  u32 n
18cb0 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ewmask;         
18cc0 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a  /* Mask of new.*
18cd0 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
18ce0 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69  ced */.  u8 eTri
18cf0 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a  ggerOp;       /*
18d00 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
18d10 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45  NSERT or TK_DELE
18d20 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f  TE */.  u8 eOrco
18d30 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
18d40 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
18d50 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74  ICT policy for t
18d60 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a  rigger steps */.
18d70 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67    u8 disableTrig
18d80 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74  gers;  /* True t
18d90 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65  o disable trigge
18da0 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 41 62 6f 76  rs */..  /* Abov
18db0 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65  e is constant be
18dc0 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73  tween recursions
18dd0 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65  .  Below is rese
18de0 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  t before and aft
18df0 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63  er.  ** each rec
18e00 75 72 73 69 6f 6e 20 2a 2f 0a 0a 20 20 69 6e 74  ursion */..  int
18e10 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20   nVar;          
18e20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
18e30 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65   of '?' variable
18e40 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51  s seen in the SQ
18e50 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  L so far */.  in
18e60 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20  t nzVar;        
18e70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18e80 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73  r of available s
18e90 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20  lots in azVar[] 
18ea0 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b  */.  u8 explain;
18eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18ec0 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58  * True if the EX
18ed0 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f  PLAIN flag is fo
18ee0 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79  und on the query
18ef0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
18f00 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
18f10 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72  ABLE.  u8 declar
18f20 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20  eVtab;          
18f30 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69   /* True if insi
18f40 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  de sqlite3_decla
18f50 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69  re_vtab() */.  i
18f60 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20  nt nVtabLock;   
18f70 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
18f80 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61  er of virtual ta
18f90 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a  bles to lock */.
18fa0 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c  #endif.  int nAl
18fb0 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ias;            
18fc0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
18fd0 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20 73  aliased result s
18fe0 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
18ff0 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
19000 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
19010 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69  ression tree hei
19020 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73  ght of current s
19030 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66  ub-select */.#if
19040 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
19050 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69  _EXPLAIN.  int i
19060 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20  SelectId;       
19070 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75       /* ID of cu
19080 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72  rrent select for
19090 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20   EXPLAIN output 
190a0 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65  */.  int iNextSe
190b0 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f  lectId;        /
190c0 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65  * Next available
190d0 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45   select ID for E
190e0 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f  XPLAIN output */
190f0 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a  .#endif.  char *
19100 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20  *azVar;         
19110 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20      /* Pointers 
19120 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72 61  to names of para
19130 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62 65  meters */.  Vdbe
19140 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20   *pReprepare;   
19150 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e        /* VM bein
19160 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71  g reprepared (sq
19170 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29  lite3Reprepare()
19180 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 41 6c 69  ) */.  int *aAli
19190 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  as;             
191a0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 75 73 65   /* Register use
191b0 64 20 74 6f 20 68 6f 6c 64 20 61 6c 69 61 73 65  d to hold aliase
191c0 64 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 63 6f  d result */.  co
191d0 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b  nst char *zTail;
191e0 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53          /* All S
191f0 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65  QL text past the
19200 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20   last semicolon 
19210 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c  parsed */.  Tabl
19220 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20  e *pNewTable;   
19230 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65        /* A table
19240 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
19250 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42  ed by CREATE TAB
19260 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  LE */.  Trigger 
19270 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
19280 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
19290 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
192a0 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
192b0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
192c0 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
192d0 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
192e0 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
192f0 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20  h callbacks */. 
19300 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65   Token sNameToke
19310 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  n;         /* To
19320 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
19330 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
19340 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  ct name */.  Tok
19350 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20  en sLastToken;  
19360 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61         /* The la
19370 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20  st token parsed 
19380 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
19390 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
193a0 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67  BLE.  Token sArg
193b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
193c0 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74  /* Complete text
193d0 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67   of a module arg
193e0 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65  ument */.  Table
193f0 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20   **apVtabLock;  
19400 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
19410 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  to virtual table
19420 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e  s needing lockin
19430 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61  g */.#endif.  Ta
19440 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b  ble *pZombieTab;
19450 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
19460 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  of Table objects
19470 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72   to delete after
19480 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54   code gen */.  T
19490 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67  riggerPrg *pTrig
194a0 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b  gerPrg;  /* Link
194b0 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64  ed list of coded
194c0 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 7d 3b 0a   triggers */.};.
194d0 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
194e0 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  ue if currently 
194f0 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65  inside an sqlite
19500 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
19510 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66   call..*/.#ifdef
19520 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
19530 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66  TUALTABLE.  #def
19540 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
19550 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  TAB 0.#else.  #d
19560 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
19570 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64  _VTAB (pParse->d
19580 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64  eclareVtab).#end
19590 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
195a0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
195b0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
195c0 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64   can be declared
195d0 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20   on a stack and 
195e0 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20  used.** to save 
195f0 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43  the Parse.zAuthC
19600 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20  ontext value so 
19610 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
19620 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a  estored later..*
19630 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  /.struct AuthCon
19640 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63  text {.  const c
19650 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
19660 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65  t;   /* Put save
19670 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  d Parse.zAuthCon
19680 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50  text here */.  P
19690 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
196a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
196b0 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  e Parse structur
196c0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42  e */.};../*.** B
196d0 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f  itfield flags fo
196e0 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61  r P5 value in va
196f0 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a  rious opcodes..*
19700 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
19710 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30  _NCHANGE       0
19720 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x01    /* Set to
19730 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61   update db->nCha
19740 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nge */.#define O
19750 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
19760 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53      0x02    /* S
19770 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
19780 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64  >lastRowid */.#d
19790 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55  efine OPFLAG_ISU
197a0 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20  PDATE      0x04 
197b0 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e     /* This OP_In
197c0 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55  sert is an sql U
197d0 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
197e0 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20   OPFLAG_APPEND  
197f0 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a        0x08    /*
19800 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20   This is likely 
19810 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20  to be an append 
19820 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
19830 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
19840 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74  0x10    /* Try t
19850 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69  o avoid a seek i
19860 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20  n BtreeInsert() 
19870 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
19880 47 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20 20  G_CLEARCACHE    
19890 30 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61 72  0x20    /* Clear
198a0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 61   pseudo-table ca
198b0 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e  che in OP_Column
198c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
198d0 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
198e0 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x40    /* OP_C
198f0 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
19900 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a  for length() */.
19910 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54  #define OPFLAG_T
19920 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38  YPEOFARG     0x8
19930 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
19940 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
19950 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66  typeof() */.#def
19960 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  ine OPFLAG_BULKC
19970 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20  SR       0x01   
19980 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73   /* OP_Open** us
19990 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20  ed to open bulk 
199a0 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  cursor */.#defin
199b0 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  e OPFLAG_P2ISREG
199c0 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f         0x02    /
199d0 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a  * P2 to OP_Open*
199e0 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  * is a register 
199f0 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e  number */.#defin
19a00 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
19a10 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
19a20 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73  * OP_Compare: us
19a30 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  e the permutatio
19a40 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68  n */../*. * Each
19a50 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74   trigger present
19a60 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
19a70 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65   schema is store
19a80 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  d as an instance
19a90 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72   of. * struct Tr
19aa0 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f  igger. . *. * Po
19ab0 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
19ac0 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
19ad0 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
19ae0 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
19af0 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
19b00 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
19b10 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
19b20 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
19b30 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20  esents the . *  
19b40 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69    database). Thi
19b50 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72  s allows Trigger
19b60 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62   structures to b
19b70 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e  e retrieved by n
19b80 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74  ame.. * 2. All t
19b90 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
19ba0 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ed with a single
19bb0 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69   table form a li
19bc0 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67  nked list, using
19bd0 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74   the. *    pNext
19be0 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63   member of struc
19bf0 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69  t Trigger. A poi
19c00 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
19c10 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
19c20 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69  . *    linked li
19c30 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  st is stored as 
19c40 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d  the "pTrigger" m
19c50 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73  ember of the ass
19c60 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74  ociated. *    st
19c70 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20  ruct Table.. *. 
19c80 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74  * The "step_list
19c90 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20  " member points 
19ca0 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
19cb0 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64  ment of a linked
19cc0 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e   list. * contain
19cd0 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
19ce0 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
19cf0 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20   as the trigger 
19d00 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72  program.. */.str
19d10 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20  uct Trigger {.  
19d20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
19d30 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
19d40 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67  ame of the trigg
19d50 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  er              
19d60 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63            */.  c
19d70 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20  har *table;     
19d80 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61         /* The ta
19d90 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
19da0 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
19db0 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38   applies */.  u8
19dc0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
19dd0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
19de0 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
19df0 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
19e00 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20          */.  u8 
19e10 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20  tr_tm;          
19e20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
19e30 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54  RIGGER_BEFORE, T
19e40 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a  RIGGER_AFTER */.
19e50 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20    Expr *pWhen;  
19e60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
19e70 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
19e80 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28  the expression (
19e90 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
19ea0 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d    IdList *pColum
19eb0 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20  ns;       /* If 
19ec0 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54  this is an UPDAT
19ed0 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  E OF <column-lis
19ee0 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20  t> trigger,.    
19ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f00 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f           the <co
19f10 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74  lumn-list> is st
19f20 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53  ored here */.  S
19f30 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
19f40 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
19f50 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
19f60 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68  trigger */.  Sch
19f70 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b  ema *pTabSchema;
19f80 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
19f90 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
19fa0 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ble */.  Trigger
19fb0 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b  Step *step_list;
19fc0 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66   /* Link list of
19fd0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
19fe0 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20   steps          
19ff0 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20     */.  Trigger 
1a000 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
1a010 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20  /* Next trigger 
1a020 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1a030 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a  the table */.};.
1a040 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72  ./*.** A trigger
1a050 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46   is either a BEF
1a060 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20  ORE or an AFTER 
1a070 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f  trigger.  The fo
1a080 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74  llowing constant
1a090 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77  s.** determine w
1a0a0 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20  hich. .**.** If 
1a0b0 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70  there are multip
1a0c0 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75  le triggers, you
1a0d0 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42   might of some B
1a0e0 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41  EFORE and some A
1a0f0 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74  FTER..** In that
1a100 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73   cases, the cons
1a110 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20  tants below can 
1a120 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72  be ORed together
1a130 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49  ..*/.#define TRI
1a140 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23  GGER_BEFORE  1.#
1a150 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41  define TRIGGER_A
1a160 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20  FTER   2../*. * 
1a170 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
1a180 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1a190 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
1a1a0 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
1a1b0 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
1a1c0 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
1a1d0 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
1a1e0 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63  . . *. * Instanc
1a1f0 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
1a200 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f  ggerStep are sto
1a210 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20  red in a singly 
1a220 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e  linked list (lin
1a230 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65  ked. * using the
1a240 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29   "pNext" member)
1a250 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74   referenced by t
1a260 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
1a270 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a  ember of the . *
1a280 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75   associated stru
1a290 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61  ct Trigger insta
1a2a0 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65  nce. The first e
1a2b0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69  lement of the li
1a2c0 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20  nked list is. * 
1a2d0 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f  the first step o
1a2e0 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72  f the trigger-pr
1a2f0 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68  ogram.. * . * Th
1a300 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
1a310 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
1a320 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
1a330 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
1a340 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
1a350 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
1a360 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
1a370 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
1a380 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
1a390 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75   by the . * valu
1a3a0 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c  e of "op" as fol
1a3b0 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20  lows:. *. * (op 
1a3c0 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a  == TK_INSERT). *
1a3d0 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74   orconf    -> st
1a3e0 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46  ores the ON CONF
1a3f0 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20  LICT algorithm. 
1a400 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49  * pSelect   -> I
1a410 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1a420 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c  ERT INTO ... SEL
1a430 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  ECT ... statemen
1a440 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
1a450 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
1a460 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  res a pointer to
1a470 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
1a480 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65  ement. Otherwise
1a490 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74   NULL.. * target
1a4a0 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
1a4b0 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65  olding the quote
1a4c0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1a4d0 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e  ble to insert in
1a4e0 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  to.. * pExprList
1a4f0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
1a500 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
1a510 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
1a520 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
1a530 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1a540 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20  s stores values 
1a550 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  to be inserted. 
1a560 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1a570 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20   * pIdList   -> 
1a580 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
1a590 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c  SERT INTO ... (<
1a5a0 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56  column-names>) V
1a5b0 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20  ALUES ... . *   
1a5c0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
1a5d0 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20  ment, then this 
1a5e0 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d  stores the colum
1a5f0 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a  n-names to be. *
1a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1a610 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a  serted into.. *.
1a620 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c   * (op == TK_DEL
1a630 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20  ETE). * target  
1a640 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c    -> A token hol
1a650 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20  ding the quoted 
1a660 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1a670 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d  e to delete from
1a680 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
1a690 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
1a6a0 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  se of the DELETE
1a6b0 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
1a6c0 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
1a6d0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1a6e0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1a6f0 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b   * . * (op == TK
1a700 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67  _UPDATE). * targ
1a710 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e  et    -> A token
1a720 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f   holding the quo
1a730 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1a740 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20  table to update 
1a750 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65  rows of.. * pWhe
1a760 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
1a770 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
1a780 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1a790 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
1a7a0 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
1a7b0 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
1a7c0 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c   NULL.. * pExprL
1a7d0 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66  ist -> A list of
1a7e0 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20   the columns to 
1a7f0 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65  update and the e
1a800 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70  xpressions to up
1a810 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20  date. *         
1a820 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65       them to. Se
1a830 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  e sqlite3Update(
1a840 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  ) documentation 
1a850 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a  of "pChanges". *
1a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
1a870 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a  gument.. * . */.
1a880 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
1a890 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  ep {.  u8 op;   
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1a8b0 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
1a8c0 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1a8d0 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54  NSERT, TK_SELECT
1a8e0 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b   */.  u8 orconf;
1a8f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
1a900 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a  _Rollback etc. *
1a910 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  /.  Trigger *pTr
1a920 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ig;      /* The 
1a930 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69  trigger that thi
1a940 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74  s step is a part
1a950 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20   of */.  Select 
1a960 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
1a970 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74   SELECT statment
1a980 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52   or RHS of INSER
1a990 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54  T INTO .. SELECT
1a9a0 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20   ... */.  Token 
1a9b0 74 61 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f  target;        /
1a9c0 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
1a9d0 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
1a9e0 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
1a9f0 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
1aa00 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
1aa10 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
1aa20 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
1aa30 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
1aa40 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
1aa50 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
1aa60 50 44 41 54 45 2e 20 20 56 41 4c 55 45 53 20 63  PDATE.  VALUES c
1aa70 6c 61 75 73 65 20 66 6f 72 20 49 4e 53 45 52 54  lause for INSERT
1aa80 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49   */.  IdList *pI
1aa90 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f  dList;     /* Co
1aaa0 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49  lumn names for I
1aab0 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67  NSERT */.  Trigg
1aac0 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20  erStep *pNext;  
1aad0 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c  /* Next in the l
1aae0 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72  ink-list */.  Tr
1aaf0 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74  iggerStep *pLast
1ab00 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65  ;  /* Last eleme
1ab10 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e  nt in link-list.
1ab20 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65   Valid for 1st e
1ab30 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a  lem only */.};..
1ab40 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
1ab50 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
1ab60 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
1ab70 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73  on used by the s
1ab80 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72  qliteFix....** r
1ab90 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20  outines as they 
1aba0 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74  walk the parse t
1abb0 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61  ree to make data
1abc0 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a  base references.
1abd0 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a  ** explicit.  .*
1abe0 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
1abf0 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72   DbFixer DbFixer
1ac00 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72  ;.struct DbFixer
1ac10 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
1ac20 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  se;      /* The 
1ac30 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e  parsing context.
1ac40 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73    Error messages
1ac50 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f   written here */
1ac60 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
1ac70 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74  ma;    /* Fix it
1ac80 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65  ems to this sche
1ac90 6d 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ma */.  const ch
1aca0 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d  ar *zDb;    /* M
1acb0 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a  ake sure all obj
1acc0 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ects are contain
1acd0 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62  ed in this datab
1ace0 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ase */.  const c
1acf0 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20  har *zType;  /* 
1ad00 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Type of the cont
1ad10 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
1ad20 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1ad30 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  */.  const Token
1ad40 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65   *pName; /* Name
1ad50 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1ad60 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1ad70 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d  or messages */.}
1ad80 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  ;../*.** An obje
1ad90 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63  cted used to acc
1ada0 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74  umulate the text
1adb0 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65   of a string whe
1adc0 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20  re we.** do not 
1add0 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77  necessarily know
1ade0 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72   how big the str
1adf0 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74  ing will be in t
1ae00 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
1ae10 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73  t StrAccum {.  s
1ae20 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1ae30 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
1ae40 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
1ae50 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
1ae60 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
1ae70 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f  zBase;         /
1ae80 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74  * A base allocat
1ae90 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d  ion.  Not from m
1aea0 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72  alloc. */.  char
1aeb0 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20   *zText;        
1aec0 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63   /* The string c
1aed0 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20  ollected so far 
1aee0 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b  */.  int  nChar;
1aef0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
1af00 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
1af10 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  g so far */.  in
1af20 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  t  nAlloc;      
1af30 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20     /* Amount of 
1af40 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
1af50 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e  in zText */.  in
1af60 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20  t  mxAlloc;     
1af70 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c     /* Maximum al
1af80 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65 6e  lowed string len
1af90 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 6d 61  gth */.  u8   ma
1afa0 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 2f 2a  llocFailed;   /*
1afb0 20 42 65 63 6f 6d 65 73 20 74 72 75 65 20 69 66   Becomes true if
1afc0 20 61 6e 79 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f   any memory allo
1afd0 63 61 74 69 6f 6e 20 66 61 69 6c 73 20 2a 2f 0a  cation fails */.
1afe0 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63    u8   useMalloc
1aff0 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e  ;      /* 0: non
1b000 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44 62  e,  1: sqlite3Db
1b010 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69  Malloc,  2: sqli
1b020 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20  te3_malloc */.  
1b030 75 38 20 20 20 74 6f 6f 42 69 67 3b 20 20 20 20  u8   tooBig;    
1b040 20 20 20 20 20 2f 2a 20 42 65 63 6f 6d 65 73 20       /* Becomes 
1b050 74 72 75 65 20 69 66 20 73 74 72 69 6e 67 20 73  true if string s
1b060 69 7a 65 20 65 78 63 65 65 64 73 20 6c 69 6d 69  ize exceeds limi
1b070 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ts */.};../*.** 
1b080 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
1b090 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
1b0a0 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
1b0b0 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
1b0c0 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
1b0d0 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
1b0e0 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
1b0f0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1b100 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
1b110 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
1b120 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
1b130 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
1b140 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
1b150 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
1b160 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
1b170 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
1b180 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
1b190 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
1b1a0 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
1b1b0 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
1b1c0 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
1b1d0 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
1b1e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1b1f0 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
1b200 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e  red here */.} In
1b210 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53  itData;../*.** S
1b220 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1b230 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69  ing global confi
1b240 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f  guration data fo
1b250 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  r the SQLite lib
1b260 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rary..**.** This
1b270 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20   structure also 
1b280 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74  contains some st
1b290 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ate information.
1b2a0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74  .*/.struct Sqlit
1b2b0 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74  e3Config {.  int
1b2c0 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20   bMemstat;      
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b2e0 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1b2f0 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a   memory status *
1b300 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74  /.  int bCoreMut
1b310 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1b320 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1b330 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74   enable core mut
1b340 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
1b350 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20  FullMutex;      
1b360 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b370 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66  True to enable f
1b380 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ull mutexing */.
1b390 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20    int bOpenUri; 
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3b0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69      /* True to i
1b3c0 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d  nterpret filenam
1b3d0 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20  es as URIs */.  
1b3e0 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20  int bUseCis;    
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b400 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e    /* Use coverin
1b410 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75  g indices for fu
1b420 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e  ll-scans */.  in
1b430 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20  t mxStrlen;     
1b440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b450 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e  /* Maximum strin
1b460 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e  g length */.  in
1b470 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  t szLookaside;  
1b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b490 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
1b4a0 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65  side buffer size
1b4b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61   */.  int nLooka
1b4c0 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
1b4d0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1b4e0 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
1b4f0 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73  fer count */.  s
1b500 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
1b510 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20  ds m;           
1b520 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65   /* Low-level me
1b530 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1b540 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
1b550 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1b560 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20  hods mutex;     
1b570 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75   /* Low-level mu
1b580 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  tex interface */
1b590 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68  .  sqlite3_pcach
1b5a0 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68  e_methods2 pcach
1b5b0 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65  e2;  /* Low-leve
1b5c0 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74  l page-cache int
1b5d0 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64  erface */.  void
1b5e0 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20   *pHeap;        
1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b600 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70   Heap storage sp
1b610 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  ace */.  int nHe
1b620 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1b630 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1b640 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f  ze of pHeap[] */
1b650 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78  .  int mnReq, mx
1b660 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Req;            
1b670 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20       /* Min and 
1b680 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74  max heap request
1b690 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c  s sizes */.  sql
1b6a0 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61  ite3_int64 szMma
1b6b0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
1b6c0 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70  * mmap() space p
1b6d0 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a  er open file */.
1b6e0 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1b6f0 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  mxMmap;         
1b700 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76      /* Maximum v
1b710 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20  alue for szMmap 
1b720 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61  */.  void *pScra
1b730 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
1b740 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63         /* Scratc
1b750 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  h memory */.  in
1b760 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20  t szScratch;    
1b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b780 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
1b790 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20 2a  scratch buffer *
1b7a0 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68  /.  int nScratch
1b7b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b7c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b7d0 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66 65  of scratch buffe
1b7e0 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  rs */.  void *pP
1b7f0 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1b800 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
1b810 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a  e cache memory *
1b820 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20  /.  int szPage; 
1b830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b840 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1b850 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50   each page in pP
1b860 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  age[] */.  int n
1b870 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b890 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
1b8a0 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
1b8b0 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63  int mxParserStac
1b8c0 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
1b8d0 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70    /* maximum dep
1b8e0 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72  th of the parser
1b8f0 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   stack */.  int 
1b900 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c  sharedCacheEnabl
1b910 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
1b920 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d   true if shared-
1b930 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c  cache mode enabl
1b940 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61  ed */.  /* The a
1b950 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e  bove might be in
1b960 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e  itialized to non
1b970 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c  -zero.  The foll
1b980 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c  owing need to al
1b990 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61  ways.  ** initia
1b9a0 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77  lly be zero, how
1b9b0 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  ever. */.  int i
1b9c0 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  sInit;          
1b9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b9e0 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69  True after initi
1b9f0 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69  alization has fi
1ba00 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20  nished */.  int 
1ba10 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20  inProgress;     
1ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ba30 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74   True while init
1ba40 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72  ialization in pr
1ba50 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20  ogress */.  int 
1ba60 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20  isMutexInit;    
1ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ba80 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65   True after mute
1ba90 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69  xes are initiali
1baa0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  zed */.  int isM
1bab0 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20  allocInit;      
1bac0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1bad0 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
1bae0 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
1baf0 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65  /.  int isPCache
1bb00 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1bb10 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1bb20 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
1bb30 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 73  itialized */.  s
1bb40 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49  qlite3_mutex *pI
1bb50 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
1bb60 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62   /* Mutex used b
1bb70 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61  y sqlite3_initia
1bb80 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20  lize() */.  int 
1bb90 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20  nRefInitMutex;  
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1bbb0 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73   Number of users
1bbc0 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a   of pInitMutex *
1bbd0 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29  /.  void (*xLog)
1bbe0 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
1bbf0 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63   char*); /* Func
1bc00 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67  tion for logging
1bc10 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67   */.  void *pLog
1bc20 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
1bc30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
1bc40 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
1bc50 78 4c 6f 67 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xLog() */.  int 
1bc60 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b  bLocaltimeFault;
1bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1bc80 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f   True to fail lo
1bc90 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20  caltime() calls 
1bca0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1bcb0 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
1bcc0 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28   void(*xSqllog)(
1bcd0 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
1bce0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
1bcf0 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f  ;.  void *pSqllo
1bd00 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 7d 3b 0a  gArg;.#endif.};.
1bd10 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
1bd20 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
1bd30 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
1bd40 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
1bd50 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69  uct Walker {.  i
1bd60 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61  nt (*xExprCallba
1bd70 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ck)(Walker*, Exp
1bd80 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c  r*);     /* Call
1bd90 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73  back for express
1bda0 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ions */.  int (*
1bdb0 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29  xSelectCallback)
1bdc0 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
1bdd0 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
1bde0 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
1bdf0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1be00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
1be20 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a  rser context.  *
1be30 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65  /.  int walkerDe
1be40 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  pth;            
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1be60 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75   Number of subqu
1be70 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 62 53  eries */.  u8 bS
1be80 65 6c 65 63 74 44 65 70 74 68 46 69 72 73 74 3b  electDepthFirst;
1be90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bea0 20 20 20 20 20 2f 2a 20 44 6f 20 73 75 62 71 75       /* Do subqu
1beb0 65 72 69 65 73 20 66 69 72 73 74 20 2a 2f 0a 20  eries first */. 
1bec0 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20   union {        
1bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bee0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
1bef0 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c  tra data for cal
1bf00 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d  lback */.    Nam
1bf10 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20  eContext *pNC;  
1bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf30 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e          /* Namin
1bf40 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20  g context */.   
1bf50 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
1bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1bf80 6e 74 65 67 65 72 20 76 61 6c 75 65 20 2a 2f 0a  nteger value */.
1bf90 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72      SrcList *pSr
1bfa0 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  cList;          
1bfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bfc0 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  * FROM clause */
1bfd0 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43  .    struct SrcC
1bfe0 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b  ount *pSrcCount;
1bff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c000 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75  /* Counting colu
1c010 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  mn references */
1c020 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46  .  } u;.};../* F
1c030 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69  orward declarati
1c040 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ons */.int sqlit
1c050 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65  e3WalkExpr(Walke
1c060 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
1c070 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c  sqlite3WalkExprL
1c080 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ist(Walker*, Exp
1c090 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
1c0a0 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57  ite3WalkSelect(W
1c0b0 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
1c0c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1c0d0 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b  kSelectExpr(Walk
1c0e0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
1c0f0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1c100 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a  lectFrom(Walker*
1c110 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a  , Select*);../*.
1c120 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  ** Return code f
1c130 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72  rom the parse-tr
1c140 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69  ee walking primi
1c150 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a  tives and their.
1c160 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f  ** callbacks..*/
1c170 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e  .#define WRC_Con
1c180 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20  tinue    0   /* 
1c190 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e  Continue down in
1c1a0 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23  to children */.#
1c1b0 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65  define WRC_Prune
1c1c0 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d         1   /* Om
1c1d0 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20  it children but 
1c1e0 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67  continue walking
1c1f0 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65   siblings */.#de
1c200 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20  fine WRC_Abort  
1c210 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e       2   /* Aban
1c220 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c  don the tree wal
1c230 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75  k */../*.** Assu
1c240 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20  ming zIn points 
1c250 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
1c260 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61  e of a UTF-8 cha
1c270 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e  racter,.** advan
1c280 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20  ce zIn to point 
1c290 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
1c2a0 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54  e of the next UT
1c2b0 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a  F-8 character..*
1c2c0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
1c2d0 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20  _SKIP_UTF8(zIn) 
1c2e0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1c2f0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28           \.  if(
1c300 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63   (*(zIn++))>=0xc
1c310 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20  0 ){            
1c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c330 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28    \.    while( (
1c340 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78  *zIn & 0xc0)==0x
1c350 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20  80 ){ zIn++; }  
1c360 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d             \.  }
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3a0 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54      \.}../*.** T
1c3b0 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54  he SQLITE_*_BKPT
1c3c0 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73   macros are subs
1c3d0 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20  titutes for the 
1c3e0 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68  error codes with
1c3f0 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  .** the same nam
1c400 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68  e but without th
1c410 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20  e _BKPT suffix. 
1c420 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e   These macros in
1c430 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  voke.** routines
1c440 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65   that report the
1c450 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20   line-number on 
1c460 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20  which the error 
1c470 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73  originated.** us
1c480 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ing sqlite3_log(
1c490 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73  ).  The routines
1c4a0 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20   also provide a 
1c4b0 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65  convenient place
1c4c0 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62  .** to set a deb
1c4d0 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74  ugger breakpoint
1c4e0 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
1c4f0 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74  CorruptError(int
1c500 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69  );.int sqlite3Mi
1c510 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a  suseError(int);.
1c520 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  int sqlite3Canto
1c530 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23  penError(int);.#
1c540 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
1c550 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74  RRUPT_BKPT sqlit
1c560 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f  e3CorruptError(_
1c570 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
1c580 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
1c590 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73  KPT sqlite3Misus
1c5a0 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  eError(__LINE__)
1c5b0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
1c5c0 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71  CANTOPEN_BKPT sq
1c5d0 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
1c5e0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f  or(__LINE__).../
1c5f0 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61  *.** FTS4 is rea
1c600 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e  lly an extension
1c610 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69   for FTS3.  It i
1c620 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20  s enabled using 
1c630 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  the.** SQLITE_EN
1c640 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e  ABLE_FTS3 macro.
1c650 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63    But to avoid c
1c660 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f  onfusion we also
1c670 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49   all.** the SQLI
1c680 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d  TE_ENABLE_FTS4 m
1c690 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73  acro to serve as
1c6a0 20 61 6e 20 61 6c 69 73 73 65 20 66 6f 72 20 53   an alisse for S
1c6b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1c6c0 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  3..*/.#if define
1c6d0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1c6e0 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65  FTS4) && !define
1c6f0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1c700 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53  FTS3).# define S
1c710 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1c720 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  3.#endif../*.** 
1c730 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64  The ctype.h head
1c740 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72  er is needed for
1c750 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65   non-ASCII syste
1c760 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a  ms.  It is also.
1c770 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53  ** needed by FTS
1c780 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69  3 when FTS3 is i
1c790 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61  ncluded in the a
1c7a0 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  malgamation..*/.
1c7b0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1c7c0 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a  ITE_ASCII) || \.
1c7d0 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c      (defined(SQL
1c7e0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
1c7f0 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
1c800 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29  TE_AMALGAMATION)
1c810 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79  ).# include <cty
1c820 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  pe.h>.#endif../*
1c830 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1c840 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74  g macros mimic t
1c850 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72  he standard libr
1c860 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ary functions to
1c870 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70  upper(),.** issp
1c880 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29  ace(), isalnum()
1c890 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20  , isdigit() and 
1c8a0 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70  isxdigit(), resp
1c8b0 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a  ectively. The.**
1c8c0 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73   sqlite versions
1c8d0 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41   only work for A
1c8e0 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c  SCII characters,
1c8f0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
1c900 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ocale..*/.#ifdef
1c910 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20   SQLITE_ASCII.# 
1c920 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
1c930 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e  upper(x)  ((x)&~
1c940 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1c950 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1c960 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65  (x)]&0x20)).# de
1c970 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
1c980 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ace(x)   (sqlite
1c990 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
1c9a0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
1c9b0 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  01).# define sql
1c9c0 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
1c9d0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
1c9e0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
1c9f0 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65  )(x)]&0x06).# de
1ca00 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
1ca10 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65  pha(x)   (sqlite
1ca20 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
1ca30 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
1ca40 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  02).# define sql
1ca50 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
1ca60 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
1ca70 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
1ca80 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65  )(x)]&0x04).# de
1ca90 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
1caa0 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65  igit(x)  (sqlite
1cab0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
1cac0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
1cad0 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  08).# define sql
1cae0 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
1caf0 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f   (sqlite3UpperTo
1cb00 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
1cb10 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65  char)(x)]).#else
1cb20 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1cb30 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f  3Toupper(x)   to
1cb40 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20  upper((unsigned 
1cb50 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1cb60 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
1cb70 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28  e(x)   isspace((
1cb80 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1cb90 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1cba0 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
1cbb0 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65  isalnum((unsigne
1cbc0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1cbd0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
1cbe0 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61  pha(x)   isalpha
1cbf0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1cc00 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1cc10 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
1cc20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67    isdigit((unsig
1cc30 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1cc40 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1cc50 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69  xdigit(x)  isxdi
1cc60 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
1cc70 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1cc80 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
1cc90 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e  x)   tolower((un
1cca0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1ccb0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
1ccc0 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e  nternal function
1ccd0 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23   prototypes.*/.#
1cce0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1ccf0 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74  rICmp sqlite3_st
1cd00 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65  ricmp.int sqlite
1cd10 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20  3Strlen30(const 
1cd20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20  char*);.#define 
1cd30 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20  sqlite3StrNICmp 
1cd40 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70  sqlite3_strnicmp
1cd50 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ..int sqlite3Mal
1cd60 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76  locInit(void);.v
1cd70 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  oid sqlite3Mallo
1cd80 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64  cEnd(void);.void
1cd90 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28   *sqlite3Malloc(
1cda0 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1cdb0 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69 6e  te3MallocZero(in
1cdc0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1cdd0 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71  3DbMallocZero(sq
1cde0 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f  lite3*, int);.vo
1cdf0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
1ce00 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c  locRaw(sqlite3*,
1ce10 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c   int);.char *sql
1ce20 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c  ite3DbStrDup(sql
1ce30 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1ce40 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
1ce50 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74  3DbStrNDup(sqlit
1ce60 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1ce70 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
1ce80 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64  ite3Realloc(void
1ce90 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
1cea0 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f  qlite3DbReallocO
1ceb0 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c  rFree(sqlite3 *,
1cec0 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76   void *, int);.v
1ced0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
1cee0 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c  alloc(sqlite3 *,
1cef0 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76   void *, int);.v
1cf00 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65  oid sqlite3DbFre
1cf10 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
1cf20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
1cf30 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29  allocSize(void*)
1cf40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d  ;.int sqlite3DbM
1cf50 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65  allocSize(sqlite
1cf60 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  3*, void*);.void
1cf70 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63 68   *sqlite3Scratch
1cf80 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
1cf90 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68  d sqlite3Scratch
1cfa0 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
1cfb0 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61  d *sqlite3PageMa
1cfc0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
1cfd0 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28  sqlite3PageFree(
1cfe0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
1cff0 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c  ite3MemSetDefaul
1d000 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  t(void);.void sq
1d010 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f  lite3BenignMallo
1d020 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28  cHooks(void (*)(
1d030 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28  void), void (*)(
1d040 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c 69  void));.int sqli
1d050 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c  te3HeapNearlyFul
1d060 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20  l(void);../*.** 
1d070 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  On systems with 
1d080 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63  ample stack spac
1d090 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f  e and that suppo
1d0a0 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b  rt alloca(), mak
1d0b0 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f  e.** use of allo
1d0c0 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73  ca() to obtain s
1d0d0 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61  pace for large a
1d0e0 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73  utomatic objects
1d0f0 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a  .  By default,.*
1d100 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  * obtain space f
1d110 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a  rom malloc()..**
1d120 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29  .** The alloca()
1d130 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72   routine never r
1d140 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68  eturns NULL.  Th
1d150 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f  is will cause co
1d160 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74  de paths.** that
1d170 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74   deal with sqlit
1d180 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66  e3StackAlloc() f
1d190 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e  ailures to be un
1d1a0 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69  reachable..*/.#i
1d1b0 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f  fdef SQLITE_USE_
1d1c0 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20  ALLOCA.# define 
1d1d0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
1d1e0 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f  cRaw(D,N)   allo
1d1f0 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  ca(N).# define s
1d200 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
1d210 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65  Zero(D,N)  memse
1d220 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20  t(alloca(N), 0, 
1d230 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
1d240 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
1d250 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65 0a 23  )       .#else.#
1d260 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
1d270 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e  tackAllocRaw(D,N
1d280 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  )   sqlite3DbMal
1d290 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65  locRaw(D,N).# de
1d2a0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
1d2b0 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
1d2c0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
1d2d0 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69  Zero(D,N).# defi
1d2e0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
1d2f0 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73  ree(D,P)       s
1d300 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50  qlite3DbFree(D,P
1d310 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
1d320 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
1d330 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS3.const sql
1d340 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
1d350 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
1d360 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65  emsys3(void);.#e
1d370 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
1d380 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
1d390 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  5.const sqlite3_
1d3a0 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
1d3b0 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
1d3c0 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  5(void);.#endif.
1d3d0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
1d3e0 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71  _MUTEX_OMIT.  sq
1d3f0 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
1d400 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
1d410 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76  e3DefaultMutex(v
1d420 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
1d430 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
1d440 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70  nst *sqlite3Noop
1d450 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
1d460 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
1d470 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28  lite3MutexAlloc(
1d480 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
1d490 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69  te3MutexInit(voi
1d4a0 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  d);.  int sqlite
1d4b0 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b  3MutexEnd(void);
1d4c0 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
1d4d0 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28  ite3StatusValue(
1d4e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d4f0 65 33 53 74 61 74 75 73 41 64 64 28 69 6e 74 2c  e3StatusAdd(int,
1d500 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1d510 74 65 33 53 74 61 74 75 73 53 65 74 28 69 6e 74  te3StatusSet(int
1d520 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65 66  , int);..#ifndef
1d530 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
1d540 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e  ATING_POINT.  in
1d550 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64  t sqlite3IsNaN(d
1d560 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20  ouble);.#else.# 
1d570 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1d580 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66  NaN(X)  0.#endif
1d590 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58  ..void sqlite3VX
1d5a0 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
1d5b0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
1d5c0 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69  r*, va_list);.#i
1d5d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1d5e0 54 5f 54 52 41 43 45 0a 76 6f 69 64 20 73 71 6c  T_TRACE.void sql
1d5f0 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41  ite3XPrintf(StrA
1d600 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ccum*, const cha
1d610 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66  r*, ...);.#endif
1d620 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50  .char *sqlite3MP
1d630 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
1d640 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
1d650 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  ;.char *sqlite3V
1d660 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
1d670 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61  ,const char*, va
1d680 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a 73 71  _list);.char *sq
1d690 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28 73 71  lite3MAppendf(sq
1d6a0 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e  lite3*,char*,con
1d6b0 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
1d6c0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1d6d0 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e  E_TEST) || defin
1d6e0 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
1d6f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
1d700 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74  ebugPrintf(const
1d710 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65   char*, ...);.#e
1d720 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
1d730 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20  (SQLITE_TEST).  
1d740 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73  void *sqlite3Tes
1d750 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74  tTextToPtr(const
1d760 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
1d770 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72 6d 61  ./* Output forma
1d780 74 74 69 6e 67 20 66 6f 72 20 53 51 4c 49 54 45  tting for SQLITE
1d790 5f 54 45 53 54 43 54 52 4c 5f 45 58 50 4c 41 49  _TESTCTRL_EXPLAI
1d7a0 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  N */.#if defined
1d7b0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 54  (SQLITE_ENABLE_T
1d7c0 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a 20 20 76  REE_EXPLAIN).  v
1d7d0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1d7e0 69 6e 42 65 67 69 6e 28 56 64 62 65 2a 29 3b 0a  inBegin(Vdbe*);.
1d7f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1d800 70 6c 61 69 6e 50 72 69 6e 74 66 28 56 64 62 65  plainPrintf(Vdbe
1d810 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
1d820 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ...);.  void sql
1d830 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c 28 56 64  ite3ExplainNL(Vd
1d840 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  be*);.  void sql
1d850 69 74 65 33 45 78 70 6c 61 69 6e 50 75 73 68 28  ite3ExplainPush(
1d860 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Vdbe*);.  void s
1d870 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 6f 70  qlite3ExplainPop
1d880 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
1d890 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46 69  sqlite3ExplainFi
1d8a0 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76  nish(Vdbe*);.  v
1d8b0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1d8c0 69 6e 53 65 6c 65 63 74 28 56 64 62 65 2a 2c 20  inSelect(Vdbe*, 
1d8d0 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
1d8e0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45   sqlite3ExplainE
1d8f0 78 70 72 28 56 64 62 65 2a 2c 20 45 78 70 72 2a  xpr(Vdbe*, Expr*
1d900 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1d910 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73 74  3ExplainExprList
1d920 28 56 64 62 65 2a 2c 20 45 78 70 72 4c 69 73 74  (Vdbe*, ExprList
1d930 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  *);.  const char
1d940 20 2a 73 71 6c 69 74 65 33 56 64 62 65 45 78 70   *sqlite3VdbeExp
1d950 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65 2a 29 3b  lanation(Vdbe*);
1d960 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1d970 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42 65  sqlite3ExplainBe
1d980 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
1d990 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53 65  sqlite3ExplainSe
1d9a0 6c 65 63 74 28 41 2c 42 29 0a 23 20 64 65 66 69  lect(A,B).# defi
1d9b0 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1d9c0 6e 45 78 70 72 28 41 2c 42 29 0a 23 20 64 65 66  nExpr(A,B).# def
1d9d0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
1d9e0 69 6e 45 78 70 72 4c 69 73 74 28 41 2c 42 29 0a  inExprList(A,B).
1d9f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1da00 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 58 29  ExplainFinish(X)
1da10 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1da20 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e  3VdbeExplanation
1da30 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 76  (X) 0.#endif...v
1da40 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
1da50 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
1da60 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
1da70 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
1da80 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
1da90 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
1daa0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73  ar*, ...);.int s
1dab0 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
1dac0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
1dad0 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
1dae0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
1daf0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
1db00 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
1db10 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
1db20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
1db30 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
1db40 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
1db50 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
1db60 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
1db70 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
1db80 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
1db90 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1dba0 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
1dbb0 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
1dbc0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
1dbd0 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
1dbe0 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
1dbf0 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
1dc00 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
1dc10 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1dc20 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
1dc30 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
1dc40 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
1dc50 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
1dc60 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
1dc70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1dc80 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
1dc90 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
1dca0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
1dcb0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
1dcc0 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
1dcd0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f  Expr*, Expr*, co
1dce0 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  nst Token*);.Exp
1dcf0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
1dd00 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
1dd10 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
1dd20 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
1dd30 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
1dd40 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
1dd50 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
1dd60 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50  ssignVarNumber(P
1dd70 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
1dd80 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
1dd90 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
1dda0 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
1ddb0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
1ddc0 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45  tAppend(Parse*,E
1ddd0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
1dde0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1ddf0 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
1de00 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
1de10 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
1de20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
1de30 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
1de40 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e  prList*,ExprSpan
1de50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1de60 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73  ExprListDelete(s
1de70 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73  qlite3*, ExprLis
1de80 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1de90 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63  Init(sqlite3*, c
1dea0 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har**);.int sqli
1deb0 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
1dec0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72  void*, int, char
1ded0 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  **, char**);.voi
1dee0 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28  d sqlite3Pragma(
1def0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
1df00 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ken*,Token*,int)
1df10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1df20 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
1df30 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65  onnection(sqlite
1df40 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
1df50 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
1df60 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
1df70 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61  oid sqlite3Colla
1df80 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79  pseDatabaseArray
1df90 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
1dfa0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72   sqlite3BeginPar
1dfb0 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  se(Parse*,int);.
1dfc0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
1dfd0 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65  itInternalChange
1dfe0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62  s(sqlite3*);.Tab
1dff0 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c  le *sqlite3Resul
1e000 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72  tSetOfSelect(Par
1e010 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f  se*,Select*);.vo
1e020 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61  id sqlite3OpenMa
1e030 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20  sterTable(Parse 
1e040 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1e050 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28  lite3StartTable(
1e060 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
1e070 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ken*,int,int,int
1e080 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1e090 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  te3AddColumn(Par
1e0a0 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  se*,Token*);.voi
1e0b0 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e  d sqlite3AddNotN
1e0c0 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ull(Parse*, int)
1e0d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1e0e0 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73  dPrimaryKey(Pars
1e0f0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
1e100 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
1e110 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68  oid sqlite3AddCh
1e120 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  eckConstraint(Pa
1e130 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
1e140 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
1e150 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54  umnType(Parse*,T
1e160 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
1e170 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61  ite3AddDefaultVa
1e180 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53  lue(Parse*,ExprS
1e190 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
1e1a0 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70  te3AddCollateTyp
1e1b0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
1e1c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e1d0 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ndTable(Parse*,T
1e1e0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c  oken*,Token*,Sel
1e1f0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
1e200 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74  e3ParseUri(const
1e210 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
1e220 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a  r*,unsigned int*
1e230 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1e240 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66        sqlite3_vf
1e250 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20  s**,char**,char 
1e260 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69  **);.Btree *sqli
1e270 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65  te3DbNameToBtree
1e280 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1e290 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
1e2a0 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72 73  te3CodeOnce(Pars
1e2b0 65 20 2a 29 3b 0a 0a 42 69 74 76 65 63 20 2a 73  e *);..Bitvec *s
1e2c0 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61  qlite3BitvecCrea
1e2d0 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  te(u32);.int sql
1e2e0 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42  ite3BitvecTest(B
1e2f0 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
1e300 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  t sqlite3BitvecS
1e310 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  et(Bitvec*, u32)
1e320 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
1e330 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63  tvecClear(Bitvec
1e340 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a  *, u32, void*);.
1e350 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
1e360 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63  ecDestroy(Bitvec
1e370 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42  *);.u32 sqlite3B
1e380 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63  itvecSize(Bitvec
1e390 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  *);.int sqlite3B
1e3a0 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74  itvecBuiltinTest
1e3b0 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77  (int,int*);..Row
1e3c0 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53  Set *sqlite3RowS
1e3d0 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  etInit(sqlite3*,
1e3e0 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64   void*, unsigned
1e3f0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1e400 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52  te3RowSetClear(R
1e410 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71  owSet*);.void sq
1e420 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
1e430 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b  t(RowSet*, i64);
1e440 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
1e450 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20  etTest(RowSet*, 
1e460 75 38 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b  u8 iBatch, i64);
1e470 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
1e480 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20  etNext(RowSet*, 
1e490 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  i64*);..void sql
1e4a0 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50  ite3CreateView(P
1e4b0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
1e4c0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63  en*,Token*,Selec
1e4d0 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69  t*,int,int);..#i
1e4e0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1e4f0 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20  E_OMIT_VIEW) || 
1e500 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1e510 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1e520 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  E).  int sqlite3
1e530 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
1e540 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  es(Parse*,Table*
1e550 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
1e560 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  e sqlite3ViewGet
1e570 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29  ColumnNames(A,B)
1e580 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20   0.#endif..void 
1e590 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65  sqlite3DropTable
1e5a0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1e5b0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
1e5c0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72  id sqlite3CodeDr
1e5d0 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
1e5e0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1e5f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
1e600 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
1e610 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69  e3*, Table*);.#i
1e620 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1e630 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
1e640 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
1e650 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
1e660 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
1e670 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
1e680 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
1e690 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
1e6a0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1e6b0 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
1e6c0 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65  entBegin(X).# de
1e6d0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
1e6e0 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a  incrementEnd(X).
1e6f0 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
1e700 65 33 43 6f 64 65 43 6f 72 6f 75 74 69 6e 65 28  e3CodeCoroutine(
1e710 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
1e720 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 76   SelectDest*);.v
1e730 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72  oid sqlite3Inser
1e740 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  t(Parse*, SrcLis
1e750 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 53  t*, ExprList*, S
1e760 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c  elect*, IdList*,
1e770 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
1e780 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74  ite3ArrayAllocat
1e790 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a  e(sqlite3*,void*
1e7a0 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,int,int*,int*);
1e7b0 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
1e7c0 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  IdListAppend(sql
1e7d0 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  ite3*, IdList*, 
1e7e0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
1e7f0 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28  ite3IdListIndex(
1e800 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  IdList*,const ch
1e810 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  ar*);.SrcList *s
1e820 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c  qlite3SrcListEnl
1e830 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  arge(sqlite3*, S
1e840 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
1e850 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
1e860 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
1e870 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  d(sqlite3*, SrcL
1e880 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
1e890 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ken*);.SrcList *
1e8a0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
1e8b0 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72  pendFromTerm(Par
1e8c0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
1e8d0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20  oken*, Token*,. 
1e8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e900 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c       Token*, Sel
1e910 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c  ect*, Expr*, IdL
1e920 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
1e930 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65  te3SrcListIndexe
1e940 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63  dBy(Parse *, Src
1e950 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  List *, Token *)
1e960 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
1e970 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72  exedByLookup(Par
1e980 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63  se *, struct Src
1e990 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f  List_item *);.vo
1e9a0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
1e9b0 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53  tShiftJoinType(S
1e9c0 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
1e9d0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73  qlite3SrcListAss
1e9e0 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65  ignCursors(Parse
1e9f0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  *, SrcList*);.vo
1ea00 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  id sqlite3IdList
1ea10 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
1ea20 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
1ea30 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65  sqlite3SrcListDe
1ea40 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
1ea50 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20  rcList*);.Index 
1ea60 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e  *sqlite3CreateIn
1ea70 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  dex(Parse*,Token
1ea80 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74  *,Token*,SrcList
1ea90 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
1eaa0 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eac0 54 6f 6b 65 6e 2a 2c 20 69 6e 74 2c 20 69 6e 74  Token*, int, int
1ead0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
1eae0 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ropIndex(Parse*,
1eaf0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
1eb00 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
1eb10 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ct(Parse*, Selec
1eb20 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29  t*, SelectDest*)
1eb30 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
1eb40 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65  3SelectNew(Parse
1eb50 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c  *,ExprList*,SrcL
1eb60 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
1eb70 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
1eb90 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  xpr*,ExprList*,u
1eba0 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  16,Expr*,Expr*);
1ebb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
1ebc0 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  ectDelete(sqlite
1ebd0 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61  3*, Select*);.Ta
1ebe0 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ble *sqlite3SrcL
1ebf0 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a  istLookup(Parse*
1ec00 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
1ec10 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e   sqlite3IsReadOn
1ec20 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ly(Parse*, Table
1ec30 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1ec40 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50  lite3OpenTable(P
1ec50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c  arse*, int iCur,
1ec60 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a   int iDb, Table*
1ec70 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69  , int);.#if defi
1ec80 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1ec90 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f  E_UPDATE_DELETE_
1eca0 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  LIMIT) && !defin
1ecb0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ed(SQLITE_OMIT_S
1ecc0 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73  UBQUERY).Expr *s
1ecd0 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65  qlite3LimitWhere
1ece0 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
1ecf0 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
1ed00 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61  ,Expr*,Expr*,cha
1ed10 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  r*);.#endif.void
1ed20 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72   sqlite3DeleteFr
1ed30 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  om(Parse*, SrcLi
1ed40 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  st*, Expr*);.voi
1ed50 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  d sqlite3Update(
1ed60 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1ed70 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  , ExprList*, Exp
1ed80 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49  r*, int);.WhereI
1ed90 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72  nfo *sqlite3Wher
1eda0 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72  eBegin(Parse*,Sr
1edb0 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
1edc0 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  rList*,ExprList*
1edd0 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,u16,int);.void 
1ede0 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28  sqlite3WhereEnd(
1edf0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
1ee00 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1ee10 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  GetColumn(Parse*
1ee20 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1ee30 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
1ee40 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
1ee50 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62  deGetColumnOfTab
1ee60 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  le(Vdbe*, Table*
1ee70 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1ee80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1ee90 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65  prCodeMove(Parse
1eea0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1eeb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1eec0 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61  xprCacheStore(Pa
1eed0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
1eee0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1eef0 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28  e3ExprCachePush(
1ef00 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1ef10 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f  lite3ExprCachePo
1ef20 70 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  p(Parse*, int);.
1ef30 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1ef40 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73  CacheRemove(Pars
1ef50 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
1ef60 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1ef70 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a  acheClear(Parse*
1ef80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1ef90 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79  xprCacheAffinity
1efa0 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69  Change(Parse*, i
1efb0 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1efc0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
1efd0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1efe0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1eff0 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
1f000 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
1f010 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1f020 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
1f030 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
1f040 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1f050 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
1f060 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
1f070 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1f080 72 43 6f 64 65 43 6f 6e 73 74 61 6e 74 73 28 50  rCodeConstants(P
1f090 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  arse*, Expr*);.i
1f0a0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1f0b0 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  deExprList(Parse
1f0c0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
1f0d0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1f0e0 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
1f0f0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
1f100 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1f110 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
1f120 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
1f130 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c   int, int);.Tabl
1f140 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61  e *sqlite3FindTa
1f150 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ble(sqlite3*,con
1f160 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
1f170 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
1f180 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
1f190 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56  e(Parse*,int isV
1f1a0 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  iew,const char*,
1f1b0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
1f1c0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
1f1d0 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72  ateTableItem(Par
1f1e0 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73  se*,int isView,s
1f1f0 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
1f200 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  em *);.Index *sq
1f210 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73  lite3FindIndex(s
1f220 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1f230 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
1f240 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
1f250 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
1f260 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ble(sqlite3*,int
1f270 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
1f280 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
1f290 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
1f2a0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
1f2b0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
1f2c0 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61  sqlite3Vacuum(Pa
1f2d0 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
1f2e0 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72  e3RunVacuum(char
1f2f0 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  **, sqlite3*);.c
1f300 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65  har *sqlite3Name
1f310 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65  FromToken(sqlite
1f320 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
1f330 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
1f340 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  are(Expr*, Expr*
1f350 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1f360 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78  prListCompare(Ex
1f370 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  prList*, ExprLis
1f380 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1f390 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
1f3a0 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
1f3b0 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
1f3c0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
1f3d0 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
1f3e0 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
1f3f0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1f400 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
1f410 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
1f420 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
1f430 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
1f440 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f450 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f  PrngSaveState(vo
1f460 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1f470 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
1f480 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
1f490 6c 69 74 65 33 50 72 6e 67 52 65 73 65 74 53 74  lite3PrngResetSt
1f4a0 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
1f4b0 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
1f4c0 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ll(sqlite3*,int)
1f4d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1f4e0 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50  deVerifySchema(P
1f4f0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
1f500 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
1f510 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50  ifyNamedSchema(P
1f520 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
1f530 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71  r *zDb);.void sq
1f540 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61  lite3BeginTransa
1f550 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ction(Parse*, in
1f560 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f570 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f  CommitTransactio
1f580 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
1f590 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54  sqlite3RollbackT
1f5a0 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
1f5b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f5c0 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
1f5d0 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
1f5e0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
1f5f0 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
1f600 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
1f610 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
1f620 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
1f630 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
1f640 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
1f650 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t(Expr*);.int sq
1f660 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
1f670 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a  antNotJoin(Expr*
1f680 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1f690 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75  prIsConstantOrFu
1f6a0 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69  nction(Expr*);.i
1f6b0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
1f6c0 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
1f6d0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
1f6e0 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
1f6f0 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f 69  onst Expr*);.voi
1f700 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
1f710 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62 65  eIsNullJump(Vdbe
1f720 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  *, const Expr*, 
1f730 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
1f740 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e  qlite3ExprNeedsN
1f750 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  oAffinityChange(
1f760 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61  const Expr*, cha
1f770 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  r);.int sqlite3I
1f780 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61  sRowid(const cha
1f790 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1f7a0 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65  3GenerateRowDele
1f7b0 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
1f7c0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1f7d0 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
1f7e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
1f7f0 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
1f800 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
1f810 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 29  ble*, int, int*)
1f820 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e  ;.int sqlite3Gen
1f830 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61  erateIndexKey(Pa
1f840 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
1f850 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
1f860 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
1f870 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
1f880 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
1f890 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20  ,int,int,.      
1f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f8c0 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  nt*,int,int,int,
1f8d0 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20  int,int*);.void 
1f8e0 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49  sqlite3CompleteI
1f8f0 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsertion(Parse*,
1f900 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1f910 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20 69 6e  t, int*, int, in
1f920 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
1f930 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
1f940 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
1f950 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1f960 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1f970 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
1f980 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  on(Parse*, int, 
1f990 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1f9a0 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72  e3MultiWrite(Par
1f9b0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
1f9c0 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65  e3MayAbort(Parse
1f9d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f9e0 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50  HaltConstraint(P
1f9f0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
1fa00 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 45 78   char*, int);.Ex
1fa10 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44  pr *sqlite3ExprD
1fa20 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
1fa30 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74  *,int);.ExprList
1fa40 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
1fa50 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  tDup(sqlite3*,Ex
1fa60 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72  prList*,int);.Sr
1fa70 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
1fa80 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  cListDup(sqlite3
1fa90 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b  *,SrcList*,int);
1faa0 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
1fab0 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  IdListDup(sqlite
1fac0 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c  3*,IdList*);.Sel
1fad0 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
1fae0 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  ctDup(sqlite3*,S
1faf0 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69  elect*,int);.voi
1fb00 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66  d sqlite3FuncDef
1fb10 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48 61  Insert(FuncDefHa
1fb20 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a  sh*, FuncDef*);.
1fb30 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
1fb40 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  FindFunction(sql
1fb50 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1fb60 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29  *,int,int,u8,u8)
1fb70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1fb80 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e  gisterBuiltinFun
1fb90 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  ctions(sqlite3*)
1fba0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1fbb0 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75  gisterDateTimeFu
1fbc0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
1fbd0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
1fbe0 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f  terGlobalFunctio
1fbf0 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ns(void);.int sq
1fc00 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
1fc10 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  Ok(sqlite3*);.in
1fc20 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
1fc30 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c  heckSickOrOk(sql
1fc40 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
1fc50 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65  ite3ChangeCookie
1fc60 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a  (Parse*, int);..
1fc70 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1fc80 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26  ITE_OMIT_VIEW) &
1fc90 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
1fca0 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
1fcb0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65  void sqlite3Mate
1fcc0 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73  rializeView(Pars
1fcd0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
1fce0 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  *, int);.#endif.
1fcf0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1fd00 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76  OMIT_TRIGGER.  v
1fd10 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
1fd20 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
1fd30 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
1fd40 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72  t,int,IdList*,Sr
1fd50 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  cList*,.        
1fd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd70 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e     Expr*,int, in
1fd80 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
1fd90 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28  e3FinishTrigger(
1fda0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53  Parse*, TriggerS
1fdb0 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20  tep*, Token*);. 
1fdc0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
1fdd0 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  pTrigger(Parse*,
1fde0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
1fdf0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
1fe00 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61  ropTriggerPtr(Pa
1fe10 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  rse*, Trigger*);
1fe20 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
1fe30 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
1fe40 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a  (Parse *, Table*
1fe50 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
1fe60 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20  , int *pMask);. 
1fe70 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
1fe80 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72  3TriggerList(Par
1fe90 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  se *, Table *);.
1fea0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
1feb0 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72  deRowTrigger(Par
1fec0 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  se*, Trigger *, 
1fed0 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
1fee0 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20  int, Table *,.  
1fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff00 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69            int, i
1ff10 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
1ff20 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
1ff30 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72  riggerDirect(Par
1ff40 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  se *, Trigger *,
1ff50 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
1ff60 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
1ff70 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67   sqliteViewTrigg
1ff80 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ers(Parse*, Tabl
1ff90 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
1ffa0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f  ExprList*);.  vo
1ffb0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
1ffc0 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69  TriggerStep(sqli
1ffd0 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65  te3*, TriggerSte
1ffe0 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  p*);.  TriggerSt
1fff0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
20000 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c  erSelectStep(sql
20010 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  ite3*,Select*);.
20020 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
20030 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73  qlite3TriggerIns
20040 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ertStep(sqlite3*
20050 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a  ,Token*, IdList*
20060 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
20070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20080 20 20 20 20 20 20 20 20 20 20 45 78 70 72 4c 69            ExprLi
20090 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 75 38 29 3b  st*,Select*,u8);
200a0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
200b0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70  sqlite3TriggerUp
200c0 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  dateStep(sqlite3
200d0 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
200e0 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  t*, Expr*, u8);.
200f0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
20100 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c  qlite3TriggerDel
20110 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  eteStep(sqlite3*
20120 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b  ,Token*, Expr*);
20130 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
20140 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
20150 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29  ite3*, Trigger*)
20160 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
20170 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
20180 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
20190 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
201a0 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54  ;.  u32 sqlite3T
201b0 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61  riggerColmask(Pa
201c0 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78  rse*,Trigger*,Ex
201d0 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c  prList*,int,int,
201e0 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64  Table*,int);.# d
201f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
20200 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  seToplevel(p) ((
20210 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20  p)->pToplevel ? 
20220 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a  (p)->pToplevel :
20230 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64 65   (p)).#else.# de
20240 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
20250 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c  gersExist(B,C,D,
20260 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20  E,F) 0.# define 
20270 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
20280 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69  gger(A,B).# defi
20290 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  ne sqlite3DropTr
202a0 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20  iggerPtr(A,B).# 
202b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e  define sqlite3Un
202c0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
202d0 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65  gger(A,B,C).# de
202e0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
202f0 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43  RowTrigger(A,B,C
20300 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20  ,D,E,F,G,H,I).# 
20310 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
20320 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
20330 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a  ct(A,B,C,D,E,F).
20340 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20350 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59  TriggerList(X, Y
20360 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
20370 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
20380 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20  l(p) p.# define 
20390 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
203a0 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c  lmask(A,B,C,D,E,
203b0 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69  F,G) 0.#endif..i
203c0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79  nt sqlite3JoinTy
203d0 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
203e0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
203f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20400 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79  CreateForeignKey
20410 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
20420 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  t*, Token*, Expr
20430 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
20440 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f  d sqlite3DeferFo
20450 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
20460 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53   int);.#ifndef S
20470 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
20480 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  RIZATION.  void 
20490 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
204a0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68  Parse*,Expr*,Sch
204b0 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a  ema*,SrcList*);.
204c0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
204d0 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e  hCheck(Parse*,in
204e0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
204f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
20500 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
20510 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
20520 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c  textPush(Parse*,
20530 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63   AuthContext*, c
20540 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
20550 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
20560 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f  ontextPop(AuthCo
20570 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73  ntext*);.  int s
20580 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f  qlite3AuthReadCo
20590 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  l(Parse*, const 
205a0 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68  char *, const ch
205b0 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  ar *, int);.#els
205c0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
205d0 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63  e3AuthRead(a,b,c
205e0 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,d).# define sql
205f0 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c  ite3AuthCheck(a,
20600 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49  b,c,d,e)    SQLI
20610 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73  TE_OK.# define s
20620 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
20630 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64  tPush(a,b,c).# d
20640 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
20650 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20  hContextPop(a)  
20660 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64  ((void)(a)).#end
20670 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
20680 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  ttach(Parse*, Ex
20690 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  pr*, Expr*, Expr
206a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
206b0 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Detach(Parse*, E
206c0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
206d0 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65  e3FixInit(DbFixe
206e0 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c  r*, Parse*, int,
206f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
20700 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  nst Token*);.int
20710 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69   sqlite3FixSrcLi
20720 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63  st(DbFixer*, Src
20730 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
20740 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46  te3FixSelect(DbF
20750 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ixer*, Select*);
20760 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
20770 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78  xpr(DbFixer*, Ex
20780 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
20790 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46  3FixExprList(DbF
207a0 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ixer*, ExprList*
207b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
207c0 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46  xTriggerStep(DbF
207d0 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74  ixer*, TriggerSt
207e0 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ep*);.int sqlite
207f0 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72  3AtoF(const char
20800 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e   *z, double*, in
20810 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
20820 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73  te3GetInt32(cons
20830 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b  t char *, int*);
20840 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
20850 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  (const char*);.i
20860 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42  nt sqlite3Utf16B
20870 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69  yteLen(const voi
20880 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43  d *pData, int nC
20890 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
208a0 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e  3Utf8CharLen(con
208b0 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20  st char *pData, 
208c0 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20  int nByte);.u32 
208d0 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28  sqlite3Utf8Read(
208e0 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 0a 2f 2a  const u8**);../*
208f0 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20  .** Routines to 
20900 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76  read and write v
20910 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
20920 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20  ntegers.  These 
20930 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65  used to.** be de
20940 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62  fined locally, b
20950 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68  ut now we use th
20960 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65  e varint routine
20970 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a  s in the util.c.
20980 2a 2a 20 66 69 6c 65 2e 20 20 43 6f 64 65 20 73  ** file.  Code s
20990 68 6f 75 6c 64 20 75 73 65 20 74 68 65 20 4d 41  hould use the MA
209a0 43 52 4f 20 66 6f 72 6d 73 20 62 65 6c 6f 77 2c  CRO forms below,
209b0 20 61 73 20 74 68 65 20 56 61 72 69 6e 74 33 32   as the Varint32
209c0 20 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 61 72 65   versions.** are
209d0 20 63 6f 64 65 64 20 74 6f 20 61 73 73 75 6d 65   coded to assume
209e0 20 74 68 65 20 73 69 6e 67 6c 65 20 62 79 74 65   the single byte
209f0 20 63 61 73 65 20 69 73 20 61 6c 72 65 61 64 79   case is already
20a00 20 68 61 6e 64 6c 65 64 20 28 77 68 69 63 68 20   handled (which 
20a10 0a 2a 2a 20 74 68 65 20 4d 41 43 52 4f 20 66 6f  .** the MACRO fo
20a20 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69 6e 74  rm does)..*/.int
20a30 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
20a40 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t(unsigned char*
20a50 2c 20 75 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , u64);.int sqli
20a60 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 75  te3PutVarint32(u
20a70 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75  nsigned char*, u
20a80 33 32 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47  32);.u8 sqlite3G
20a90 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75  etVarint(const u
20aa0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
20ab0 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74  u64 *);.u8 sqlit
20ac0 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f  e3GetVarint32(co
20ad0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
20ae0 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74  r *, u32 *);.int
20af0 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
20b00 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a  n(u64 v);../*.**
20b10 20 54 68 65 20 68 65 61 64 65 72 20 6f 66 20 61   The header of a
20b20 20 72 65 63 6f 72 64 20 63 6f 6e 73 69 73 74 73   record consists
20b30 20 6f 66 20 61 20 73 65 71 75 65 6e 63 65 20 76   of a sequence v
20b40 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
20b50 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73  ntegers..** Thes
20b60 65 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 61  e integers are a
20b70 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 73 6d 61  lmost always sma
20b80 6c 6c 20 61 6e 64 20 61 72 65 20 65 6e 63 6f 64  ll and are encod
20b90 65 64 20 61 73 20 61 20 73 69 6e 67 6c 65 20 62  ed as a single b
20ba0 79 74 65 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  yte..** The foll
20bb0 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 74 61 6b  owing macros tak
20bc0 65 20 61 64 76 61 6e 74 61 67 65 20 74 68 69 73  e advantage this
20bd0 20 66 61 63 74 20 74 6f 20 70 72 6f 76 69 64 65   fact to provide
20be0 20 61 20 66 61 73 74 20 65 6e 63 6f 64 65 0a 2a   a fast encode.*
20bf0 2a 20 61 6e 64 20 64 65 63 6f 64 65 20 6f 66 20  * and decode of 
20c00 74 68 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20  the integers in 
20c10 61 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 2e  a record header.
20c20 20 20 49 74 20 69 73 20 66 61 73 74 65 72 20 66    It is faster f
20c30 6f 72 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a  or the common.**
20c40 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20   case where the 
20c50 69 6e 74 65 67 65 72 20 69 73 20 61 20 73 69 6e  integer is a sin
20c60 67 6c 65 20 62 79 74 65 2e 20 20 49 74 20 69 73  gle byte.  It is
20c70 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77 65 72   a little slower
20c80 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 69 6e 74   when the.** int
20c90 65 67 65 72 20 69 73 20 74 77 6f 20 6f 72 20 6d  eger is two or m
20ca0 6f 72 65 20 62 79 74 65 73 2e 20 20 42 75 74 20  ore bytes.  But 
20cb0 6f 76 65 72 61 6c 6c 20 69 74 20 69 73 20 66 61  overall it is fa
20cc0 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ster..**.** The 
20cd0 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65 73  following expres
20ce0 73 69 6f 6e 73 20 61 72 65 20 65 71 75 69 76 61  sions are equiva
20cf0 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  lent:.**.**     
20d00 78 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61  x = sqlite3GetVa
20d10 72 69 6e 74 33 32 28 20 41 2c 20 26 42 20 29 3b  rint32( A, &B );
20d20 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c 69  .**     x = sqli
20d30 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 20  te3PutVarint32( 
20d40 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 20 20  A, B );.**.**   
20d50 20 20 78 20 3d 20 67 65 74 56 61 72 69 6e 74 33    x = getVarint3
20d60 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 20 20 20  2( A, B );.**   
20d70 20 20 78 20 3d 20 70 75 74 56 61 72 69 6e 74 33    x = putVarint3
20d80 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2f  2( A, B );.**.*/
20d90 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
20da0 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
20db0 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78  u8)((*(A)<(u8)0x
20dc0 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28  80)?((B)=(u32)*(
20dd0 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74  A)),1:sqlite3Get
20de0 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33  Varint32((A),(u3
20df0 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69  2 *)&(B))).#defi
20e00 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41  ne putVarint32(A
20e10 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28  ,B)  \.  (u8)(((
20e20 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38  u32)(B)<(u32)0x8
20e30 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e  0)?(*(A)=(unsign
20e40 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c  ed char)(B)),1:\
20e50 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  .  sqlite3PutVar
20e60 69 6e 74 33 32 28 28 41 29 2c 28 42 29 29 29 0a  int32((A),(B))).
20e70 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
20e80 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56  t    sqlite3GetV
20e90 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75  arint.#define pu
20ea0 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
20eb0 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f  e3PutVarint...co
20ec0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
20ed0 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
20ee0 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20  r(Vdbe *, Index 
20ef0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20f00 54 61 62 6c 65 41 66 66 69 6e 69 74 79 53 74 72  TableAffinityStr
20f10 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a  (Vdbe *, Table *
20f20 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43  );.char sqlite3C
20f30 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45  ompareAffinity(E
20f40 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
20f50 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69   aff2);.int sqli
20f60 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
20f70 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  Ok(Expr *pExpr, 
20f80 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74  char idx_affinit
20f90 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  y);.char sqlite3
20fa0 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70  ExprAffinity(Exp
20fb0 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
20fc0 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e  qlite3Atoi64(con
20fd0 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20  st char*, i64*, 
20fe0 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
20ff0 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69  qlite3Error(sqli
21000 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
21010 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69   char*,...);.voi
21020 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
21030 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  lob(sqlite3*, co
21040 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
21050 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48   n);.u8 sqlite3H
21060 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a  exToInt(int h);.
21070 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61  int sqlite3TwoPa
21080 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  rtName(Parse *, 
21090 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
210a0 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69  , Token **);..#i
210b0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
210c0 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
210d0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
210e0 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  || \.    defined
210f0 28 53 51 4c 49 54 45 5f 44 45 42 55 47 5f 4f 53  (SQLITE_DEBUG_OS
21100 5f 54 52 41 43 45 29 0a 63 6f 6e 73 74 20 63 68  _TRACE).const ch
21110 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61  ar *sqlite3ErrNa
21120 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  me(int);.#endif.
21130 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
21140 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
21150 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
21160 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
21170 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
21180 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
21190 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
211a0 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
211b0 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  int);.CollSeq *s
211c0 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c  qlite3LocateColl
211d0 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
211e0 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e  e, const char*zN
211f0 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ame);.CollSeq *s
21200 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
21210 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
21220 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45   Expr *pExpr);.E
21230 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
21240 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28  AddCollateToken(
21250 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
21260 78 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 45  xpr*, Token*);.E
21270 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
21280 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67  AddCollateString
21290 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
212a0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72  nst char*);.Expr
212b0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69   *sqlite3ExprSki
212c0 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b  pCollate(Expr*);
212d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
212e0 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
212f0 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
21300 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
21310 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
21320 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
21330 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
21340 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
21350 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  te3 *, int);.int
21360 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
21370 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
21380 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
21390 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
213a0 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69  qlite3MulInt64(i
213b0 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
213c0 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e  lite3AbsInt32(in
213d0 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
213e0 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
213f0 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  ES.void sqlite3F
21400 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74  ileSuffix3(const
21410 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a   char*, char*);.
21420 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
21430 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
21440 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38  3(X,Y).#endif.u8
21450 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
21460 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  an(const char *z
21470 2c 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  ,int);..const vo
21480 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
21490 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
214a0 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
214b0 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
214c0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
214d0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
214e0 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
214f0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
21500 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
21510 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  8, .            
21520 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
21530 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
21540 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  d sqlite3ValueFr
21550 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ee(sqlite3_value
21560 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  *);.sqlite3_valu
21570 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
21580 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63  ew(sqlite3 *);.c
21590 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
215a0 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
215b0 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
215c0 2c 20 75 38 29 3b 0a 23 69 66 64 65 66 20 53 51  , u8);.#ifdef SQ
215d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
215e0 33 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  3.char *sqlite3U
215f0 74 66 38 74 6f 31 36 28 73 71 6c 69 74 65 33 20  tf8to16(sqlite3 
21600 2a 2c 20 75 38 2c 20 63 68 61 72 20 2a 2c 20 69  *, u8, char *, i
21610 6e 74 2c 20 69 6e 74 20 2a 29 3b 0a 23 65 6e 64  nt, int *);.#end
21620 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  if.int sqlite3Va
21630 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69  lueFromExpr(sqli
21640 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  te3 *, Expr *, u
21650 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  8, u8, sqlite3_v
21660 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  alue **);.void s
21670 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
21680 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
21690 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38  _value *, u8, u8
216a0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
216b0 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65  E_AMALGAMATION.e
216c0 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
216d0 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
216e0 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
216f0 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
21700 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
21710 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
21720 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  r[];.extern cons
21730 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
21740 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
21750 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
21760 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74  Token sqlite3Int
21770 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e  Tokens[];.extern
21780 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75   SQLITE_WSD stru
21790 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
217a0 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a   sqlite3Config;.
217b0 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
217c0 44 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71  D FuncDefHash sq
217d0 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74  lite3GlobalFunct
217e0 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51  ions;.#ifndef SQ
217f0 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78  LITE_OMIT_WSD.ex
21800 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
21810 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e  PendingByte;.#en
21820 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  dif.#endif.void 
21830 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
21840 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69  oved(sqlite3*, i
21850 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
21860 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64  oid sqlite3Reind
21870 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ex(Parse*, Token
21880 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
21890 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e   sqlite3AlterFun
218a0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
218b0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52  id sqlite3AlterR
218c0 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65  enameTable(Parse
218d0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
218e0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
218f0 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20  3GetToken(const 
21900 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
21910 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71   int *);.void sq
21920 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65  lite3NestedParse
21930 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
21940 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
21950 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
21960 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
21970 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
21980 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65  sqlite3CodeSubse
21990 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78  lect(Parse *, Ex
219a0 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  pr *, int, int);
219b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
219c0 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20  ectPrep(Parse*, 
219d0 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
219e0 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  text*);.int sqli
219f0 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65  te3MatchSpanName
21a00 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  (const char*, co
21a10 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
21a20 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
21a30 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
21a40 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65  3ResolveExprName
21a50 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
21a60 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
21a70 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63  ite3ResolveSelec
21a80 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53  tNames(Parse*, S
21a90 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
21aa0 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ext*);.int sqlit
21ab0 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72  e3ResolveOrderGr
21ac0 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65  oupBy(Parse*, Se
21ad0 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lect*, ExprList*
21ae0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
21af0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
21b00 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a  mnDefault(Vdbe *
21b10 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
21b20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21b30 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64  e3AlterFinishAdd
21b40 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
21b50 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
21b60 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e  qlite3AlterBegin
21b70 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
21b80 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43  *, SrcList *);.C
21b90 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47  ollSeq *sqlite3G
21ba0 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a  etCollSeq(Parse*
21bb0 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c  , u8, CollSeq *,
21bc0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63   const char*);.c
21bd0 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e  har sqlite3Affin
21be0 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68  ityType(const ch
21bf0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
21c00 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a  e3Analyze(Parse*
21c10 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
21c20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
21c30 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28  vokeBusyHandler(
21c40 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69  BusyHandler*);.i
21c50 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
21c60 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
21c70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
21c80 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65  indDbName(sqlite
21c90 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
21ca0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
21cb0 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69  nalysisLoad(sqli
21cc0 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76  te3*,int iDB);.v
21cd0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
21ce0 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71  eIndexSamples(sq
21cf0 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a  lite3*,Index*);.
21d00 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61  void sqlite3Defa
21d10 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a  ultRowEst(Index*
21d20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
21d30 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74  egisterLikeFunct
21d40 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ions(sqlite3*, i
21d50 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
21d60 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73  IsLikeFunction(s
21d70 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
21d80 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  t*,char*);.void 
21d90 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69  sqlite3MinimumFi
21da0 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c  leFormat(Parse*,
21db0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
21dc0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
21dd0 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68  ear(void *);.Sch
21de0 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65  ema *sqlite3Sche
21df0 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c  maGet(sqlite3 *,
21e00 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73   Btree *);.int s
21e10 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e  qlite3SchemaToIn
21e20 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  dex(sqlite3 *db,
21e30 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49   Schema *);.KeyI
21e40 6e 66 6f 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  nfo *sqlite3Inde
21e50 78 4b 65 79 69 6e 66 6f 28 50 61 72 73 65 20 2a  xKeyinfo(Parse *
21e60 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 69 6e 74 20  , Index *);.int 
21e70 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
21e80 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  c(sqlite3 *, con
21e90 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20  st char *, int, 
21ea0 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20  int, void *, .  
21eb0 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
21ec0 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
21ed0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
21ee0 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
21ef0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
21f00 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
21f10 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  *), void (*)(sql
21f20 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
21f30 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
21f40 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b   *pDestructor.);
21f50 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45  .int sqlite3ApiE
21f60 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  xit(sqlite3 *db,
21f70 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
21f80 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
21f90 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f  se(Parse *);..vo
21fa0 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
21fb0 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a  umInit(StrAccum*
21fc0 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e  , char*, int, in
21fd0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21fe0 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53  StrAccumAppend(S
21ff0 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
22000 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  har*,int);.void 
22010 73 71 6c 69 74 65 33 41 70 70 65 6e 64 53 70 61  sqlite3AppendSpa
22020 63 65 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74  ce(StrAccum*,int
22030 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
22040 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53  StrAccumFinish(S
22050 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
22060 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52  sqlite3StrAccumR
22070 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b  eset(StrAccum*);
22080 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
22090 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65  ectDestInit(Sele
220a0 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29  ctDest*,int,int)
220b0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43  ;.Expr *sqlite3C
220c0 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28  reateColumnExpr(
220d0 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69  sqlite3 *, SrcLi
220e0 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  st *, int, int);
220f0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ..void sqlite3Ba
22100 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69  ckupRestart(sqli
22110 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76  te3_backup *);.v
22120 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
22130 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f  pUpdate(sqlite3_
22140 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20  backup *, Pgno, 
22150 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 2f 2a  const u8 *);../*
22160 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
22170 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67  e to the LEMON-g
22180 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a  enerated parser.
22190 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
221a0 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64  ParserAlloc(void
221b0 2a 28 2a 29 28 73 69 7a 65 5f 74 29 29 3b 0a 76  *(*)(size_t));.v
221c0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
221d0 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69  rFree(void*, voi
221e0 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
221f0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
22200 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b  (void*, int, Tok
22210 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66  en, Parse*);.#if
22220 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54  def YYTRACKMAXST
22230 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73  ACKDEPTH.  int s
22240 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63  qlite3ParserStac
22250 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65  kPeak(void*);.#e
22260 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
22270 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73  e3AutoLoadExtens
22280 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
22290 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
222a0 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
222b0 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
222c0 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
222d0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73  (sqlite3*);.#els
222e0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
222f0 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
22300 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  s(X).#endif..#if
22310 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
22320 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
22330 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
22340 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69  eLock(Parse *, i
22350 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e  nt, int, u8, con
22360 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73  st char *);.#els
22370 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
22380 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77  te3TableLock(v,w
22390 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a  ,x,y,z).#endif..
223a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
223b0 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ST.  int sqlite3
223c0 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64  Utf8To8(unsigned
223d0 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
223e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
223f0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
22400 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
22410 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23  e3VtabClear(Y).#
22420 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
22430 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51  VtabSync(X,Y) SQ
22440 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
22450 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  e sqlite3VtabRol
22460 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69  lback(X).#  defi
22470 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  ne sqlite3VtabCo
22480 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e  mmit(X).#  defin
22490 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
224a0 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66  ync(db) 0.#  def
224b0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ine sqlite3VtabL
224c0 6f 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e  ock(X) .#  defin
224d0 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
224e0 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
224f0 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
22500 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66  ckList(X).#  def
22510 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
22520 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a  avepoint(X, Y, Z
22530 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
22540 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74  efine sqlite3Get
22550 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56  VTable(X,Y)  ((V
22560 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a  Table*)0).#else.
22570 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
22580 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33  tabClear(sqlite3
22590 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20   *db, Table*);. 
225a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
225b0 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c  abDisconnect(sql
225c0 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20  ite3 *db, Table 
225d0 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  *p);.   int sqli
225e0 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69  te3VtabSync(sqli
225f0 74 65 33 20 2a 64 62 2c 20 63 68 61 72 20 2a 2a  te3 *db, char **
22600 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
22610 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71  3VtabRollback(sq
22620 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69  lite3 *db);.   i
22630 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  nt sqlite3VtabCo
22640 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  mmit(sqlite3 *db
22650 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
22660 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c  e3VtabLock(VTabl
22670 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
22680 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
22690 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
226a0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
226b0 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33  lockList(sqlite3
226c0 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
226d0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
226e0 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20  sqlite3 *, int, 
226f0 69 6e 74 29 3b 0a 20 20 20 56 54 61 62 6c 65 20  int);.   VTable 
22700 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c  *sqlite3GetVTabl
22710 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
22720 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73  e*);.#  define s
22730 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
22740 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72  (db) ((db)->nVTr
22750 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61  ans>0 && (db)->a
22760 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69  VTrans==0).#endi
22770 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  f.void sqlite3Vt
22780 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50  abMakeWritable(P
22790 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76  arse*,Table*);.v
227a0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42  oid sqlite3VtabB
227b0 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
227c0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
227d0 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  , Token*, int);.
227e0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
227f0 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73  FinishParse(Pars
22800 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
22810 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
22820 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Init(Parse*);.vo
22830 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
22840 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20  gExtend(Parse*, 
22850 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
22860 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
22870 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  te(sqlite3*, int
22880 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
22890 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71  char **);.int sq
228a0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e  lite3VtabCallCon
228b0 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62  nect(Parse*, Tab
228c0 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
228d0 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
228e0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
228f0 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
22900 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  nt sqlite3VtabBe
22910 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56  gin(sqlite3 *, V
22920 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65  Table *);.FuncDe
22930 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76  f *sqlite3VtabOv
22940 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73  erloadFunction(s
22950 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66  qlite3 *,FuncDef
22960 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70  *, int nArg, Exp
22970 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
22980 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e  3InvalidFunction
22990 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
229a0 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
229b0 6c 75 65 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lue**);.int sqli
229c0 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72  te3VdbeParameter
229d0 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e  Index(Vdbe*, con
229e0 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
229f0 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73  int sqlite3Trans
22a00 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69  ferBindings(sqli
22a10 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69  te3_stmt *, sqli
22a20 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 69 6e 74  te3_stmt *);.int
22a30 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72   sqlite3Reprepar
22a40 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73  e(Vdbe*);.void s
22a50 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68  qlite3ExprListCh
22a60 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a  eckLength(Parse*
22a70 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
22a80 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53  st char*);.CollS
22a90 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72  eq *sqlite3Binar
22aa0 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28  yCompareCollSeq(
22ab0 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
22ac0 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71   Expr *);.int sq
22ad0 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72  lite3TempInMemor
22ae0 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a  y(const sqlite3*
22af0 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  );.const char *s
22b00 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64  qlite3JournalMod
22b10 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e  ename(int);.#ifn
22b20 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
22b30 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  WAL.  int sqlite
22b40 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69  3Checkpoint(sqli
22b50 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  te3*, int, int, 
22b60 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69  int*, int*);.  i
22b70 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66  nt sqlite3WalDef
22b80 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73  aultHook(void*,s
22b90 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
22ba0 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ar*,int);.#endif
22bb0 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e  ../* Declaration
22bc0 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  s for functions 
22bd0 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f  in fkey.c. All o
22be0 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c  f these are repl
22bf0 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70  aced by.** no-op
22c00 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f   macros if OMIT_
22c10 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64  FOREIGN_KEY is d
22c20 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20  efined. In this 
22c30 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a  case no foreign.
22c40 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61  ** key functiona
22c50 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c  lity is availabl
22c60 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47  e. If OMIT_TRIGG
22c70 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75  ER is defined bu
22c80 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47  t.** OMIT_FOREIG
22c90 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e  N_KEY is not, on
22ca0 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66  ly some of the f
22cb0 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d  unctions are no-
22cc0 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73  oped. In.** this
22cd0 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65   case foreign ke
22ce0 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62  ys are parsed, b
22cf0 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63  ut no other func
22d00 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a  tionality is .**
22d10 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72   provided (enfor
22d20 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e  cement of FK con
22d30 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65  straints require
22d40 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73  s the triggers s
22d50 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23  ub-system)..*/.#
22d60 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
22d70 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
22d80 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
22d90 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
22da0 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c  GGER).  void sql
22db0 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73  ite3FkCheck(Pars
22dc0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
22dd0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
22de0 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
22df0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
22e00 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76   *, Table*);.  v
22e10 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74  oid sqlite3FkAct
22e20 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ions(Parse*, Tab
22e30 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  le*, ExprList*, 
22e40 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
22e50 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
22e60 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
22e70 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
22e80 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
22e90 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
22ea0 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
22eb0 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
22ec0 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
22ed0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
22ee0 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
22ef0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
22f00 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63  te3FkCheck(a,b,c
22f10 2c 64 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,d).  #define sq
22f20 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
22f30 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e  (a,b,c).  #defin
22f40 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  e sqlite3FkOldma
22f50 73 6b 28 61 2c 62 29 20 20 20 20 20 20 30 0a 20  sk(a,b)      0. 
22f60 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22f70 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63  FkRequired(a,b,c
22f80 2c 64 29 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ,d) 0.#endif.#if
22f90 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
22fa0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76  _FOREIGN_KEY.  v
22fb0 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  oid sqlite3FkDel
22fc0 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54  ete(sqlite3 *, T
22fd0 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71  able*);.  int sq
22fe0 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
22ff0 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ex(Parse*,Table*
23000 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69  ,FKey*,Index**,i
23010 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt**);.#else.  #
23020 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
23030 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64  Delete(a,b).  #d
23040 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c  efine sqlite3FkL
23050 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63  ocateIndex(a,b,c
23060 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ,d,e).#endif.../
23070 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66  *.** Available f
23080 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20  ault injectors. 
23090 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65   Should be numbe
230a0 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  red beginning wi
230b0 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  th 0..*/.#define
230c0 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
230d0 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20  ECTOR_MALLOC    
230e0 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54   0.#define SQLIT
230f0 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
23100 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a  COUNT      1../*
23110 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
23120 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e  e to the code in
23130 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f   fault.c used fo
23140 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62  r identifying "b
23150 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63  enign".** malloc
23160 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20   failures. This 
23170 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20  is only present 
23180 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  if SQLITE_OMIT_B
23190 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69  UILTIN_TEST.** i
231a0 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a  s not defined..*
231b0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
231c0 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
231d0 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ST.  void sqlite
231e0 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
231f0 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64  oc(void);.  void
23200 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
23210 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23  nMalloc(void);.#
23220 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
23230 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
23240 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66  nMalloc().  #def
23250 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65  ine sqlite3EndBe
23260 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e  nignMalloc().#en
23270 64 69 66 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f  dif..#define IN_
23280 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20  INDEX_ROWID     
23290 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20        1.#define 
232a0 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20  IN_INDEX_EPH    
232b0 20 20 20 20 20 20 20 20 20 32 0a 23 64 65 66 69           2.#defi
232c0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
232d0 58 5f 41 53 43 20 20 20 20 20 20 20 33 0a 23 64  X_ASC       3.#d
232e0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
232f0 4e 44 45 58 5f 44 45 53 43 20 20 20 20 20 20 34  NDEX_DESC      4
23300 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
23310 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c  InIndex(Parse *,
23320 20 45 78 70 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   Expr *, int*);.
23330 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
23340 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49  NABLE_ATOMIC_WRI
23350 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TE.  int sqlite3
23360 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
23370 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74  te3_vfs *, const
23380 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33   char *, sqlite3
23390 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  _file *, int, in
233a0 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
233b0 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c  3JournalSize(sql
233c0 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69  ite3_vfs *);.  i
233d0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
233e0 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f  lCreate(sqlite3_
233f0 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73  file *);.  int s
23400 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69  qlite3JournalExi
23410 73 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  sts(sqlite3_file
23420 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64   *p);.#else.  #d
23430 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75  efine sqlite3Jou
23440 72 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28  rnalSize(pVfs) (
23450 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65  (pVfs)->szOsFile
23460 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
23470 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73  te3JournalExists
23480 28 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f  (p) 1.#endif..vo
23490 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  id sqlite3MemJou
234a0 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
234b0 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71  _file *);.int sq
234c0 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53  lite3MemJournalS
234d0 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ize(void);.int s
234e0 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e  qlite3IsMemJourn
234f0 61 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  al(sqlite3_file 
23500 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  *);..#if SQLITE_
23510 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
23520 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
23530 78 70 72 53 65 74 48 65 69 67 68 74 28 50 61 72  xprSetHeight(Par
23540 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
23550 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69   *p);.  int sqli
23560 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
23570 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20  ght(Select *);. 
23580 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72   int sqlite3Expr
23590 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73  CheckHeight(Pars
235a0 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a  e*, int);.#else.
235b0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
235c0 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28 78  3ExprSetHeight(x
235d0 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
235e0 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
235f0 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65  eight(x) 0.  #de
23600 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
23610 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29  CheckHeight(x,y)
23620 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c  .#endif..u32 sql
23630 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e  ite3Get4byte(con
23640 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  st u8*);.void sq
23650 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38  lite3Put4byte(u8
23660 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66  *, u32);..#ifdef
23670 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
23680 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76  NLOCK_NOTIFY.  v
23690 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
236a0 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c  ctionBlocked(sql
236b0 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20  ite3 *, sqlite3 
236c0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
236d0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
236e0 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  cked(sqlite3 *db
236f0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
23700 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
23710 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
23720 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
23730 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
23740 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20  nBlocked(x,y).  
23750 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
23760 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
23770 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73  d(x).  #define s
23780 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
23790 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66  Closed(x).#endif
237a0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
237b0 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
237c0 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
237d0 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a  FILE*, char *);.
237e0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
237f0 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
23800 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
23810 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
23820 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
23830 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
23840 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
23850 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
23860 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
23870 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
23880 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69  messages. .*/.#i
23890 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
238a0 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66  LE_IOTRACE.# def
238b0 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20  ine IOTRACE(A)  
238c0 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61  if( sqlite3IoTra
238d0 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54  ce ){ sqlite3IoT
238e0 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64  race A; }.  void
238f0 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
23900 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53  aceSql(Vdbe*);.S
23910 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69  QLITE_EXTERN voi
23920 64 20 28 2a 73 71 6c 69 74 65 33 49 6f 54 72 61  d (*sqlite3IoTra
23930 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ce)(const char*,
23940 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ...);.#else.# de
23950 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a  fine IOTRACE(A).
23960 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23970 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58  VdbeIOTraceSql(X
23980 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
23990 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61  These routines a
239a0 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  re available for
239b0 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75   the mem2.c debu
239c0 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c  gging memory all
239d0 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20  ocator.** only. 
239e0 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74   They are used t
239f0 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69  o verify that di
23a00 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20  fferent "types" 
23a10 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c  of memory.** all
23a20 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f  ocations are pro
23a30 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79  perly tracked by
23a40 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a   the system..**.
23a50 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
23a60 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73  ugSetType() sets
23a70 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61   the "type" of a
23a80 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20  n allocation to 
23a90 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45  one of.** the ME
23aa0 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64  MTYPE_* macros d
23ab0 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54  efined below.  T
23ac0 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20  he type must be 
23ad0 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a  a bitmask with.*
23ae0 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73  * a single bit s
23af0 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  et..**.** sqlite
23b00 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
23b10 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
23b20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69  if any of the bi
23b30 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
23b40 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
23b50 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
23b60 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
23b70 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
23b80 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c  etType()..** sql
23b90 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
23ba0 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65  ype() is intende
23bb0 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65  d for use inside
23bc0 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
23bd0 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  ents..**.** sqli
23be0 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
23bf0 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
23c00 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20   if none of the 
23c10 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
23c20 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
23c30 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
23c40 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
23c50 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
23c60 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a  gSetType()..**.*
23c70 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f  * Perhaps the mo
23c80 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69  st important poi
23c90 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72  nt is the differ
23ca0 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d  ence between MEM
23cb0 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64  TYPE_HEAP.** and
23cc0 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
23cd0 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63  DE.  If an alloc
23ce0 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45  ation is MEMTYPE
23cf0 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74  _LOOKASIDE, that
23d00 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67   means.** it mig
23d10 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c  ht have been all
23d20 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73  ocated by lookas
23d30 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20  ide, except the 
23d40 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a  allocation was.*
23d50 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c  * too large or l
23d60 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72  ookaside was alr
23d70 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69  eady full.  It i
23d80 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76  s important to v
23d90 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c  erify.** that al
23da0 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d  locations that m
23db0 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73  ight have been s
23dc0 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b  atisfied by look
23dd0 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a  aside are not.**
23de0 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20   passed back to 
23df0 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
23e00 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20  ee() routines.  
23e10 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20  Asserts such as 
23e20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61  the.** example a
23e30 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20  bove are placed 
23e40 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61  on the non-looka
23e50 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
23e60 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a  ines to verify.*
23e70 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e  * this constrain
23e80 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  t. .**.** All of
23e90 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66   this is no-op f
23ea0 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20  or a production 
23eb0 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20  build.  It only 
23ec0 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c  comes into.** pl
23ed0 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49  ay when the SQLI
23ee0 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70  TE_MEMDEBUG comp
23ef0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
23f00 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64  is used..*/.#ifd
23f10 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
23f20 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
23f30 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
23f40 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
23f50 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
23f60 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75  gHasType(void*,u
23f70 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
23f80 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
23f90 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65  void*,u8);.#else
23fa0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23fb0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
23fc0 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20  (X,Y)  /* no-op 
23fd0 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  */.# define sqli
23fe0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
23ff0 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66  pe(X,Y)  1.# def
24000 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
24010 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20  bugNoType(X,Y)  
24020 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e   1.#endif.#defin
24030 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20  e MEMTYPE_HEAP  
24040 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65       0x01  /* Ge
24050 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63  neral heap alloc
24060 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
24070 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  e MEMTYPE_LOOKAS
24080 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 4d 69  IDE  0x02  /* Mi
24090 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f  ght have been lo
240a0 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 20 2a  okaside memory *
240b0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
240c0 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30  E_SCRATCH    0x0
240d0 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c  4  /* Scratch al
240e0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
240f0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
24100 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a  CHE     0x08  /*
24110 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
24120 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
24130 6e 65 20 4d 45 4d 54 59 50 45 5f 44 42 20 20 20  ne MEMTYPE_DB   
24140 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 55        0x10  /* U
24150 73 65 73 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  ses sqlite3DbMal
24160 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c 69 74 65 5f  loc, not sqlite_
24170 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 23 65 6e 64 69  malloc */..#endi
24180 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f  f /* _SQLITEINT_
24190 48 5f 20 2a 2f 0a                                H_ */.