/ Hex Artifact Content
Login

Artifact b2a4e9a85e4bb49c1537fe7fc6532cd7ebe82aa0:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74  .** Similar is t
0540: 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  rue for Mac OS X
0550: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
0560: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20  upported on Mac 
0570: 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72  OS X 9 and later
0580: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
0590: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
05a0: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f  # define _LARGE_
05b0: 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69  FILE       1.# i
05c0: 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53  fndef _FILE_OFFS
05d0: 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69  ET_BITS.#   defi
05e0: 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ne _FILE_OFFSET_
05f0: 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a  BITS 64.# endif.
0600: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0610: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0620: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75  dif../*.** Inclu
0630: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  de the configura
0640: 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70  tion header outp
0650: 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65  ut by 'configure
0660: 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67  ' if we're using
0670: 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66   the.** autoconf
0680: 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a  -based build.*/.
0690: 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c  #ifdef _HAVE_SQL
06a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e  ITE_CONFIG_H.#in
06b0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22  clude "config.h"
06c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
06d0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
06e0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
06f0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
0700: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
0710: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
0720: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
0730: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
0740: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
0750: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
0760: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
0770: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
0780: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
0790: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
07a0: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
07b0: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
07c0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
07d0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
07e0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
07f0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
0800: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
0810: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
0820: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
0830: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
0840: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
0850: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
0860: 2e 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f 47  .. */.#ifndef _G
0870: 4e 55 5f 53 4f 55 52 43 45 0a 23 20 64 65 66 69  NU_SOURCE.# defi
0880: 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ne _GNU_SOURCE.#
0890: 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
08a0: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
08b0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 42 53 44  && !defined(_BSD
08c0: 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e  _SOURCE).# defin
08d0: 65 20 5f 42 53 44 5f 53 4f 55 52 43 45 0a 23 65  e _BSD_SOURCE.#e
08e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
08f0: 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65 61  ude standard hea
0900: 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65 63  der files as nec
0910: 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66  essary.*/.#ifdef
0920: 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23   HAVE_STDINT_H.#
0930: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e  include <stdint.
0940: 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  h>.#endif.#ifdef
0950: 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f 48   HAVE_INTTYPES_H
0960: 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79  .#include <intty
0970: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  pes.h>.#endif../
0980: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
0990: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
09a0: 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74  ed to cast point
09b0: 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20  ers to integers 
09c0: 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20  and.** integers 
09d0: 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68  to pointers.  Th
09e0: 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69  e way you do thi
09f0: 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e  s varies from on
0a00: 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  e compiler.** to
0a10: 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65   the next, so we
0a20: 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20   have developed 
0a30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  the following se
0a40: 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65  t of #if stateme
0a50: 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61  nts.** to genera
0a60: 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d  te appropriate m
0a70: 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65  acros for a wide
0a80: 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c   range of compil
0a90: 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ers..**.** The c
0aa0: 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77 61  orrect "ANSI" wa
0ab0: 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20  y to do this is 
0ac0: 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70 74  to use the intpt
0ad0: 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55 6e  r_t type. .** Un
0ae0: 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68 61  fortunately, tha
0af0: 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f 74  t typedef is not
0b00: 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c   available on al
0b10: 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a  l compilers, or.
0b20: 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61 69  ** if it is avai
0b30: 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69 72  lable, it requir
0b40: 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f  es an #include o
0b50: 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64 65  f specific heade
0b60: 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79 20  rs.** that vary 
0b70: 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65  from one machine
0b80: 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a   to the next..**
0b90: 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36 30  .** Ticket #3860
0ba0: 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d  :  The llvm-gcc-
0bb0: 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f  4.2 compiler fro
0bc0: 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f  m Apple chokes o
0bd0: 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64 2a  n.** the ((void*
0be0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0bf0: 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75 74   construct.  But
0c00: 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20   MSVC chokes on 
0c10: 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a  ((void*)(X))..**
0c20: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 64   So we have to d
0c30: 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f 73  efine the macros
0c40: 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77 61   in different wa
0c50: 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ys depending on 
0c60: 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e  the.** compiler.
0c70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0c80: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0c90: 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65 20  )  /* This case 
0ca0: 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20  should work for 
0cb0: 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  GCC */.# define 
0cc0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
0cd0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 5f  R(X)  ((void*)(_
0ce0: 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29  _PTRDIFF_TYPE__)
0cf0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
0d00: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
0d10: 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54 52  X)  ((int)(__PTR
0d20: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
0d30: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
0d40: 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20 20  __GNUC__)       
0d50: 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d  /* Works for com
0d60: 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68 61  pilers other tha
0d70: 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69  n LLVM */.# defi
0d80: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
0d90: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
0da0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0dc0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
0dd0: 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29 58  ((int)(((char*)X
0de0: 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65 6c  )-(char*)0)).#el
0df0: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f  if defined(HAVE_
0e00: 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55  STDINT_H)   /* U
0e10: 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66 20  se this case if 
0e20: 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65 61  we have ANSI hea
0e30: 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  ders */.# define
0e40: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0e50: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0e60: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 20  intptr_t)(X)).# 
0e70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0e80: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0e90: 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29  nt)(intptr_t)(X)
0ea0: 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20 20  ).#else         
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ec0: 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61 20   /* Generates a 
0ed0: 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69 74  warning - but it
0ee0: 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f   always works */
0ef0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0f00: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
0f10: 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20 64  ((void*)(X)).# d
0f20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
0f30: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
0f40: 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  t)(X)).#endif../
0f50: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
0f60: 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f  THREADSAFE macro
0f70: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
0f80: 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a   as 0, 1, or 2..
0f90: 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78  ** 0 means mutex
0fa0: 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74  es are permanent
0fb0: 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74  ly disable and t
0fc0: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65  he library is ne
0fd0: 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66  ver.** threadsaf
0fe0: 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20  e.  1 means the 
0ff0: 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61  library is seria
1000: 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74  lized which is t
1010: 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65  he highest.** le
1020: 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66  vel of threadsaf
1030: 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68  ety.  2 means th
1040: 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c  e library is mul
1050: 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c  tithreaded - mul
1060: 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73  tiple.** threads
1070: 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20   can use SQLite 
1080: 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77  as long as no tw
1090: 6f 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f  o threads try to
10a0: 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a   use the same.**
10b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
10c0: 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65  tion at the same
10d0: 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64   time..**.** Old
10e0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
10f0: 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70  QLite used an op
1100: 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46  tional THREADSAF
1110: 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73  E macro..** We s
1120: 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20  upport that for 
1130: 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21  legacy..*/.#if !
1140: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1150: 48 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20  HREADSAFE).# if 
1160: 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41  defined(THREADSA
1170: 46 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  FE).#   define S
1180: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
1190: 20 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c   THREADSAFE.# el
11a0: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
11b0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
11c0: 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37  1 /* IMP: R-0727
11d0: 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64  2-22309 */.# end
11e0: 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  if.#endif../*.**
11f0: 20 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77   Powersafe overw
1200: 72 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65  rite is on by de
1210: 66 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20  fault.  But can 
1220: 62 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73  be turned off us
1230: 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c  ing.** the -DSQL
1240: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1250: 45 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e  ERWRITE=0 comman
1260: 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a  d-line option..*
1270: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1280: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1290: 52 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51  RITE.# define SQ
12a0: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
12b0: 56 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69  VERWRITE 1.#endi
12c0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  f../*.** The SQL
12d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
12e0: 54 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73 74  TATUS macro must
12f0: 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 65   be defined as e
1300: 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a  ither 0 or 1..**
1310: 20 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20 77   It determines w
1320: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
1330: 65 20 66 65 61 74 75 72 65 73 20 72 65 6c 61 74  e features relat
1340: 65 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54 45  ed to .** SQLITE
1350: 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55  _CONFIG_MEMSTATU
1360: 53 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  S are available 
1370: 62 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e 6f  by default or no
1380: 74 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63 61  t. This value ca
1390: 6e 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64 64  n.** be overridd
13a0: 65 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  en at runtime us
13b0: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
13c0: 63 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a 2f  config() API..*/
13d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
13e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
13f0: 53 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65  STATUS).# define
1400: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
1410: 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64  MEMSTATUS 1.#end
1420: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c  if../*.** Exactl
1430: 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
1440: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75  lowing macros mu
1450: 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e  st be defined in
1460: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65   order to.** spe
1470: 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72  cify which memor
1480: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62  y allocation sub
1490: 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a  system to use..*
14a0: 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  *.**     SQLITE_
14b0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20  SYSTEM_MALLOC   
14c0: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f         // Use no
14d0: 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c  rmal system mall
14e0: 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49  oc().**     SQLI
14f0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20  TE_WIN32_MALLOC 
1500: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1510: 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65   Win32 native he
1520: 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51  ap API.**     SQ
1530: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55              // U
1550: 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63 61  se a stub alloca
1560: 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73 20  tor that always 
1570: 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c  fails.**     SQL
1580: 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20  ITE_MEMDEBUG    
1590: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65             // De
15a0: 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20  bugging version 
15b0: 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63  of system malloc
15c0: 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64  ().**.** On Wind
15d0: 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c 49  ows, if the SQLI
15e0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f  TE_WIN32_MALLOC_
15f0: 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20 69  VALIDATE macro i
1600: 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74 68  s defined and th
1610: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d 61  e.** assert() ma
1620: 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c 20  cro is enabled, 
1630: 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74  each call into t
1640: 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  he Win32 native 
1650: 68 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a 2a  heap subsystem.*
1660: 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65 61  * will cause Hea
1670: 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65 20  pValidate to be 
1680: 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61 70  called.  If heap
1690: 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75   validation shou
16a0: 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61  ld fail, an.** a
16b0: 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65  ssertion will be
16c0: 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a   triggered..**.*
16d0: 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  * If none of the
16e0: 20 61 62 6f 76 65 20 61 72 65 20 64 65 66 69 6e   above are defin
16f0: 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53 51 4c  ed, then set SQL
1700: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
1710: 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65 66 61  C as.** the defa
1720: 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ult..*/.#if defi
1730: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
1740: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
1750: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
1760: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
1770: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
1780: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
1790: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
17a0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e 31 0a  ITE_MEMDEBUG)>1.
17b0: 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f 72 20  # error "Two or 
17c0: 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  more of the foll
17d0: 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d 74 69  owing compile-ti
17e0: 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  me configuration
17f0: 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65 20 64   options\. are d
1800: 65 66 69 6e 65 64 20 62 75 74 20 61 74 20 6d 6f  efined but at mo
1810: 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f 77 65  st one is allowe
1820: 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59 53 54  d:\. SQLITE_SYST
1830: 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54  EM_MALLOC, SQLIT
1840: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20  E_WIN32_MALLOC, 
1850: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 2c  SQLITE_MEMDEBUG,
1860: 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  \. SQLITE_ZERO_M
1870: 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a 23 69  ALLOC".#endif.#i
1880: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
1890: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20  _SYSTEM_MALLOC) 
18a0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
18b0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
18c0: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
18d0: 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c  (SQLITE_ZERO_MAL
18e0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
18f0: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
1900: 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20  UG)==0.# define 
1910: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1920: 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  LLOC 1.#endif../
1930: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4d  *.** If SQLITE_M
1940: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
1950: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1960: 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70 20 74  en try to keep t
1970: 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66 20 6d  he.** sizes of m
1980: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1990: 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76 61 6c  s below this val
19a0: 75 65 20 77 68 65 72 65 20 70 6f 73 73 69 62 6c  ue where possibl
19b0: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
19c0: 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  ed(SQLITE_MALLOC
19d0: 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23 20 64  _SOFT_LIMIT).# d
19e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 4c  efine SQLITE_MAL
19f0: 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 31  LOC_SOFT_LIMIT 1
1a00: 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  024.#endif../*.*
1a10: 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65 66  * We need to def
1a20: 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ine _XOPEN_SOURC
1a30: 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69 6e 20  E as follows in 
1a40: 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c 65 0a  order to enable.
1a50: 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d 75 74  ** recursive mut
1a60: 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55 6e 69  exes on most Uni
1a70: 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20 66 63  x systems and fc
1a80: 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e 42 53  hmod() on OpenBS
1a90: 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50 45 4e  D..** But _XOPEN
1aa0: 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65 20 63  _SOURCE define c
1ab0: 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73 20 66  auses problems f
1ac0: 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73 6f 20  or Mac OS X, so 
1ad0: 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23  omit.** it..*/.#
1ae0: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58 4f 50  if !defined(_XOP
1af0: 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20 21 64  EN_SOURCE) && !d
1b00: 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49 4e 5f  efined(__DARWIN_
1b10: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
1b20: 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64 65 66  _APPLE__).#  def
1b30: 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ine _XOPEN_SOURC
1b40: 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  E 600.#endif../*
1b50: 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53  .** NDEBUG and S
1b60: 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20  QLITE_DEBUG are 
1b70: 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73  opposites.  It s
1b80: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20  hould always be 
1b90: 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  true that.** def
1ba0: 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64  ined(NDEBUG)==!d
1bb0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1bc0: 42 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69  BUG).  If this i
1bd0: 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
1be0: 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74  true,.** make it
1bf0: 20 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e   true by definin
1c00: 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20  g or undefining 
1c10: 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65  NDEBUG..**.** Se
1c20: 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b  tting NDEBUG mak
1c30: 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c  es the code smal
1c40: 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72 20 62  ler and faster b
1c50: 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65 0a  y disabling the.
1c60: 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74 61 74  ** assert() stat
1c70: 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
1c80: 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e 74 20  de.  So we want 
1c90: 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69  the default acti
1ca0: 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f 72 20  on.** to be for 
1cb0: 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73 65 74  NDEBUG to be set
1cc0: 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f 20 62   and NDEBUG to b
1cd0: 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e 6c 79  e undefined only
1ce0: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
1cf0: 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54 68 75  .** is set.  Thu
1d00: 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d 65 73  s NDEBUG becomes
1d10: 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74 68 65   an opt-in rathe
1d20: 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d 6f 75  r than an opt-ou
1d30: 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a 2a 2f  t.** feature..*/
1d40: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
1d50: 45 42 55 47 29 20 26 26 20 21 64 65 66 69 6e 65  EBUG) && !define
1d60: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
1d70: 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55 47  .# define NDEBUG
1d80: 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   1.#endif.#if de
1d90: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
1da0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1db0: 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20 4e  DEBUG).# undef N
1dc0: 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f 2a  DEBUG.#endif../*
1dd0: 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65  .** The testcase
1de0: 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
1df0: 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72   to aid in cover
1e00: 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68  age testing.  Wh
1e10: 65 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76  en .** doing cov
1e20: 65 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74  erage testing, t
1e30: 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73  he condition ins
1e40: 69 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ide the argument
1e50: 20 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28   to.** testcase(
1e60: 29 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61  ) must be evalua
1e70: 74 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e  ted both true an
1e80: 64 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72  d false in order
1e90: 20 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20   to.** get full 
1ea0: 62 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e  branch coverage.
1eb0: 20 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29    The testcase()
1ec0: 20 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74   macro is insert
1ed0: 65 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e  ed.** to help en
1ee0: 73 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65  sure adequate te
1ef0: 73 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70  st coverage in p
1f00: 6c 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70  laces where simp
1f10: 6c 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f  le.** condition/
1f20: 64 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67  decision coverag
1f30: 65 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e  e is inadequate.
1f40: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74    For example, t
1f50: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e  estcase().** can
1f60: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   be used to make
1f70: 20 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76   sure boundary v
1f80: 61 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64  alues are tested
1f90: 2e 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73  .  For.** bitmas
1fa0: 6b 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73  k tests, testcas
1fb0: 65 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20  e() can be used 
1fc0: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63  to make sure eac
1fd0: 68 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e  h bit.** is sign
1fe0: 69 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64  ificant and used
1ff0: 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20   at least once. 
2000: 20 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65   On switch state
2010: 6d 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d  ments.** where m
2020: 75 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f  ultiple cases go
2030: 20 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f   to the same blo
2040: 63 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74  ck of code, test
2050: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e  case().** can in
2060: 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61  sure that all ca
2070: 73 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65  ses are evaluate
2080: 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20  d..**.*/.#ifdef 
2090: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
20a0: 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
20b0: 74 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29  te3Coverage(int)
20c0: 3b 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63  ;.# define testc
20d0: 61 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b  ase(X)  if( X ){
20e0: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
20f0: 28 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65  (__LINE__); }.#e
2100: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73  lse.# define tes
2110: 74 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a  tcase(X).#endif.
2120: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f  ./*.** The TESTO
2130: 4e 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65  NLY macro is use
2140: 64 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72  d to enclose var
2150: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
2160: 6e 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62  ns or.** other b
2170: 69 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74  its of code that
2180: 20 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73   are needed to s
2190: 75 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d  upport the argum
21a0: 65 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74  ents.** within t
21b0: 65 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73  estcase() and as
21c0: 73 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a  sert() macros..*
21d0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e  /.#if !defined(N
21e0: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
21f0: 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47  d(SQLITE_COVERAG
2200: 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65  E_TEST).# define
2210: 20 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a   TESTONLY(X)  X.
2220: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54  #else.# define T
2230: 45 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69  ESTONLY(X).#endi
2240: 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d  f../*.** Sometim
2250: 65 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61  es we need a sma
2260: 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64  ll amount of cod
2270: 65 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69  e such as a vari
2280: 61 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  able initializat
2290: 69 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20  ion.** to setup 
22a0: 66 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65  for a later asse
22b0: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20  rt() statement. 
22c0: 20 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20   We do not want 
22d0: 74 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20  this code to.** 
22e0: 61 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65  appear when asse
22f0: 72 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64  rt() is disabled
2300: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
2310: 20 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66   macro is theref
2320: 6f 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63  ore.** used to c
2330: 6f 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75  ontain that setu
2340: 70 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56  p code.  The "VV
2350: 41 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64  A" acronym stand
2360: 73 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69  s for.** "Verifi
2370: 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
2380: 6f 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74  on, and Accredit
2390: 61 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65  ation".  In othe
23a0: 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20  r words, the.** 
23b0: 63 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f  code within VVA_
23c0: 4f 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79  ONLY() will only
23d0: 20 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69   run during veri
23e0: 66 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73  fication process
23f0: 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e  es..*/.#ifndef N
2400: 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56  DEBUG.# define V
2410: 56 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65  VA_ONLY(X)  X.#e
2420: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41  lse.# define VVA
2430: 5f 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a  _ONLY(X).#endif.
2440: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59  ./*.** The ALWAY
2450: 53 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72  S and NEVER macr
2460: 6f 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c  os surround bool
2470: 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ean expressions 
2480: 77 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e  which .** are in
2490: 74 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73  tended to always
24a0: 20 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73   be true or fals
24b0: 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  e, respectively.
24c0: 20 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73    Such.** expres
24d0: 73 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f  sions could be o
24e0: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
24f0: 63 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e  code completely.
2500: 20 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72    But they.** ar
2510: 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20  e included in a 
2520: 66 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64  few cases in ord
2530: 65 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68  er to enhance th
2540: 65 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20  e resilience.** 
2550: 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65  of SQLite to une
2560: 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72  xpected behavior
2570: 20 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63   - to make the c
2580: 6f 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e  ode "self-healin
2590: 67 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c  g".** or "ductil
25a0: 65 22 20 72 61 74 68 65 72 20 74 68 61 6e 20 62  e" rather than b
25b0: 65 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61  eing "brittle" a
25c0: 6e 64 20 63 72 61 73 68 69 6e 67 20 61 74 20 74  nd crashing at t
25d0: 68 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74  he first.** hint
25e0: 20 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65   of unplanned be
25f0: 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e  havior..**.** In
2600: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c   other words, AL
2610: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61  WAYS and NEVER a
2620: 72 65 20 61 64 64 65 64 20 66 6f 72 20 64 65 66  re added for def
2630: 65 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a  ensive code..**.
2640: 2a 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f  ** When doing co
2650: 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 20 41  verage testing A
2660: 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20  LWAYS and NEVER 
2670: 61 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74  are hard-coded t
2680: 6f 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64  o.** be true and
2690: 20 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74   false so that t
26a0: 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  he unreachable c
26b0: 6f 64 65 20 74 68 65 79 20 73 70 65 63 69 66 79  ode they specify
26c0: 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20   will.** not be 
26d0: 63 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73  counted as untes
26e0: 74 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66  ted code..*/.#if
26f0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2700: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23  COVERAGE_TEST).#
2710: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
2720: 29 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66  )      (1).# def
2730: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
2740: 20 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65     (0).#elif !de
2750: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20  fined(NDEBUG).# 
2760: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
2770: 20 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73        ((X)?1:(as
2780: 73 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65  sert(0),0)).# de
2790: 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20  fine NEVER(X)   
27a0: 20 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74      ((X)?(assert
27b0: 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a  (0),1):0).#else.
27c0: 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28  # define ALWAYS(
27d0: 58 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65  X)      (X).# de
27e0: 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20  fine NEVER(X)   
27f0: 20 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a      (X).#endif..
2800: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
2810: 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20  e (non-zero) if 
2820: 74 68 65 20 69 6e 70 75 74 20 69 73 20 61 20 69  the input is a i
2830: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
2840: 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66  oo large.** to f
2850: 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20  it in 32-bits.  
2860: 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
2870: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72  ed inside of var
2880: 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a  ious testcase().
2890: 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72  ** macros to ver
28a0: 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65  ify that we have
28b0: 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66   tested SQLite f
28c0: 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75  or large-file su
28d0: 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  pport..*/.#defin
28e0: 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20  e IS_BIG_INT(X) 
28f0: 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66   (((X)&~(i64)0xf
2900: 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a  fffffff)!=0)../*
2910: 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e  .** The macro un
2920: 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69  likely() is a hi
2930: 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64  nt that surround
2940: 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65  s a boolean.** e
2950: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
2960: 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e  s usually false.
2970: 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29    Macro likely()
2980: 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20   surrounds.** a 
2990: 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
29a0: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
29b0: 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20  ly true.  These 
29c0: 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20  hints could,.** 
29d0: 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73  in theory, be us
29e0: 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c  ed by the compil
29f0: 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62  er to generate b
2a00: 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a  etter code, but.
2a10: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65  ** currently the
2a20: 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65  y are just comme
2a30: 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65  nts for human re
2a40: 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  aders..*/.#defin
2a50: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28  e likely(X)    (
2a60: 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b  X).#define unlik
2a70: 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e  ely(X)  (X)..#in
2a80: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68  clude "sqlite3.h
2a90: 22 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73 68  ".#include "hash
2aa0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61  .h".#include "pa
2ab0: 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  rse.h".#include 
2ac0: 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75  <stdio.h>.#inclu
2ad0: 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69  de <stdlib.h>.#i
2ae0: 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68  nclude <string.h
2af0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65  >.#include <asse
2b00: 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  rt.h>.#include <
2b10: 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a  stddef.h>../*.**
2b20: 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f   If compiling fo
2b30: 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68  r a processor th
2b40: 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e  at lacks floatin
2b50: 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c  g point support,
2b60: 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69  .** substitute i
2b70: 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74  nteger for float
2b80: 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66  ing-point.*/.#if
2b90: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ba0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23  FLOATING_POINT.#
2bb0: 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73   define double s
2bc0: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
2bd0: 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74  fine float sqlit
2be0: 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65  e_int64.# define
2bf0: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
2c00: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
2c10: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ifndef SQLITE_BI
2c20: 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65  G_DBL.#   define
2c30: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
2c40: 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  (((sqlite3_int64
2c50: 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66  )1)<<50).# endif
2c60: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2c70: 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46  _OMIT_DATETIME_F
2c80: 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20  UNCS 1.# define 
2c90: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
2ca0: 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  E 1.# undef SQLI
2cb0: 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f  TE_MIXED_ENDIAN_
2cc0: 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e  64BIT_FLOAT.# un
2cd0: 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f  def SQLITE_HAVE_
2ce0: 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66  ISNAN.#endif.#if
2cf0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f  ndef SQLITE_BIG_
2d00: 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  DBL.# define SQL
2d10: 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39  ITE_BIG_DBL (1e9
2d20: 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  9).#endif../*.**
2d30: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20   OMIT_TEMPDB is 
2d40: 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49  set to 1 if SQLI
2d50: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69  TE_OMIT_TEMPDB i
2d60: 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a  s defined, or 0.
2d70: 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61  ** afterward. Ha
2d80: 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20  ving this macro 
2d90: 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75  allows us to cau
2da0: 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65  se the C compile
2db0: 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f  r .** to omit co
2dc0: 64 65 20 75 73 65 64 20 62 79 20 54 45 4d 50 20  de used by TEMP 
2dd0: 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d  tables without m
2de0: 65 73 73 79 20 23 69 66 6e 64 65 66 20 73 74 61  essy #ifndef sta
2df0: 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64  tements..*/.#ifd
2e00: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
2e10: 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d  EMPDB.#define OM
2e20: 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73  IT_TEMPDB 1.#els
2e30: 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  e.#define OMIT_T
2e40: 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a  EMPDB 0.#endif..
2e50: 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20  /*.** The "file 
2e60: 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69  format" number i
2e70: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
2e80: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
2e90: 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65   whenever.** the
2ea0: 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65   VDBE-level file
2eb0: 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e   format changes.
2ec0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2ed0: 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68  macros define th
2ee0: 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74  e.** the default
2ef0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72   file format for
2f00: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 61   new databases a
2f10: 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66  nd the maximum f
2f20: 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68  ile format.** th
2f30: 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  at the library c
2f40: 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66  an read..*/.#def
2f50: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46  ine SQLITE_MAX_F
2f60: 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66  ILE_FORMAT 4.#if
2f70: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
2f80: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a  ULT_FILE_FORMAT.
2f90: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2fa0: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
2fb0: 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  MAT 4.#endif../*
2fc0: 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68  .** Determine wh
2fd0: 65 74 68 65 72 20 74 72 69 67 67 65 72 73 20 61  ether triggers a
2fe0: 72 65 20 72 65 63 75 72 73 69 76 65 20 62 79 20  re recursive by 
2ff0: 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63  default.  This c
3000: 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64  an be.** changed
3010: 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69   at run-time usi
3020: 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  ng a pragma..*/.
3030: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
3040: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
3050: 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65 66 69  _TRIGGERS.# defi
3060: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
3070: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
3080: 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  GERS 0.#endif../
3090: 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64  *.** Provide a d
30a0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
30b0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
30c0: 52 45 20 69 6e 20 63 61 73 65 20 69 74 20 69 73  RE in case it is
30d0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a   not specified.*
30e0: 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  * on the command
30f0: 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  -line.*/.#ifndef
3100: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
3110: 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RE.# define SQLI
3120: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a  TE_TEMP_STORE 1.
3130: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3140: 54 45 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20  TEMP_STORE_xc 1 
3150: 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d   /* Exclude from
3160: 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64   ctime.c */.#end
3170: 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f  if../*.** GCC do
3180: 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68  es not define th
3190: 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63  e offsetof() mac
31a0: 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65  ro so we'll have
31b0: 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72   to do it.** our
31c0: 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64  selves..*/.#ifnd
31d0: 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66  ef offsetof.#def
31e0: 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52  ine offsetof(STR
31f0: 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28  UCTURE,FIELD) ((
3200: 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53  int)((char*)&((S
3210: 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49  TRUCTURE*)0)->FI
3220: 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ELD)).#endif../*
3230: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f  .** Macros to co
3240: 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e  mpute minimum an
3250: 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f  d maximum of two
3260: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65   numbers..*/.#de
3270: 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28  fine MIN(A,B) ((
3280: 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)<(B)?(A):(B)).
3290: 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29  #define MAX(A,B)
32a0: 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42   ((A)>(B)?(A):(B
32b0: 29 29 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  ))../*.** Check 
32c0: 74 6f 20 73 65 65 20 69 66 20 74 68 69 73 20 6d  to see if this m
32d0: 61 63 68 69 6e 65 20 75 73 65 73 20 45 42 43 44  achine uses EBCD
32e0: 49 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65  IC.  (Yes, belie
32f0: 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c  ve it or.** not,
3300: 20 74 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c   there are still
3310: 20 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68   machines out th
3320: 65 72 65 20 74 68 61 74 20 75 73 65 20 45 42 43  ere that use EBC
3330: 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27  DIC.).*/.#if 'A'
3340: 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66   == '\301'.# def
3350: 69 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49  ine SQLITE_EBCDI
3360: 43 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  C 1.#else.# defi
3370: 6e 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20  ne SQLITE_ASCII 
3380: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
3390: 49 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77  Integers of know
33a0: 6e 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20  n sizes.  These 
33b0: 74 79 70 65 64 65 66 73 20 6d 69 67 68 74 20 63  typedefs might c
33c0: 68 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74  hange for archit
33d0: 65 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65  ectures.** where
33e0: 20 74 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e   the sizes very.
33f0: 20 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d    Preprocessor m
3400: 61 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61  acros are availa
3410: 62 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a  ble so that the.
3420: 2a 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65 20  ** types can be 
3430: 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64  conveniently red
3440: 65 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c  efined at compil
3450: 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68  e-type.  Like th
3460: 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20  is:.**.**       
3470: 20 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f    cc '-DUINTPTR_
3480: 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69  TYPE=long long i
3490: 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64  nt' ....*/.#ifnd
34a0: 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23  ef UINT32_TYPE.#
34b0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
34c0: 33 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  32_T.#  define U
34d0: 49 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33  INT32_TYPE uint3
34e0: 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  2_t.# else.#  de
34f0: 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45  fine UINT32_TYPE
3500: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20   unsigned int.# 
3510: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3520: 6e 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  ndef UINT16_TYPE
3530: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
3540: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
3550: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e   UINT16_TYPE uin
3560: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
3570: 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59  define UINT16_TY
3580: 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72  PE unsigned shor
3590: 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  t int.# endif.#e
35a0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
35b0: 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  16_TYPE.# ifdef 
35c0: 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20  HAVE_INT16_T.#  
35d0: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
35e0: 45 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65  E int16_t.# else
35f0: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
3600: 5f 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a  _TYPE short int.
3610: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
3620: 69 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50  ifndef UINT8_TYP
3630: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
3640: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
3650: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74   UINT8_TYPE uint
3660: 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  8_t.# else.#  de
3670: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
3680: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20  unsigned char.# 
3690: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
36a0: 6e 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23  ndef INT8_TYPE.#
36b0: 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38   ifdef HAVE_INT8
36c0: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  _T.#  define INT
36d0: 38 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20  8_TYPE int8_t.# 
36e0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
36f0: 4e 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20  NT8_TYPE signed 
3700: 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e  char.# endif.#en
3710: 64 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47  dif.#ifndef LONG
3720: 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65  DOUBLE_TYPE.# de
3730: 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  fine LONGDOUBLE_
3740: 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65  TYPE long double
3750: 0a 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20  .#endif.typedef 
3760: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34  sqlite_int64 i64
3770: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d  ;          /* 8-
3780: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
3790: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73  ger */.typedef s
37a0: 71 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34  qlite_uint64 u64
37b0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62  ;         /* 8-b
37c0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
37d0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
37e0: 55 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b  UINT32_TYPE u32;
37f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d             /* 4-
3800: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
3810: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
3820: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36   UINT16_TYPE u16
3830: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32  ;           /* 2
3840: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
3850: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
3860: 66 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36  f INT16_TYPE i16
3870: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
3880: 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  2-byte signed in
3890: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
38a0: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20   UINT8_TYPE u8; 
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
38c0: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
38d0: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
38e0: 66 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20  f INT8_TYPE i8; 
38f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3900: 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  1-byte signed in
3910: 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  teger */../*.** 
3920: 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69  SQLITE_MAX_U32 i
3930: 73 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74  s a u64 constant
3940: 20 74 68 61 74 20 69 73 20 74 68 65 20 6d 61 78   that is the max
3950: 69 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a  imum u64 value.*
3960: 2a 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 74  * that can be st
3970: 6f 72 65 64 20 69 6e 20 61 20 75 33 32 20 77 69  ored in a u32 wi
3980: 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61  thout loss of da
3990: 74 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  ta.  The value.*
39a0: 2a 20 69 73 20 30 78 30 30 30 30 30 30 30 30 66  * is 0x00000000f
39b0: 66 66 66 66 66 66 66 2e 20 20 42 75 74 20 62 65  fffffff.  But be
39c0: 63 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20  cause of quirks 
39d0: 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  of some compiler
39e0: 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f  s, we.** have to
39f0: 20 73 70 65 63 69 66 79 20 74 68 65 20 76 61 6c   specify the val
3a00: 75 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69  ue in the less i
3a10: 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20  ntuitive manner 
3a20: 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e  shown:.*/.#defin
3a30: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32  e SQLITE_MAX_U32
3a40: 20 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32    ((((u64)1)<<32
3a50: 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  )-1)../*.** The 
3a60: 64 61 74 61 74 79 70 65 20 75 73 65 64 20 74 6f  datatype used to
3a70: 20 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73   store estimates
3a80: 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   of the number o
3a90: 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74  f rows in a.** t
3aa0: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
3ab0: 54 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67  This is an unsig
3ac0: 6e 65 64 20 69 6e 74 65 67 65 72 20 74 79 70 65  ned integer type
3ad0: 2e 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a  .  For 99.9% of.
3ae0: 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20  ** the world, a 
3af0: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69  32-bit integer i
3b00: 73 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42  s sufficient.  B
3b10: 75 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ut a 64-bit inte
3b20: 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  ger.** can be us
3b30: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
3b40: 6d 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a  me if desired..*
3b50: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
3b60: 36 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70  64BIT_STATS. typ
3b70: 65 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74  edef u64 tRowcnt
3b80: 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f  ;    /* 64-bit o
3b90: 6e 6c 79 20 69 66 20 72 65 71 75 65 73 74 65 64  nly if requested
3ba0: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
3bb0: 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64   */.#else. typed
3bc0: 65 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20  ef u32 tRowcnt; 
3bd0: 20 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20     /* 32-bit is 
3be0: 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  the default */.#
3bf0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
3c00: 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
3c10: 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63   whether the mac
3c20: 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c  hine is big or l
3c30: 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a  ittle endian,.**
3c40: 20 65 76 61 6c 75 61 74 65 64 20 61 74 20 72 75   evaluated at ru
3c50: 6e 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ntime..*/.#ifdef
3c60: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
3c70: 54 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73  TION.const int s
3c80: 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23  qlite3one = 1;.#
3c90: 65 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73  else.extern cons
3ca0: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
3cb0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
3cc0: 69 6e 65 64 28 69 33 38 36 29 20 7c 7c 20 64 65  ined(i386) || de
3cd0: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
3ce0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58  || defined(_M_IX
3cf0: 38 36 29 5c 0a 20 20 20 20 20 20 20 20 20 20 20  86)\.           
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d10: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78    || defined(__x
3d20: 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65  86_64) || define
3d30: 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 0a 23 20  d(__x86_64__).# 
3d40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3d50: 47 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64  GENDIAN    0.# d
3d60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
3d70: 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65  TLEENDIAN 1.# de
3d80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
3d90: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
3da0: 55 54 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20  UTF16LE.#else.# 
3db0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3dc0: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
3dd0: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
3de0: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
3df0: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
3e00: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
3e10: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
3e20: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3e30: 55 54 46 31 36 4e 41 54 49 56 45 20 28 53 51 4c  UTF16NATIVE (SQL
3e40: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51  ITE_BIGENDIAN?SQ
3e50: 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c  LITE_UTF16BE:SQL
3e60: 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e  ITE_UTF16LE).#en
3e70: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74  dif../*.** Const
3e80: 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72  ants for the lar
3e90: 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73  gest and smalles
3ea0: 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69  t possible 64-bi
3eb0: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
3ec0: 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  s..** These macr
3ed0: 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20  os are designed 
3ee0: 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c  to work correctl
3ef0: 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74  y on both 32-bit
3f00: 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63   and 64-bit.** c
3f10: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65  ompilers..*/.#de
3f20: 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54  fine LARGEST_INT
3f30: 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c  64  (0xffffffff|
3f40: 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66  (((i64)0x7ffffff
3f50: 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65  f)<<32)).#define
3f60: 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20   SMALLEST_INT64 
3f70: 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52  (((i64)-1) - LAR
3f80: 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20  GEST_INT64)../* 
3f90: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
3fa0: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
3fb0: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
3fc0: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
3fd0: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
3fe0: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
3ff0: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
4000: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
4010: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
4020: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
4030: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
4040: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
4050: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
4060: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
4070: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
4080: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
4090: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
40a0: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
40b0: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
40c0: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
40d0: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
40e0: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
40f0: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
4100: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
4110: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
4120: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
4130: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
4140: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
4150: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
4160: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
4170: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
4180: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
4190: 69 6d 70 6c 65 6d 65 6e 74 69 6f 6e 20 6d 69 67  implemention mig
41a0: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
41b0: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
41c0: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
41d0: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
41e0: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
41f0: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
4200: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
4210: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
4220: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
4230: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
4240: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
4250: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
4260: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
4270: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
4280: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
4290: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
42a0: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
42b0: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
42c0: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
42d0: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
42e0: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
42f0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4300: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
4310: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
4320: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
4330: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4340: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4350: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
4360: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
4370: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
4380: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
4390: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
43a0: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
43b0: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
43c0: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
43d0: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
43e0: 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52  nals.h>.# if TAR
43f0: 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20  GET_OS_IPHONE.# 
4400: 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d    undef SQLITE_M
4410: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20  AX_MMAP_SIZE.#  
4420: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4430: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
4440: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
4450: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  fndef SQLITE_MAX
4460: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20  _MMAP_SIZE.# if 
4470: 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f  defined(__linux_
4480: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
4490: 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c  d(_WIN32) \.  ||
44a0: 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c   (defined(__APPL
44b0: 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28  E__) && defined(
44c0: 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c  __MACH__)) \.  |
44d0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29  | defined(__sun)
44e0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
44f0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4500: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
4510: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
4520: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
4530: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
4540: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
4550: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4560: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  AX_MMAP_SIZE_xc 
4570: 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f  1 /* exclude fro
4580: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
4590: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
45a0: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
45b0: 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20   is zero on all 
45c0: 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20  platforms.  Or, 
45d0: 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72  even if a larger
45e0: 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  .** default MMAP
45f0: 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69  _SIZE is specifi
4600: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
4610: 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68  me, make sure th
4620: 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f  at it does.** no
4630: 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78  t exceed the max
4640: 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a  imum mmap size..
4650: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4660: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
4670: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
4680: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
4690: 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65  _SIZE 0.# define
46a0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
46b0: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20  MMAP_SIZE_xc 1  
46c0: 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* Exclude from 
46d0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
46e0: 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46  f.#if SQLITE_DEF
46f0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53  AULT_MMAP_SIZE>S
4700: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4710: 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  IZE.# undef SQLI
4720: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
4730: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
4740: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
4750: 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41  P_SIZE SQLITE_MA
4760: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64  X_MMAP_SIZE.#end
4770: 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
4780: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
4790: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
47a0: 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
47b0: 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  e the busy-handl
47c0: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66  er.** callback f
47d0: 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69 74  or a given sqlit
47e0: 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a  e handle. .**.**
47f0: 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73 79   The sqlite.busy
4800: 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f  Handler member o
4810: 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74 72  f the sqlite str
4820: 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  uct contains the
4830: 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63   busy.** callbac
4840: 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61  k for the databa
4850: 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68 20  se handle. Each 
4860: 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69 61  pager opened via
4870: 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68   the sqlite.** h
4880: 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64 20  andle is passed 
4890: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c  a pointer to sql
48a0: 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e  ite.busyHandler.
48b0: 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65   The busy-handle
48c0: 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73  r.** callback is
48d0: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b   currently invok
48e0: 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74  ed only from wit
48f0: 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a  hin pager.c..*/.
4900: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42  typedef struct B
4910: 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79 48  usyHandler BusyH
4920: 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20 42  andler;.struct B
4930: 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69  usyHandler {.  i
4940: 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69 64  nt (*xFunc)(void
4950: 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65   *,int);  /* The
4960: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   busy callback *
4970: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b 20  /.  void *pArg; 
4980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4990: 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20 62  * First arg to b
49a0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
49b0: 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20 20    int nBusy;    
49c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
49d0: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
49e0: 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20   each busy call 
49f0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d  */.};../*.** Nam
4a00: 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20  e of the master 
4a10: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20  database table. 
4a20: 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   The master data
4a30: 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73  base table.** is
4a40: 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65   a special table
4a50: 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
4a60: 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62  names and attrib
4a70: 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75  utes of all.** u
4a80: 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69  ser tables and i
4a90: 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  ndices..*/.#defi
4aa0: 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  ne MASTER_NAME  
4ab0: 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73       "sqlite_mas
4ac0: 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d  ter".#define TEM
4ad0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22  P_MASTER_NAME  "
4ae0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
4af0: 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72  er"../*.** The r
4b00: 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20  oot-page of the 
4b10: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
4b20: 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  table..*/.#defin
4b30: 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20  e MASTER_ROOT   
4b40: 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65      1../*.** The
4b50: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68   name of the sch
4b60: 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64  ema table..*/.#d
4b70: 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42  efine SCHEMA_TAB
4b80: 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54  LE(x)  ((!OMIT_T
4b90: 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54  EMPDB)&&(x==1)?T
4ba0: 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a  EMP_MASTER_NAME:
4bb0: 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a  MASTER_NAME)../*
4bc0: 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63  .** A convenienc
4bd0: 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74  e macro that ret
4be0: 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
4bf0: 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a  of elements in.*
4c00: 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23  * an array..*/.#
4c10: 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65  define ArraySize
4c20: 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69  (X)    ((int)(si
4c30: 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58  zeof(X)/sizeof(X
4c40: 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65  [0])))../*.** De
4c50: 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61  termine if the a
4c60: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77  rgument is a pow
4c70: 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65  er of two.*/.#de
4c80: 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77  fine IsPowerOfTw
4c90: 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d  o(X) (((X)&((X)-
4ca0: 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  1))==0)../*.** T
4cb0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c  he following val
4cc0: 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74  ue as a destruct
4cd0: 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20  or means to use 
4ce0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e  sqlite3DbFree().
4cf0: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44  .** The sqlite3D
4d00: 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20  bFree() routine 
4d10: 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72  requires two par
4d20: 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20  ameters instead 
4d30: 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20 70  of the .** one p
4d40: 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 64 65  arameter that de
4d50: 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c  structors normal
4d60: 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20  ly want.  So we 
4d70: 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63  have to introduc
4d80: 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69 63  e .** this magic
4d90: 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65 20   value that the 
4da0: 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61  code knows to ha
4db0: 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c 79  ndle differently
4dc0: 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e 74  .  Any .** point
4dd0: 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72  er will work her
4de0: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20  e as long as it 
4df0: 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  is distinct from
4e00: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a   SQLITE_STATIC.*
4e10: 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41  * and SQLITE_TRA
4e20: 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69  NSIENT..*/.#defi
4e30: 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49  ne SQLITE_DYNAMI
4e40: 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65  C   ((sqlite3_de
4e50: 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71  structor_type)sq
4e60: 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29  lite3MallocSize)
4e70: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c  ../*.** When SQL
4e80: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20  ITE_OMIT_WSD is 
4e90: 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e  defined, it mean
4ea0: 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67 65  s that the targe
4eb0: 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a  t platform does.
4ec0: 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57  ** not support W
4ed0: 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44  ritable Static D
4ee0: 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20 61  ata (WSD) such a
4ef0: 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61  s global and sta
4f00: 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a  tic variables..*
4f10: 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20  * All variables 
4f20: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 6f  must either be o
4f30: 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64  n the stack or d
4f40: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
4f50: 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  ated from.** the
4f60: 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44   heap.  When WSD
4f70: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c   is unsupported,
4f80: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64 65   the variable de
4f90: 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74  clarations scatt
4fa0: 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f  ered.** througho
4fb0: 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ut the SQLite co
4fc0: 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63  de must become c
4fd0: 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64  onstants instead
4fe0: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53  .  The SQLITE_WS
4ff0: 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  D.** macro is us
5000: 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  ed for this purp
5010: 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61  ose.  And instea
5020: 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67  d of referencing
5030: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
5040: 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73   directly, we us
5050: 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61  e its constant a
5060: 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75  s a key to looku
5070: 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  p the run-time a
5080: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66  llocated.** buff
5090: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65  er that holds re
50a0: 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68  al variable.  Th
50b0: 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c  e constant is al
50c0: 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  so the initializ
50d0: 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75  er.** for the ru
50e0: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
50f0: 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49   buffer..**.** I
5100: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
5110: 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73 75   where WSD is su
5120: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c  pported, the SQL
5130: 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42  ITE_WSD and GLOB
5140: 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63  AL.** macros bec
5150: 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68  ome no-ops and h
5160: 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d  ave zero perform
5170: 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a  ance impact..*/.
5180: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
5190: 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  IT_WSD.  #define
51a0: 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73   SQLITE_WSD cons
51b0: 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  t.  #define GLOB
51c0: 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71  AL(t,v) (*(t*)sq
51d0: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28  lite3_wsd_find((
51e0: 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65  void*)&(v), size
51f0: 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e  of(v))).  #defin
5200: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
5210: 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72  onfig GLOBAL(str
5220: 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
5230: 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  g, sqlite3Config
5240: 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ).  int sqlite3_
5250: 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20  wsd_init(int N, 
5260: 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a  int J);.  void *
5270: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
5280: 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29  (void *K, int L)
5290: 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
52a0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20 20  e SQLITE_WSD .  
52b0: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
52c0: 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20  ,v) v.  #define 
52d0: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
52e0: 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
52f0: 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  g.#endif../*.** 
5300: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5310: 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f  cros are used to
5320: 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c   suppress compil
5330: 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20  er warnings and 
5340: 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c  to.** make it cl
5350: 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61  ear to human rea
5360: 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63  ders when a func
5370: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
5380: 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 20 0a  s deliberately .
5390: 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77  ** left unused w
53a0: 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f  ithin the body o
53b0: 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68  f a function. Th
53c0: 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65  is usually happe
53d0: 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e  ns when.** a fun
53e0: 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20  ction is called 
53f0: 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  via a function p
5400: 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d  ointer. For exam
5410: 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70 6c  ple the .** impl
5420: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e  ementation of an
5430: 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20 73   SQL aggregate s
5440: 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79  tep callback may
5450: 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a 20   not use the.** 
5460: 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61  parameter indica
5470: 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20  ting the number 
5480: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73  of arguments pas
5490: 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72 65  sed to the aggre
54a0: 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b  gate,.** if it k
54b0: 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20 69  nows that this i
54c0: 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65 77  s enforced elsew
54d0: 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  here..**.** When
54e0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
54f0: 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65  meter is not use
5500: 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e 20  d at all within 
5510: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
5520: 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73  nction,.** it is
5530: 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64   generally named
5540: 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22 4e   "NotUsed" or "N
5550: 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b 65  otUsed2" to make
5560: 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c 65   things even cle
5570: 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72  arer..** However
5580: 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20 6d  , these macros m
5590: 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ay also be used 
55a0: 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72 6e  to suppress warn
55b0: 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f 0a  ings related to.
55c0: 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74 68  ** parameters th
55d0: 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f  at may or may no
55e0: 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e 64  t be used depend
55f0: 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69  ing on compilati
5600: 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46  on options..** F
5610: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73 65  or example those
5620: 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79   parameters only
5630: 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74 28   used in assert(
5640: 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e  ) statements. In
5650: 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73 20   these.** cases 
5660: 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 61  the parameters a
5670: 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72 20  re named as per 
5680: 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e  the usual conven
5690: 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tions..*/.#defin
56a0: 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54  e UNUSED_PARAMET
56b0: 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a  ER(x) (void)(x).
56c0: 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50  #define UNUSED_P
56d0: 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20 55  ARAMETER2(x,y) U
56e0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
56f0: 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  x),UNUSED_PARAME
5700: 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f  TER(y)../*.** Fo
5710: 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65 73  rward references
5720: 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a 2a   to structures.*
5730: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
5740: 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f   AggInfo AggInfo
5750: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5760: 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75 74   AuthContext Aut
5770: 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65  hContext;.typede
5780: 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63  f struct Autoinc
5790: 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f  Info AutoincInfo
57a0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
57b0: 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b 0a   Bitvec Bitvec;.
57c0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 43  typedef struct C
57d0: 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a  ollSeq CollSeq;.
57e0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 43  typedef struct C
57f0: 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79  olumn Column;.ty
5800: 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62 20  pedef struct Db 
5810: 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  Db;.typedef stru
5820: 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61  ct Schema Schema
5830: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5840: 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65   Expr Expr;.type
5850: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 4c  def struct ExprL
5860: 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79  ist ExprList;.ty
5870: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
5880: 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a  rSpan ExprSpan;.
5890: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
58a0: 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65  Key FKey;.typede
58b0: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  f struct FuncDes
58c0: 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74  tructor FuncDest
58d0: 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20  ructor;.typedef 
58e0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 46  struct FuncDef F
58f0: 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20  uncDef;.typedef 
5900: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
5910: 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a  sh FuncDefHash;.
5920: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
5930: 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79  dList IdList;.ty
5940: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64  pedef struct Ind
5950: 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65  ex Index;.typede
5960: 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  f struct IndexSa
5970: 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65  mple IndexSample
5980: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5990: 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61   KeyClass KeyCla
59a0: 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ss;.typedef stru
59b0: 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e  ct KeyInfo KeyIn
59c0: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
59d0: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f  ct Lookaside Loo
59e0: 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20  kaside;.typedef 
59f0: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
5a00: 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  Slot LookasideSl
5a10: 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ot;.typedef stru
5a20: 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65  ct Module Module
5a30: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5a40: 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d   NameContext Nam
5a50: 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65  eContext;.typede
5a60: 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20 50  f struct Parse P
5a70: 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74  arse;.typedef st
5a80: 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53  ruct RowSet RowS
5a90: 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  et;.typedef stru
5aa0: 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76  ct Savepoint Sav
5ab0: 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20  epoint;.typedef 
5ac0: 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53 65  struct Select Se
5ad0: 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74  lect;.typedef st
5ae0: 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
5af0: 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65  SelectDest;.type
5b00: 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69  def struct SrcLi
5b10: 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65  st SrcList;.type
5b20: 64 65 66 20 73 74 72 75 63 74 20 53 74 72 41 63  def struct StrAc
5b30: 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79  cum StrAccum;.ty
5b40: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
5b50: 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65  le Table;.typede
5b60: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f  f struct TableLo
5b70: 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79  ck TableLock;.ty
5b80: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b  pedef struct Tok
5b90: 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65  en Token;.typede
5ba0: 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
5bb0: 20 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65   Trigger;.typede
5bc0: 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
5bd0: 50 72 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a  Prg TriggerPrg;.
5be0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
5bf0: 72 69 67 67 65 72 53 74 65 70 20 54 72 69 67 67  riggerStep Trigg
5c00: 65 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20  erStep;.typedef 
5c10: 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52  struct UnpackedR
5c20: 65 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65  ecord UnpackedRe
5c30: 63 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74  cord;.typedef st
5c40: 72 75 63 74 20 56 54 61 62 6c 65 20 56 54 61 62  ruct VTable VTab
5c50: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
5c60: 63 74 20 56 74 61 62 43 74 78 20 56 74 61 62 43  ct VtabCtx VtabC
5c70: 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  tx;.typedef stru
5c80: 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72  ct Walker Walker
5c90: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5ca0: 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65   WhereInfo Where
5cb0: 49 6e 66 6f 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  Info;../*.** Def
5cc0: 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65  er sourcing vdbe
5cd0: 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75  .h and btree.h u
5ce0: 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 22  ntil after the "
5cf0: 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73  u8" and .** "Bus
5d00: 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65  yHandler" typede
5d10: 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20  fs. vdbe.h also 
5d20: 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20 6f  requires a few o
5d30: 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20  f the opaque.** 
5d40: 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28 69  pointer types (i
5d50: 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66  .e. FuncDef) def
5d60: 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23  ined above..*/.#
5d70: 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68  include "btree.h
5d80: 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65  ".#include "vdbe
5d90: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61  .h".#include "pa
5da0: 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ger.h".#include 
5db0: 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63  "pcache.h"..#inc
5dc0: 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63  lude "os.h".#inc
5dd0: 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a  lude "mutex.h"..
5de0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
5df0: 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20  base file to be 
5e00: 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20  accessed by the 
5e10: 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73  system is an ins
5e20: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20  tance.** of the 
5e30: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
5e40: 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20  ure.  There are 
5e50: 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20  normally two of 
5e60: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
5e70: 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74  .** in the sqlit
5e80: 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20  e.aDb[] array.  
5e90: 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61  aDb[0] is the ma
5ea0: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
5eb0: 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69   and.** aDb[1] i
5ec0: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
5ed0: 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  ile used to hold
5ee0: 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
5ef0: 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a  s.  Additional.*
5f00: 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20  * databases may 
5f10: 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a  be attached..*/.
5f20: 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68  struct Db {.  ch
5f30: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
5f40: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
5f50: 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
5f60: 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
5f70: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54        /* The B*T
5f80: 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  ree structure fo
5f90: 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  r this database 
5fa0: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66  file */.  u8 saf
5fb0: 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f  ety_level;     /
5fc0: 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65  * How aggressive
5fd0: 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61   at syncing data
5fe0: 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63   to disk */.  Sc
5ff0: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
6000: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
6010: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
6020: 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65   (possibly share
6030: 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  d) */.};../*.** 
6040: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
6050: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
6060: 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20  ucture stores a 
6070: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
6080: 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65  .**.** Most Sche
6090: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
60a0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
60b0: 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63   Btree.  The exc
60c0: 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65  eption is.** the
60d0: 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20   Schema for the 
60e0: 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73  TEMP databaes (s
60f0: 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77  qlite3.aDb[1]) w
6100: 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61  hich is free-sta
6110: 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61  nding..** In sha
6120: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20  red cache mode, 
6130: 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20  a single Schema 
6140: 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68  object can be sh
6150: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
6160: 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20  .** Btrees that 
6170: 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d  refer to the sam
6180: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53  e underlying BtS
6190: 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a  hared object..**
61a0: 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65   .** Schema obje
61b0: 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69  cts are automati
61c0: 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65  cally deallocate
61d0: 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20  d when the last 
61e0: 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65  Btree that.** re
61f0: 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73  ferences them is
6200: 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68   destroyed.   Th
6210: 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73  e TEMP Schema is
6220: 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20   manually freed 
6230: 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c  by.** sqlite3_cl
6240: 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68  ose()..*.** A th
6250: 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c  read must be hol
6260: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
6270: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
6280: 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72  g Btree in order
6290: 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63  .** to access Sc
62a0: 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54  hema content.  T
62b0: 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74  his implies that
62c0: 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74   the thread must
62d0: 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64   also be.** hold
62e0: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
62f0: 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65  he sqlite3 conne
6300: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68  ction pointer th
6310: 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65  at owns the Btre
6320: 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50  e..** For a TEMP
6330: 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68   Schema, only th
6340: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  e connection mut
6350: 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a  ex is required..
6360: 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61  */.struct Schema
6370: 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f   {.  int schema_
6380: 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74  cookie;   /* Dat
6390: 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72  abase schema ver
63a0: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  sion number for 
63b0: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69  this file */.  i
63c0: 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20  nt iGeneration; 
63d0: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f      /* Generatio
63e0: 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72  n counter.  Incr
63f0: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
6400: 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61  h change */.  Ha
6410: 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20  sh tblHash;     
6420: 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73     /* All tables
6430: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
6440: 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61   */.  Hash idxHa
6450: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
6460: 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65  l (named) indice
6470: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
6480: 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67  e */.  Hash trig
6490: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
64a0: 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65  ll triggers inde
64b0: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
64c0: 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20   Hash fkeyHash; 
64d0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72        /* All for
64e0: 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66  eign keys by ref
64f0: 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61  erenced table na
6500: 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  me */.  Table *p
6510: 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20  SeqTab;      /* 
6520: 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  The sqlite_seque
6530: 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62  nce table used b
6540: 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  y AUTOINCREMENT 
6550: 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72  */.  u8 file_for
6560: 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68  mat;      /* Sch
6570: 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69  ema format versi
6580: 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  on for this file
6590: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
65a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
65b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64  xt encoding used
65c0: 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73   by this databas
65d0: 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  e */.  u16 flags
65e0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
65f0: 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
6600: 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61  with this schema
6610: 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f   */.  int cache_
6620: 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75  size;      /* Nu
6630: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f  mber of pages to
6640: 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68   use in the cach
6650: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  e */.};../*.** T
6660: 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
6670: 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
6680: 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
6690: 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44  its in the .** D
66a0: 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  b.pSchema->flags
66b0: 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
66c0: 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  ne DbHasProperty
66d0: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44  (D,I,P)     (((D
66e0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
66f0: 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  a->flags&(P))==(
6700: 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61  P)).#define DbHa
6710: 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49  sAnyProperty(D,I
6720: 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b  ,P)  (((D)->aDb[
6730: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  I].pSchema->flag
6740: 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
6750: 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79  ne DbSetProperty
6760: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d  (D,I,P)     (D)-
6770: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
6780: 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
6790: 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65  ine DbClearPrope
67a0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29  rty(D,I,P)   (D)
67b0: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
67c0: 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
67d0: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
67e0: 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70  ues for the DB.p
67f0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
6800: 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44  eld..**.** The D
6810: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66  B_SchemaLoaded f
6820: 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72  lag is set after
6830: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
6840: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a  hema has been.**
6850: 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72   read into inter
6860: 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e  nal hash tables.
6870: 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65  .**.** DB_Unrese
6880: 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61  tViews means tha
6890: 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69  t one or more vi
68a0: 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20  ews have column 
68b0: 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61  names that.** ha
68c0: 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f  ve been filled o
68d0: 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ut.  If the sche
68e0: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73  ma changes, thes
68f0: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d  e column names m
6900: 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20  ight.** changes 
6910: 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20  and so the view 
6920: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20  will need to be 
6930: 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  reset..*/.#defin
6940: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
6950: 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  d    0x0001  /* 
6960: 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  The schema has b
6970: 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64  een loaded */.#d
6980: 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74  efine DB_Unreset
6990: 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20  Views    0x0002 
69a0: 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68   /* Some views h
69b0: 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75  ave defined colu
69c0: 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  mn names */.#def
69d0: 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20  ine DB_Empty    
69e0: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
69f0: 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d  * The file is em
6a00: 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79  pty (length 0 by
6a10: 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tes) */../*.** T
6a20: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66  he number of dif
6a30: 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20  ferent kinds of 
6a40: 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20  things that can 
6a50: 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73  be limited.** us
6a60: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
6a70: 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63  limit() interfac
6a80: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
6a90: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51  LITE_N_LIMIT (SQ
6aa0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47  LITE_LIMIT_TRIGG
6ab0: 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a 0a  ER_DEPTH+1)../*.
6ac0: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** Lookaside mal
6ad0: 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20  loc is a set of 
6ae0: 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65  fixed-size buffe
6af0: 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  rs that can be u
6b00: 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66  sed.** to satisf
6b10: 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e  y small transien
6b20: 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  t memory allocat
6b30: 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72  ion requests for
6b40: 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f   objects.** asso
6b50: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61  ciated with a pa
6b60: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
6b70: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
6b80: 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f  he use of.** loo
6b90: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72  kaside malloc pr
6ba0: 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69  ovides a signifi
6bb0: 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
6bc0: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20   enhancement.** 
6bd0: 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20  (approx 10%) by 
6be0: 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75  avoiding numerou
6bf0: 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65  s malloc/free re
6c00: 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72  quests while par
6c10: 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74  sing.** SQL stat
6c20: 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
6c30: 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75  e Lookaside stru
6c40: 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66  cture holds conf
6c50: 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  iguration inform
6c60: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a  ation about the.
6c70: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
6c80: 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20  loc subsystem.  
6c90: 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d  Each available m
6ca0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
6cb0: 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61   in.** the looka
6cc0: 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69  side subsystem i
6cd0: 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69  s stored on a li
6ce0: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f  nked list of Loo
6cf0: 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62  kasideSlot.** ob
6d00: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f  jects..**.** Loo
6d10: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
6d20: 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f  ns are only allo
6d30: 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  wed for objects 
6d40: 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61  that are associa
6d50: 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61  ted.** with a pa
6d60: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
6d70: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48  e connection.  H
6d80: 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66  ence, schema inf
6d90: 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a  ormation cannot.
6da0: 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ** be stored in 
6db0: 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73  lookaside becaus
6dc0: 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68  e in shared cach
6dd0: 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d  e mode the schem
6de0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  a information.**
6df0: 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75   is shared by mu
6e00: 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
6e10: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68  connections.  Th
6e20: 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70  erefore, while p
6e30: 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61  arsing.** schema
6e40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
6e50: 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61  e Lookaside.bEna
6e60: 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65  bled flag is cle
6e70: 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20  ared so that.** 
6e80: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
6e90: 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73  tions are not us
6ea0: 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ed to construct 
6eb0: 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  the schema objec
6ec0: 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f  ts..*/.struct Lo
6ed0: 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20  okaside {.  u16 
6ee0: 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sz;             
6ef0: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
6f00: 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79  ach buffer in by
6f10: 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61  tes */.  u8 bEna
6f20: 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
6f30: 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73   /* False to dis
6f40: 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69  able new lookasi
6f50: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  de allocations *
6f60: 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64  /.  u8 bMalloced
6f70: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
6f80: 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62  rue if pStart ob
6f90: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
6fa0: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  te3_malloc() */.
6fb0: 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20    int nOut;     
6fc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
6fd0: 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20 63  ber of buffers c
6fe0: 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64  urrently checked
6ff0: 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78   out */.  int mx
7000: 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Out;            
7010: 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d    /* Highwater m
7020: 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a  ark for nOut */.
7030: 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b    int anStat[3];
7040: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20            /* 0: 
7050: 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d  hits.  1: size m
7060: 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20  isses.  2: full 
7070: 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b  misses */.  Look
7080: 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65  asideSlot *pFree
7090: 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61  ;   /* List of a
70a0: 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73  vailable buffers
70b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61   */.  void *pSta
70c0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rt;           /*
70d0: 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   First byte of a
70e0: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
70f0: 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  space */.  void 
7100: 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
7110: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
7120: 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61   past end of ava
7130: 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a  ilable space */.
7140: 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  };.struct Lookas
7150: 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b  ideSlot {.  Look
7160: 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74  asideSlot *pNext
7170: 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66  ;    /* Next buf
7180: 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20  fer in the list 
7190: 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20  of free buffers 
71a0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68  */.};../*.** A h
71b0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
71c0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
71d0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65  ns..**.** Hash e
71e0: 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75  ach FuncDef stru
71f0: 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f  cture into one o
7200: 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73  f the FuncDefHas
7210: 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20  h.a[] slots..** 
7220: 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f  Collisions are o
7230: 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48  n the FuncDef.pH
7240: 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74  ash chain..*/.st
7250: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
7260: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
7270: 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  23];       /* Ha
7280: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
7290: 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ctions */.};../*
72a0: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
72b0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
72c0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
72d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
72e0: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
72f0: 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71  t sqlite3 {.  sq
7300: 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b  lite3_vfs *pVfs;
7310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
7320: 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  S Interface */. 
7330: 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56   struct Vdbe *pV
7340: 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dbe;           /
7350: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
7360: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
7370: 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  s */.  CollSeq *
7380: 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20  pDfltColl;      
7390: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61       /* The defa
73a0: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ult collating se
73b0: 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20  quence (BINARY) 
73c0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
73d0: 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20  ex *mutex;      
73e0: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
73f0: 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a   mutex */.  Db *
7400: 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  aDb;            
7410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
7420: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69   backends */.  i
7430: 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20  nt nDb;         
7440: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7450: 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e  Number of backen
7460: 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ds currently in 
7470: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  use */.  int fla
7480: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
7490: 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c         /* Miscel
74a0: 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53  laneous flags. S
74b0: 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36  ee below */.  i6
74c0: 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20  4 lastRowid;    
74d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
74e0: 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63  OWID of most rec
74f0: 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20  ent insert (see 
7500: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20  above) */.  i64 
7510: 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
7520: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
7530: 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73  ault mmap_size s
7540: 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69  etting */.  unsi
7550: 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61  gned int openFla
7560: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61  gs;       /* Fla
7570: 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  gs passed to sql
7580: 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29  ite3_vfs.xOpen()
7590: 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64   */.  int errCod
75a0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
75b0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
75c0: 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53  nt error code (S
75d0: 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e  QLITE_*) */.  in
75e0: 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20  t errMask;      
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26              /* &
7600: 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69   result codes wi
7610: 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72  th this before r
7620: 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31  eturning */.  u1
7630: 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20  6 dbOptFlags;   
7640: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
7650: 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64  lags to enable/d
7660: 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74  isable optimizat
7670: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75 74  ions */.  u8 aut
7680: 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20  oCommit;        
7690: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
76a0: 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e  uto-commit flag.
76b0: 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74   */.  u8 temp_st
76c0: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
76d0: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
76e0: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
76f0: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
7700: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
7710: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
7720: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
7730: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
7740: 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b  */.  u8 dfltLock
7750: 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Mode;           
7760: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
7770: 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61  cking-mode for a
7780: 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20  ttached dbs */. 
7790: 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78   signed char nex
77a0: 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f  tAutovac;      /
77b0: 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e  * Autovac settin
77c0: 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  g after VACUUM i
77d0: 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75  f >=0 */.  u8 su
77e0: 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20  ppressErr;      
77f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
7800: 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d  ot issue error m
7810: 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20  essages if true 
7820: 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  */.  u8 vtabOnCo
7830: 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20  nflict;         
7840: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
7850: 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61  eturn for s3_vta
7860: 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20  b_on_conflict() 
7870: 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61  */.  u8 isTransa
7880: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20  ctionSavepoint; 
7890: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
78a0: 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65  e outermost save
78b0: 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f  point is a TS */
78c0: 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73  .  int nextPages
78d0: 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ize;            
78e0: 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74   /* Pagesize aft
78f0: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20  er VACUUM if >0 
7900: 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20  */.  u32 magic; 
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7920: 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62     /* Magic numb
7930: 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69  er for detect li
7940: 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a  brary misuse */.
7950: 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20    int nChange;  
7960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7970: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
7980: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61  d by sqlite3_cha
7990: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
79a0: 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20  nTotalChange;   
79b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
79c0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
79d0: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
79e0: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
79f0: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f  aLimit[SQLITE_N_
7a00: 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d  LIMIT];   /* Lim
7a10: 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  its */.  struct 
7a20: 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20  sqlite3InitInfo 
7a30: 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  {      /* Inform
7a40: 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e  ation used durin
7a50: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
7a60: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54   */.    int newT
7a70: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
7a80: 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20      /* Rootpage 
7a90: 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  of table being i
7aa0: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
7ab0: 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20    u8 iDb;       
7ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7ad0: 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69   Which db file i
7ae0: 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  s being initiali
7af0: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75  zed */.    u8 bu
7b00: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
7b10: 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69         /* TRUE i
7b20: 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74  f currently init
7b30: 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20  ializing */.    
7b40: 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72  u8 orphanTrigger
7b50: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
7b60: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ast statement is
7b70: 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74   orphaned TEMP t
7b80: 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e  rigger */.  } in
7b90: 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41  it;.  int nVdbeA
7ba0: 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20  ctive;          
7bb0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7bc0: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
7bd0: 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e   running */.  in
7be0: 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20  t nVdbeRead;    
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7c00: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
7c10: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
7c20: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  or write */.  in
7c30: 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20  t nVdbeWrite;   
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7c50: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
7c60: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
7c70: 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69  and write */.  i
7c80: 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20  nt nVdbeExec;   
7c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7ca0: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
7cb0: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
7cc0: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ec() */.  int nE
7cd0: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
7ce0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
7cf0: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
7d00: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
7d10: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
7d20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
7d30: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
7d40: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
7d50: 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29    void (*xTrace)
7d60: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
7d70: 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  r*);        /* T
7d80: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
7d90: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
7da0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7dc0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
7dd0: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
7de0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  /.  void (*xProf
7df0: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
7e00: 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a   char*,u64);  /*
7e10: 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74   Profiling funct
7e20: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
7e30: 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20  ProfileArg;     
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e50: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
7e60: 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  o profile functi
7e70: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43  on */.  void *pC
7e80: 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20  ommitArg;       
7e90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
7ea0: 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74  ument to xCommit
7eb0: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
7ec0: 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74  .  int (*xCommit
7ed0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
7ee0: 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  ;    /* Invoked 
7ef0: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
7f00: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c   */.  void *pRol
7f10: 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20  lbackArg;       
7f20: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
7f30: 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b  ent to xRollback
7f40: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
7f50: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
7f60: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
7f70: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
7f80: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
7f90: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
7fa0: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
7fb0: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
7fc0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
7fd0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
7fe0: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
7ff0: 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  4);.#ifndef SQLI
8000: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
8010: 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b  t (*xWalCallback
8020: 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65  )(void *, sqlite
8030: 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
8040: 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
8050: 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66  *pWalArg;.#endif
8060: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
8070: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
8080: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
8090: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p,const char*);.
80a0: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
80b0: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
80c0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
80d0: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  ep,const void*);
80e0: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
80f0: 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
8100: 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20  e3_value *pErr; 
8110: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
8120: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
8130: 73 73 61 67 65 20 2a 2f 0a 20 20 63 68 61 72 20  ssage */.  char 
8140: 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
8150: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
8160: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
8170: 73 73 61 67 65 20 28 55 54 46 2d 38 20 65 6e 63  ssage (UTF-8 enc
8180: 6f 64 65 64 29 20 2a 2f 0a 20 20 63 68 61 72 20  oded) */.  char 
8190: 2a 7a 45 72 72 4d 73 67 31 36 3b 20 20 20 20 20  *zErrMsg16;     
81a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
81b0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
81c0: 73 73 61 67 65 20 28 55 54 46 2d 31 36 20 65 6e  ssage (UTF-16 en
81d0: 63 6f 64 65 64 29 20 2a 2f 0a 20 20 75 6e 69 6f  coded) */.  unio
81e0: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
81f0: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
8200: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
8210: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
8220: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
8230: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
8240: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
8250: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
8260: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
8270: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
8280: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
8290: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
82a0: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
82b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
82c0: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
82d0: 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28 76    int (*xAuth)(v
82e0: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
82f0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
8300: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
8310: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20 20  st char*);.     
8320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8330: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63             /* Ac
8340: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
8350: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
8360: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8380: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
8390: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
83a0: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
83b0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
83c0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
83d0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
83e0: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
83f0: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
8400: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
8410: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
8420: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
8430: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
8440: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
8450: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
8460: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
8470: 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f  essOps;        /
8480: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
8490: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
84a0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
84b0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
84c0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
84d0: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
84e0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
84f0: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
8500: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
8510: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
8520: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
8530: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
8540: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
8550: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
8560: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
8570: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
8580: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
8590: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
85a0: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
85b0: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
85d0: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
85e0: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
85f0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
8600: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
8610: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
8620: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
8630: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
8640: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e   */.#endif.  Fun
8650: 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20  cDefHash aFunc; 
8660: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
8670: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
8680: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
8690: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
86a0: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
86b0: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
86c0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
86d0: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
86e0: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
86f0: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
8700: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
8710: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
8720: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
8730: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
8740: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
8750: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
8760: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
8770: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
8780: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
8790: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
87a0: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
87b0: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
87c0: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
87d0: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
87e0: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
87f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
8800: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
8810: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
8820: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
8830: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
8840: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8850: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
8860: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
8870: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
8880: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
8890: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
88a0: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
88b0: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
88c0: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
88d0: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
88e0: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
88f0: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
8900: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
8910: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
8920: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
8930: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
8940: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
8950: 46 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64 65  Free() */..#ifde
8960: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
8970: 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
8980: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
8990: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61   variables are a
89a0: 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20  ll protected by 
89b0: 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45  the STATIC_MASTE
89c0: 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e  R .  ** mutex, n
89d0: 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75  ot by sqlite3.mu
89e0: 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73  tex. They are us
89f0: 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f  ed by code in no
8a00: 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20  tify.c. .  **.  
8a10: 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63  ** When X.pUnloc
8a20: 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  kConnection==Y, 
8a30: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
8a40: 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72  X is waiting for
8a50: 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63   Y to.  ** unloc
8a60: 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  k so that it can
8a70: 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20   proceed..  **. 
8a80: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63   ** When X.pBloc
8a90: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  kingConnection==
8aa0: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
8ab0: 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61  at something tha
8ac0: 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74  t X tried.  ** t
8ad0: 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e  ried to do recen
8ae0: 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20  tly failed with 
8af0: 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  an SQLITE_LOCKED
8b00: 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f   error due to lo
8b10: 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79  cks.  ** held by
8b20: 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74   Y..  */.  sqlit
8b30: 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  e3 *pBlockingCon
8b40: 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e  nection; /* Conn
8b50: 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73  ection that caus
8b60: 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  ed SQLITE_LOCKED
8b70: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
8b80: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
8b90: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
8ba0: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74  onnection to wat
8bb0: 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f  ch for unlock */
8bc0: 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b  .  void *pUnlock
8bd0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
8be0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
8bf0: 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e  ment to xUnlockN
8c00: 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20  otify */.  void 
8c10: 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29  (*xUnlockNotify)
8c20: 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20  (void **, int); 
8c30: 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66   /* Unlock notif
8c40: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
8c50: 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c  sqlite3 *pNextBl
8c60: 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a  ocked;        /*
8c70: 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66   Next in list of
8c80: 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e   all blocked con
8c90: 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64  nections */.#end
8ca0: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
8cb0: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
8cc0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
8cd0: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
8ce0: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
8cf0: 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53  ((db)->aDb[0].pS
8d00: 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  chema->enc)../*.
8d10: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
8d20: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
8d30: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65  e3.flags..*/.#de
8d40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
8d50: 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30  Trace      0x000
8d60: 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74  00001  /* True t
8d70: 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65  o trace VDBE exe
8d80: 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  cution */.#defin
8d90: 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  e SQLITE_InternC
8da0: 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30  hanges  0x000000
8db0: 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74  02  /* Uncommitt
8dc0: 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68  ed Hash table ch
8dd0: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
8de0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e   SQLITE_FullColN
8df0: 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 30  ames   0x0000000
8e00: 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20  4  /* Show full 
8e10: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20  column names on 
8e20: 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e  SELECT */.#defin
8e30: 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f  e SQLITE_ShortCo
8e40: 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30 30  lNames  0x000000
8e50: 30 38 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72  08  /* Show shor
8e60: 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20  t columns names 
8e70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8e80: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20  E_CountRows     
8e90: 20 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20   0x00000010  /* 
8ea0: 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67  Count rows chang
8eb0: 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f  ed by INSERT, */
8ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ee0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
8ef0: 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
8f00: 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a  E and return */.
8f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74            /*   t
8f40: 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61  he count using a
8f50: 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64   callback. */.#d
8f60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c  efine SQLITE_Nul
8f70: 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30  lCallback   0x00
8f80: 30 30 30 30 32 30 20 20 2f 2a 20 49 6e 76 6f 6b  000020  /* Invok
8f90: 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f  e the callback o
8fa0: 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20  nce if the */.  
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fd0: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73          /*   res
8fe0: 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
8ff0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9000: 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20  TE_SqlTrace     
9010: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
9020: 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c   Debug print SQL
9030: 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20   as it executes 
9040: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9050: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20  E_VdbeListing   
9060: 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20   0x00000080  /* 
9070: 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f  Debug listings o
9080: 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20  f VDBE programs 
9090: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
90a0: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20  E_WriteSchema   
90b0: 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20   0x00000100  /* 
90c0: 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c  OK to update SQL
90d0: 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64  ITE_MASTER */.#d
90e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
90f0: 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 30 30  eAddopTrace 0x00
9100: 30 30 30 32 30 30 20 20 2f 2a 20 54 72 61 63 65  000200  /* Trace
9110: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9120: 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65  p() calls */.#de
9130: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f  fine SQLITE_Igno
9140: 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30 30  reChecks   0x000
9150: 30 30 34 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74  00400  /* Do not
9160: 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63   enforce check c
9170: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
9180: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61  efine SQLITE_Rea
9190: 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30  dUncommitted 0x0
91a0: 30 30 30 38 30 30 20 20 2f 2a 20 46 6f 72 20 73  000800  /* For s
91b0: 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
91c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
91d0: 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74  TE_LegacyFileFmt
91e0: 20 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a    0x00001000  /*
91f0: 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74 61   Create new data
9200: 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20  bases in format 
9210: 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  1 */.#define SQL
9220: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
9230: 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f     0x00002000  /
9240: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
9250: 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20   on the backend 
9260: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9270: 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20  E_CkptFullFSync 
9280: 20 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20   0x00004000  /* 
9290: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66  Use full fsync f
92a0: 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f  or checkpoint */
92b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
92c0: 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30  RecoveryMode   0
92d0: 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 49 67  x00008000  /* Ig
92e0: 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f  nore schema erro
92f0: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
9300: 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65  LITE_ReverseOrde
9310: 72 20 20 20 30 78 30 30 30 31 30 30 30 30 20 20  r   0x00010000  
9320: 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64  /* Reverse unord
9330: 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a  ered SELECTs */.
9340: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
9350: 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78  ecTriggers    0x
9360: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61  00020000  /* Ena
9370: 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72  ble recursive tr
9380: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
9390: 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  e SQLITE_Foreign
93a0: 4b 65 79 73 20 20 20 20 30 78 30 30 30 34 30 30  Keys    0x000400
93b0: 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66  00  /* Enforce f
93c0: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
93d0: 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69  raints  */.#defi
93e0: 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  ne SQLITE_AutoIn
93f0: 64 65 78 20 20 20 20 20 20 30 78 30 30 30 38 30  dex      0x00080
9400: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61  000  /* Enable a
9410: 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73  utomatic indexes
9420: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9430: 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  TE_PreferBuiltin
9440: 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a    0x00100000  /*
9450: 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62   Preference to b
9460: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f  uilt-in funcs */
9470: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9480: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30  LoadExtension  0
9490: 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00200000  /* En
94a0: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
94b0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
94c0: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
94d0: 67 65 72 20 20 30 78 30 30 34 30 30 30 30 30 20  ger  0x00400000 
94e0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
94f0: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
9500: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
9510: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
9520: 30 38 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65  0800000  /* Defe
9530: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
9540: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
9550: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
9560: 20 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30        0x01000000
9570: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
9580: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
9590: 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66  .../*.** Bits of
95a0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f   the sqlite3.dbO
95b0: 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68  ptFlags field th
95c0: 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74  at are used by t
95d0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  he.** sqlite3_te
95e0: 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
95f0: 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
9600: 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e  IZATIONS,...) in
9610: 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65  terface to.** se
9620: 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c  lectively disabl
9630: 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  e various optimi
9640: 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  zations..*/.#def
9650: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
9660: 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31  Flattener 0x0001
9670: 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74     /* Query flat
9680: 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  tening */.#defin
9690: 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43  e SQLITE_ColumnC
96a0: 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20  ache    0x0002  
96b0: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65   /* Column cache
96c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
96d0: 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20  TE_GroupByOrder 
96e0: 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52    0x0004   /* GR
96f0: 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f  OUPBY cover of O
9700: 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e  RDERBY */.#defin
9710: 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f  e SQLITE_FactorO
9720: 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20  utConst 0x0008  
9730: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63   /* Constant fac
9740: 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  toring */.#defin
9750: 65 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c  e SQLITE_IdxReal
9760: 41 73 49 6e 74 20 20 20 30 78 30 30 31 30 20 20  AsInt   0x0010  
9770: 20 2f 2a 20 53 74 6f 72 65 20 52 45 41 4c 20 61   /* Store REAL a
9780: 73 20 49 4e 54 20 69 6e 20 69 6e 64 69 63 65 73  s INT in indices
9790: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
97a0: 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20  TE_DistinctOpt  
97b0: 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49    0x0020   /* DI
97c0: 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64  STINCT using ind
97d0: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
97e0: 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53  SQLITE_CoverIdxS
97f0: 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f  can   0x0040   /
9800: 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  * Covering index
9810: 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   scans */.#defin
9820: 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79  e SQLITE_OrderBy
9830: 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20  IdxJoin 0x0080  
9840: 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20   /* ORDER BY of 
9850: 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20  joins via index 
9860: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9870: 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20  E_SubqCoroutine 
9880: 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61   0x0100   /* Eva
9890: 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73  luate subqueries
98a0: 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a   as coroutines *
98b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
98c0: 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20  _Transitive     
98d0: 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e  0x0200   /* Tran
98e0: 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e  sitive constrain
98f0: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
9900: 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69  LITE_OmitNoopJoi
9910: 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20  n   0x0400   /* 
9920: 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c  Omit unused tabl
9930: 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23  es in joins */.#
9940: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74  define SQLITE_St
9950: 61 74 33 20 20 20 20 20 20 20 20 20 20 30 78 30  at3          0x0
9960: 38 30 30 20 20 20 2f 2a 20 55 73 65 20 74 68 65  800   /* Use the
9970: 20 53 51 4c 49 54 45 5f 53 54 41 54 33 20 74 61   SQLITE_STAT3 ta
9980: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
9990: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
99a0: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
99b0: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
99c0: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
99d0: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
99e0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
99f0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
9a00: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
9a10: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  bled..*/.#ifndef
9a20: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
9a30: 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e  LTIN_TEST.#defin
9a40: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
9a50: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
9a60: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
9a70: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
9a80: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
9a90: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
9aa0: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
9ab0: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
9ac0: 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64  k))==0).#else.#d
9ad0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
9ae0: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
9af0: 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20  ask)  0.#define 
9b00: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
9b10: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
9b20: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
9b30: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
9b40: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  for the sqlite.m
9b50: 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54  agic field..** T
9b60: 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f  he numbers are o
9b70: 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f  btained at rando
9b80: 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70  m and have no sp
9b90: 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f  ecial meaning, o
9ba0: 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69  ther.** than bei
9bb0: 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ng distinct from
9bc0: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f   one another..*/
9bd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9be0: 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30  MAGIC_OPEN     0
9bf0: 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61  xa029a697  /* Da
9c00: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a  tabase is open *
9c10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9c20: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20  _MAGIC_CLOSED   
9c30: 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44  0x9f3c2d33  /* D
9c40: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
9c50: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
9c60: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20  ITE_MAGIC_SICK  
9c70: 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f     0x4b771290  /
9c80: 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69  * Error and awai
9c90: 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64  ting close */.#d
9ca0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
9cb0: 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30  IC_BUSY     0xf0
9cc0: 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62  3b7906  /* Datab
9cd0: 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ase currently in
9ce0: 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
9cf0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
9d00: 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30  OR    0xb5357930
9d10: 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d    /* An SQLITE_M
9d20: 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75  ISUSE error occu
9d30: 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rred */.#define 
9d40: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d  SQLITE_MAGIC_ZOM
9d50: 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66  BIE   0x64cffc7f
9d60: 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20    /* Close with 
9d70: 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
9d80: 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  lose */../*.** E
9d90: 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ach SQL function
9da0: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
9db0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9dc0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
9dd0: 74 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f 69  tructure.  A poi
9de0: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
9df0: 75 63 74 75 72 65 20 69 73 20 73 74 6f 72 65 64  ucture is stored
9e00: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
9e10: 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61 62  Func.** hash tab
9e20: 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69 70  le.  When multip
9e30: 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  le functions hav
9e40: 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c  e the same name,
9e50: 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a   the hash table.
9e60: 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c  ** points to a l
9e70: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74 68  inked list of th
9e80: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 2e 0a  ese structures..
9e90: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
9ea0: 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b 20  f {.  i16 nArg; 
9eb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
9ec0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
9ed0: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
9ee0: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 38 20 69  imited */.  u8 i
9ef0: 50 72 65 66 45 6e 63 3b 20 20 20 20 20 20 20 20  PrefEnc;        
9f00: 20 2f 2a 20 50 72 65 66 65 72 72 65 64 20 74 65   /* Preferred te
9f10: 78 74 20 65 6e 63 6f 64 69 6e 67 20 28 53 51 4c  xt encoding (SQL
9f20: 49 54 45 5f 55 54 46 38 2c 20 31 36 4c 45 2c 20  ITE_UTF8, 16LE, 
9f30: 31 36 42 45 29 20 2a 2f 0a 20 20 75 38 20 66 6c  16BE) */.  u8 fl
9f40: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
9f50: 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74  /* Some combinat
9f60: 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55  ion of SQLITE_FU
9f70: 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  NC_* */.  void *
9f80: 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f  pUserData;     /
9f90: 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61  * User data para
9fa0: 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44  meter */.  FuncD
9fb0: 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ef *pNext;      
9fc0: 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e  /* Next function
9fd0: 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20   with same name 
9fe0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  */.  void (*xFun
9ff0: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
a000: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
a010: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67  value**); /* Reg
a020: 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ular function */
a030: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
a040: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
a050: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
a060: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65  lue**); /* Aggre
a070: 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76  gate step */.  v
a080: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29  oid (*xFinalize)
a090: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
a0a0: 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *);             
a0b0: 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20     /* Aggregate 
a0c0: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63  finalizer */.  c
a0d0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
a0e0: 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20      /* SQL name 
a0f0: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
a100: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
a110: 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Hash;      /* Ne
a120: 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72  xt with a differ
a130: 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65  ent name but the
a140: 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20   same hash */.  
a150: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
a160: 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f  pDestructor;   /
a170: 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  * Reference coun
a180: 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66  ted destructor f
a190: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  unction */.};../
a1a0: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
a1b0: 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73  ure encapsulates
a1c0: 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e   a user-function
a1d0: 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c   destructor call
a1e0: 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66  back (as.** conf
a1f0: 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65  igured using cre
a200: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
a210: 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e  )) and a referen
a220: 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e  ce counter. When
a230: 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74  .** create_funct
a240: 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c  ion_v2() is call
a250: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ed to create a f
a260: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64  unction with a d
a270: 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20  estructor,.** a 
a280: 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66  single object of
a290: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
a2a0: 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73  located. FuncDes
a2b0: 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20  tructor.nRef is 
a2c0: 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e  set to .** the n
a2d0: 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66  umber of FuncDef
a2e0: 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64   objects created
a2f0: 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c   (either 1 or 3,
a300: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
a310: 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20  ether.** or not 
a320: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e  the specified en
a330: 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45  coding is SQLITE
a340: 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44  _ANY). The FuncD
a350: 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a  ef.pDestructor.*
a360: 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68  * member of each
a370: 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63   of the new Func
a380: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73  Def objects is s
a390: 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  et to point to t
a3a0: 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  he allocated.** 
a3b0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a  FuncDestructor..
a3c0: 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72  **.** Thereafter
a3d0: 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68  , when one of th
a3e0: 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  e FuncDef object
a3f0: 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68  s is deleted, th
a400: 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63  e reference.** c
a410: 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a  ount on this obj
a420: 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74  ect is decrement
a430: 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63  ed. When it reac
a440: 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72  hes 0, the destr
a450: 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f  uctor.** is invo
a460: 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63  ked and the Func
a470: 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63  Destructor struc
a480: 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73  ture freed..*/.s
a490: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
a4a0: 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65  ctor {.  int nRe
a4b0: 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  f;.  void (*xDes
a4c0: 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20  troy)(void *);. 
a4d0: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
a4e0: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  ;.};../*.** Poss
a4f0: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
a500: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20  FuncDef.flags.  
a510: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c  Note that the _L
a520: 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f  ENGTH and _TYPEO
a530: 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74  F.** values must
a540: 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f   correspond to O
a550: 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
a560: 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
a570: 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20  FARG.  There.** 
a580: 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61  are assert() sta
a590: 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63  tements in the c
a5a0: 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68  ode to verify th
a5b0: 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  is..*/.#define S
a5c0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
a5d0: 20 20 20 20 30 78 30 31 20 2f 2a 20 43 61 6e 64      0x01 /* Cand
a5e0: 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49  idate for the LI
a5f0: 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  KE optimization 
a600: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a610: 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20  E_FUNC_CASE     
a620: 30 78 30 32 20 2f 2a 20 43 61 73 65 2d 73 65 6e  0x02 /* Case-sen
a630: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
a640: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
a650: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
a660: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 34 20 2f  _EPHEM    0x04 /
a670: 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65  * Ephemeral.  De
a680: 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a  lete with VDBE *
a690: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a6a0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30  _FUNC_NEEDCOLL 0
a6b0: 78 30 38 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  x08 /* sqlite3Ge
a6c0: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
a6d0: 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a  ight be called *
a6e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a6f0: 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30  _FUNC_COUNT    0
a700: 78 31 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  x10 /* Built-in 
a710: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
a720: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
a730: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
a740: 43 45 20 30 78 32 30 20 2f 2a 20 42 75 69 6c 74  CE 0x20 /* Built
a750: 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f  -in coalesce() o
a760: 72 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74  r ifnull() funct
a770: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
a780: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54  QLITE_FUNC_LENGT
a790: 48 20 20 20 30 78 34 30 20 2f 2a 20 42 75 69 6c  H   0x40 /* Buil
a7a0: 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75  t-in length() fu
a7b0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
a7c0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  e SQLITE_FUNC_TY
a7d0: 50 45 4f 46 20 20 20 30 78 38 30 20 2f 2a 20 42  PEOF   0x80 /* B
a7e0: 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29  uilt-in typeof()
a7f0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a   function */../*
a800: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
a810: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
a820: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
a830: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
a840: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
a850: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
a860: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
a870: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
a880: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
a890: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
a8a0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
a8b0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
a8c0: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
a8d0: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
a8e0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
a8f0: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
a900: 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65   .**     impleme
a910: 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
a920: 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
a930: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
a940: 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
a950: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
a960: 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
a970: 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
a980: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
a990: 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
a9a0: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
a9b0: 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
a9c0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
a9d0: 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e   .**     argumen
a9e0: 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74  t bNC is true, t
a9f0: 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46  hen the SQLITE_F
aa00: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61  UNC_NEEDCOLL fla
aa10: 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  g is set..**.** 
aa20: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
aa30: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
aa40: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
aa50: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
aa60: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
aa70: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
aa80: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
aa90: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
aaa0: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
aab0: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
aac0: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
aad0: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
aae0: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
aaf0: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
ab00: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
ab10: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
ab20: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
ab30: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
ab40: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
ab50: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
ab60: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
ab70: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
ab80: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
ab90: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
aba0: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61  Name .**     tha
abb0: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
abc0: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
abd0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
abe0: 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20   call to C .**  
abf0: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
ac00: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
ac10: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
ac20: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
ac30: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
ac40: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
ac50: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
ac60: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
ac70: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
ac80: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
ac90: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
aca0: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
acb0: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
acc0: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
acd0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
ace0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
acf0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
ad00: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
ad10: 51 4c 49 54 45 5f 55 54 46 38 2c 20 28 62 4e 43  QLITE_UTF8, (bNC
ad20: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
ad30: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
ad40: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
ad50: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
ad60: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
ad70: 20 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43   0}.#define FUNC
ad80: 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  TION2(zName, nAr
ad90: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
ada0: 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29  unc, extraFlags)
adb0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
adc0: 54 45 5f 55 54 46 38 2c 20 28 62 4e 43 2a 53 51  TE_UTF8, (bNC*SQ
add0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
ade0: 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20  LL)|extraFlags, 
adf0: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
ae00: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
ae10: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
ae20: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
ae30: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
ae40: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
ae50: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
ae60: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
ae70: 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53 51 4c 49  E_UTF8, bNC*SQLI
ae80: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
ae90: 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20  , \.   pArg, 0, 
aea0: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
aeb0: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
aec0: 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
aed0: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
aee0: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
aef0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 66 6c 61  SQLITE_UTF8, fla
af00: 67 73 2c 20 28 76 6f 69 64 20 2a 29 61 72 67 2c  gs, (void *)arg,
af10: 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c   0, likeFunc, 0,
af20: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
af30: 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
af40: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
af50: 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
af60: 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41   xFinal) \.  {nA
af70: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
af80: 20 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f   nc*SQLITE_FUNC_
af90: 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20 20 20 53  NEEDCOLL, \.   S
afa0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
afb0: 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74  (arg), 0, 0, xSt
afc0: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
afd0: 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ,0,0}../*.** All
afe0: 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69   current savepoi
aff0: 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
b000: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
b010: 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73  starting at.** s
b020: 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
b030: 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  t. The first ele
b040: 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74  ment in the list
b050: 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63   is the most rec
b060: 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20  ently.** opened 
b070: 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70  savepoint. Savep
b080: 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20  oints are added 
b090: 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74  to the list by t
b0a0: 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61  he vdbe.** OP_Sa
b0b0: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
b0c0: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
b0d0: 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61  avepoint {.  cha
b0e0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b100: 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61   /* Savepoint na
b110: 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  me (nul-terminat
b120: 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ed) */.  i64 nDe
b130: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
b140: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b150: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
b160: 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73  ed fk violations
b170: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
b180: 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
b190: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
b1a0: 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
b1b0: 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76  imm fk. */.  Sav
b1c0: 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20  epoint *pNext;  
b1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1e0: 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70   /* Parent savep
b1f0: 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f  oint (if any) */
b200: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
b210: 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65  ollowing are use
b220: 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20  d as the second 
b230: 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
b240: 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c  ite3Savepoint(),
b250: 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50  .** and as the P
b260: 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
b270: 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  e OP_Savepoint i
b280: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  nstruction..*/.#
b290: 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
b2a0: 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64  _BEGIN      0.#d
b2b0: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
b2c0: 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65  RELEASE    1.#de
b2d0: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
b2e0: 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a  OLLBACK   2.../*
b2f0: 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20  .** Each SQLite 
b300: 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20  module (virtual 
b310: 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
b320: 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  ) is defined by 
b330: 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
b340: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
b350: 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65  structure, store
b360: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
b370: 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68  .aModule.** hash
b380: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63   table..*/.struc
b390: 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e  t Module {.  con
b3a0: 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
b3b0: 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20  e *pModule;     
b3c0: 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f    /* Callback po
b3d0: 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73  inters */.  cons
b3e0: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b400: 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20   /* Name passed 
b410: 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
b420: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  () */.  void *pA
b430: 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ux;             
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b450: 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63  pAux passed to c
b460: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
b470: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  /.  void (*xDest
b480: 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  roy)(void *);   
b490: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75           /* Modu
b4a0: 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  le destructor fu
b4b0: 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  nction */.};../*
b4c0: 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
b4d0: 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
b4e0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c  n of an SQL tabl
b4f0: 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20  e is held in an 
b500: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
b510: 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
b520: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20  /.struct Column 
b530: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
b540: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
b550: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
b560: 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20   Expr *pDflt;   
b570: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c    /* Default val
b580: 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
b590: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66  n */.  char *zDf
b5a0: 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69  lt;     /* Origi
b5b0: 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
b5c0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f  default value */
b5d0: 0a 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  .  char *zType; 
b5e0: 20 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65      /* Data type
b5f0: 20 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e   for this column
b600: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
b610: 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  l;     /* Collat
b620: 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49  ing sequence.  I
b630: 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20  f NULL, use the 
b640: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
b650: 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a  notNull;      /*
b660: 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72   An OE_ code for
b670: 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20   handling a NOT 
b680: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
b690: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
b6a0: 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20  ty;   /* One of 
b6b0: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e  the SQLITE_AFF_.
b6c0: 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  .. values */.  u
b6d0: 31 36 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20  16 colFlags;    
b6e0: 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65  /* Boolean prope
b6f0: 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46  rties.  See COLF
b700: 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c  LAG_ defines bel
b710: 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  ow */.};../* All
b720: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
b730: 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a  Column.colFlags:
b740: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46  .*/.#define COLF
b750: 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30  LAG_PRIMKEY  0x0
b760: 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  001    /* Column
b770: 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   is part of the 
b780: 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
b790: 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48  define COLFLAG_H
b7a0: 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20  IDDEN   0x0002  
b7b0: 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f    /* A hidden co
b7c0: 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61  lumn in a virtua
b7d0: 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a  l table */../*.*
b7e0: 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53  * A "Collating S
b7f0: 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69  equence" is defi
b800: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
b810: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
b820: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
b830: 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20  . Conceptually, 
b840: 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a collating sequ
b850: 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ence consists of
b860: 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61   a name and.** a
b870: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74   comparison rout
b880: 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ine that defines
b890: 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   the order of th
b8a0: 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a  at sequence..**.
b8b0: 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43  ** If CollSeq.xC
b8c0: 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d  mp is NULL, it m
b8d0: 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  eans that the.**
b8e0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
b8f0: 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64  nce is undefined
b900: 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74  .  Indices built
b910: 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   on an undefined
b920: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
b930: 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62  quence may not b
b940: 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65  e read or writte
b950: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  n..*/.struct Col
b960: 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lSeq {.  char *z
b970: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Name;          /
b980: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
b990: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
b9a0: 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  , UTF-8 encoded 
b9b0: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
b9c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
b9d0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64  xt encoding hand
b9e0: 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f  led by xCmp() */
b9f0: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20  .  void *pUser; 
ba00: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
ba10: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  t argument to xC
ba20: 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  mp() */.  int (*
ba30: 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xCmp)(void*,int,
ba40: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
ba50: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  t, const void*);
ba60: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
ba70: 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74  void*);  /* Dest
ba80: 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72  ructor for pUser
ba90: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
baa0: 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62  sort order can b
bab0: 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20  e either ASC or 
bac0: 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  DESC..*/.#define
bad0: 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20   SQLITE_SO_ASC  
bae0: 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20       0  /* Sort 
baf0: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
bb00: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
bb10: 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20  LITE_SO_DESC    
bb20: 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    1  /* Sort in 
bb30: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
bb40: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e  */../*.** Column
bb50: 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e   affinity types.
bb60: 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65  .**.** These use
bb70: 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e  d to have mnemon
bb80: 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27  ic name like 'i'
bb90: 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
bba0: 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27  INTEGER and.** '
bbb0: 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  t' for SQLITE_AF
bbc0: 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20  F_TEXT.  But we 
bbd0: 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c  can save a littl
bbe0: 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72  e space and impr
bbf0: 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64  ove.** the speed
bc00: 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d   a little by num
bc10: 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65  bering the value
bc20: 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e  s consecutively.
bc30: 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74    .**.** But rat
bc40: 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77  her than start w
bc50: 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62  ith 0 or 1, we b
bc60: 65 67 69 6e 20 77 69 74 68 20 27 61 27 2e 20 20  egin with 'a'.  
bc70: 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65  That way,.** whe
bc80: 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e  n multiple affin
bc90: 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f  ity types are co
bca0: 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20  ncatenated into 
bcb0: 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20  a string and.** 
bcc0: 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f  used as the P4 o
bcd0: 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c  perand, they wil
bce0: 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62  l be more readab
bcf0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61  le..**.** Note a
bd00: 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d  lso that the num
bd10: 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67  eric types are g
bd20: 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20  rouped together 
bd30: 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a  so that testing.
bd40: 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63  ** for a numeric
bd50: 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c   type is a singl
bd60: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f  e comparison..*/
bd70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bd80: 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 61 27  AFF_TEXT     'a'
bd90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bda0: 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27  AFF_NONE     'b'
bdb0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bdc0: 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 63 27  AFF_NUMERIC  'c'
bdd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bde0: 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 64 27  AFF_INTEGER  'd'
bdf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
be00: 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 65 27  AFF_REAL     'e'
be10: 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
be20: 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
be30: 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
be40: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
be50: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
be60: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
be70: 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
be80: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
be90: 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
bea0: 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23  ity value. .*/.#
beb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
bec0: 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 36 37 0a  F_MASK     0x67.
bed0: 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61  ./*.** Additiona
bee0: 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61  l bit values tha
bef0: 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69  t can be ORed wi
bf00: 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77  th an affinity w
bf10: 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69  ithout.** changi
bf20: 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e  ng the affinity.
bf30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
bf40: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20  TE_JUMPIFNULL   
bf50: 30 78 30 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69  0x08  /* jumps i
bf60: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
bf70: 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   is NULL */.#def
bf80: 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  ine SQLITE_STORE
bf90: 50 32 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a  P2      0x10  /*
bfa0: 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
bfb0: 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20   reg[P2] rather 
bfc0: 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65  than jump */.#de
bfd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  fine SQLITE_NULL
bfe0: 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f  EQ       0x80  /
bff0: 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a  * NULL=NULL */..
c000: 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20  /*.** An object 
c010: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
c020: 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
c030: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70   virtual table p
c040: 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65  resent in.** the
c050: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
c060: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  . .**.** If the 
c070: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
c080: 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20  is shared, then 
c090: 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73  there is one ins
c0a0: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a  tance of this.**
c0b0: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65   structure for e
c0c0: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
c0d0: 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33  nection (sqlite3
c0e0: 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65  *) that uses the
c0f0: 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d   shared.** schem
c100: 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75  a. This is becau
c110: 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65  se each database
c120: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75   connection requ
c130: 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69  ires its own uni
c140: 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20  que.** instance 
c150: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  of the sqlite3_v
c160: 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64  tab* handle used
c170: 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
c180: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a  irtual table .**
c190: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
c1a0: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
c1b0: 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62  andles can not b
c1c0: 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e  e shared between
c1d0: 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f   .** database co
c1e0: 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20  nnections, even 
c1f0: 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66  when the rest of
c200: 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
c210: 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65  atabase .** sche
c220: 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73  ma is shared, as
c230: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
c240: 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73  ion often stores
c250: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
c260: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
c270: 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20  le passed to it 
c280: 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74  via the xConnect
c290: 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20  () or xCreate() 
c2a0: 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67  method.** during
c2b0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
c2c0: 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73  internally. This
c2d0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
c2e0: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a  tion handle may.
c2f0: 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20  ** then be used 
c300: 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  by the virtual t
c310: 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
c320: 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65  ion to access re
c330: 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69  al tables .** wi
c340: 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
c350: 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20  e. So that they 
c360: 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f  appear as part o
c370: 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a  f the callers .*
c380: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
c390: 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
c3a0: 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
c3b0: 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
c3c0: 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  ase .** connecti
c3d0: 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20  on as that used 
c3e0: 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f  to execute SQL o
c3f0: 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  perations on the
c400: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
c410: 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65  **.** All VTable
c420: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f   objects that co
c430: 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69  rrespond to a si
c440: 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20  ngle table in a 
c450: 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61  shared.** databa
c460: 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e  se schema are in
c470: 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69  itially stored i
c480: 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20  n a linked-list 
c490: 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a  pointed to by.**
c4a0: 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
c4b0: 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  le member variab
c4c0: 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  le of the corres
c4d0: 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62  ponding Table ob
c4e0: 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e  ject..** When an
c4f0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
c500: 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  () operation is 
c510: 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65  required to acce
c520: 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ss the virtual.*
c530: 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72  * table, it sear
c540: 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f  ches the list fo
c550: 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61  r the VTable tha
c560: 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
c570: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
c580: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e   connection doin
c590: 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20  g the preparing 
c5a0: 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65  so as to use the
c5b0: 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69   correct.** sqli
c5c0: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
c5d0: 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
c5e0: 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68   query..**.** Wh
c5f0: 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  en an in-memory 
c600: 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  Table object is 
c610: 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61  deleted (for exa
c620: 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a  mple when the.**
c630: 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67   schema is being
c640: 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f   reloaded for so
c650: 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20  me reason), the 
c660: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61  VTable objects a
c670: 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74  re not .** delet
c680: 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
c690: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
c6a0: 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e   are not xDiscon
c6b0: 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d  nect()ed .** imm
c6c0: 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61  ediately. Instea
c6d0: 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65  d, they are move
c6e0: 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65  d from the Table
c6f0: 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f  .pVTable list to
c700: 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b  .** another link
c710: 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62  ed list headed b
c720: 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44  y the sqlite3.pD
c730: 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72  isconnect member
c740: 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   of the.** corre
c750: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
c760: 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79   structure. They
c770: 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65   are then delete
c780: 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20  d/xDisconnected 
c790: 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
c7a0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
c7b0: 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
c7c0: 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
c7d0: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
c7e0: 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
c7f0: 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
c800: 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
c810: 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
c820: 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
c830: 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
c840: 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
c850: 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
c860: 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
c870: 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
c880: 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
c890: 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
c8a0: 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
c8b0: 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
c8c0: 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
c8d0: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
c8e0: 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
c8f0: 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
c900: 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
c910: 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
c920: 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a  s allocated by .
c930: 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  ** sqlite3DbMall
c940: 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20  oc(), using the 
c950: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
c960: 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62  e stored in VTab
c970: 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65  le.db as .** the
c980: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
c990: 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
c9a0: 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
c9b0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
c9c0: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
c9d0: 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
c9e0: 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
c9f0: 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
ca00: 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
ca10: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
ca20: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
ca30: 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
ca40: 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
ca50: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
ca60: 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
ca70: 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ca90: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
caa0: 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
cab0: 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
cac0: 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
cad0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
cae0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
caf0: 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
cb00: 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
cb10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
cb20: 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
cb30: 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
cb40: 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
cb50: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
cb60: 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
cb70: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
cb80: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  ;../*.** Each SQ
cb90: 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  L table is repre
cba0: 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
cbb0: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
cbc0: 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  of the.** follow
cbd0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
cbe0: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65  *.** Table.zName
cbf0: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
cc00: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  the table.  The 
cc10: 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67  case of the orig
cc20: 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54  inal.** CREATE T
cc30: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69  ABLE statement i
cc40: 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61  s stored, but ca
cc50: 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66  se is not signif
cc60: 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d  icant for.** com
cc70: 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  parisons..**.** 
cc80: 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68  Table.nCol is th
cc90: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
cca0: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
ccb0: 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69  e.  Table.aCol i
ccc0: 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
ccd0: 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f  o an array of Co
cce0: 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c  lumn structures,
ccf0: 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f   one for each co
cd00: 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  lumn..**.** If t
cd10: 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20  he table has an 
cd20: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
cd30: 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e  KEY, then Table.
cd40: 69 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64  iPKey is the ind
cd50: 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c  ex of.** the col
cd60: 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61 74  umn that is that
cd70: 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73   key.   Otherwis
cd80: 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73  e Table.iPKey is
cd90: 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65   negative.  Note
cda0: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
cdb0: 61 74 79 70 65 20 6f 66 20 74 68 65 20 50 52 49  atype of the PRI
cdc0: 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65  MARY KEY must be
cdd0: 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69   INTEGER for thi
cde0: 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65  s field to.** be
cdf0: 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45   set.  An INTEGE
ce00: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73  R PRIMARY KEY is
ce10: 20 75 73 65 64 20 61 73 20 74 68 65 20 72 6f 77   used as the row
ce20: 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  id for each row 
ce30: 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e  of.** the table.
ce40: 20 20 49 66 20 61 20 74 61 62 6c 65 20 68 61 73    If a table has
ce50: 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d   no INTEGER PRIM
ce60: 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20  ARY KEY, then a 
ce70: 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20  random rowid.** 
ce80: 69 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72  is generated for
ce90: 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
cea0: 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50   table.  TF_HasP
ceb0: 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74  rimaryKey is set
cec0: 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   if.** the table
ced0: 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59   has any PRIMARY
cee0: 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72   KEY, INTEGER or
cef0: 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a   otherwise..**.*
cf00: 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20  * Table.tnum is 
cf10: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
cf20: 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72  for the root BTr
cf30: 65 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 74  ee page of the t
cf40: 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64  able in the.** d
cf50: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49  atabase file.  I
cf60: 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74  f Table.iDb is t
cf70: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
cf80: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 62  database table b
cf90: 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c  ackend.** in sql
cfa0: 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73  ite.aDb[].  0 is
cfb0: 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
cfc0: 74 61 62 61 73 65 20 61 6e 64 20 31 20 69 73 20  tabase and 1 is 
cfd0: 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68 61  for the file tha
cfe0: 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f  t.** holds tempo
cff0: 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  rary tables and 
d000: 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f  indices.  If TF_
d010: 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74  Ephemeral is set
d020: 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62  .** then the tab
d030: 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  le is stored in 
d040: 61 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 61  a file that is a
d050: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
d060: 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65  eted.** when the
d070: 20 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20   VDBE cursor to 
d080: 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f  the table is clo
d090: 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61  sed.  In this ca
d0a0: 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a  se Table.tnum .*
d0b0: 2a 20 72 65 66 65 72 73 20 56 44 42 45 20 63 75  * refers VDBE cu
d0c0: 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74  rsor number that
d0d0: 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65   holds the table
d0e0: 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68   open, not to th
d0f0: 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e  e root.** page n
d100: 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e  umber.  Transien
d110: 74 20 74 61 62 6c 65 73 20 61 72 65 20 75 73 65  t tables are use
d120: 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65  d to hold the re
d130: 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75  sults of a.** su
d140: 62 2d 71 75 65 72 79 20 74 68 61 74 20 61 70 70  b-query that app
d150: 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20  ears instead of 
d160: 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d  a real table nam
d170: 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
d180: 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45  ause .** of a SE
d190: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
d1a0: 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20  */.struct Table 
d1b0: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
d1c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
d1d0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
d1e0: 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d   view */.  Colum
d1f0: 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
d200: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
d210: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
d220: 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
d230: 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
d240: 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
d250: 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
d260: 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
d270: 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55  elect;     /* NU
d280: 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20  LL for tables.  
d290: 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69  Points to defini
d2a0: 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20  tion if a view. 
d2b0: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
d2c0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
d2d0: 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
d2e0: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
d2f0: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
d300: 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
d310: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
d320: 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
d330: 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
d340: 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  umn */.#ifndef S
d350: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b  QLITE_OMIT_CHECK
d360: 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
d370: 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
d380: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
d390: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 74 52 6f   */.#endif.  tRo
d3a0: 77 63 6e 74 20 6e 52 6f 77 45 73 74 3b 20 20 20  wcnt nRowEst;   
d3b0: 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72    /* Estimated r
d3c0: 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66  ows in table - f
d3d0: 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
d3e0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
d3f0: 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
d400: 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e   /* Root BTree n
d410: 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  ode for this tab
d420: 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f  le (see note abo
d430: 76 65 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b  ve) */.  i16 iPK
d440: 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ey;           /*
d450: 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65   If not negative
d460: 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79  , use aCol[iPKey
d470: 5d 20 61 73 20 74 68 65 20 70 72 69 6d 61 72 79  ] as the primary
d480: 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43   key */.  i16 nC
d490: 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
d4a0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
d4b0: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
d4c0: 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b  e */.  u16 nRef;
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d4e0: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
d4f0: 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20  s to this Table 
d500: 2a 2f 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73  */.  u8 tabFlags
d510: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
d520: 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73  k of TF_* values
d530: 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66   */.  u8 keyConf
d540: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
d550: 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65  at to do in case
d560: 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63   of uniqueness c
d570: 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79  onflict on iPKey
d580: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
d590: 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
d5a0: 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f  LE.  int addColO
d5b0: 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66  ffset;    /* Off
d5c0: 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41  set in CREATE TA
d5d0: 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20  BLE stmt to add 
d5e0: 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  a new column */.
d5f0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
d600: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
d610: 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d  ALTABLE.  int nM
d620: 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f  oduleArg;      /
d630: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
d640: 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64  ments to the mod
d650: 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ule */.  char **
d660: 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a  azModuleArg;  /*
d670: 20 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64   Text of all mod
d680: 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73  ule args. [0] is
d690: 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a   module name */.
d6a0: 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c    VTable *pVTabl
d6b0: 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  e;     /* List o
d6c0: 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  f VTable objects
d6d0: 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72  . */.#endif.  Tr
d6e0: 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
d6f0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72     /* List of tr
d700: 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e  iggers stored in
d710: 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63   pSchema */.  Sc
d720: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
d730: 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61     /* Schema tha
d740: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20  t contains this 
d750: 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65  table */.  Table
d760: 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20   *pNextZombie;  
d770: 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50  /* Next on the P
d780: 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20  arse.pZombieTab 
d790: 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
d7a0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
d7b0: 20 66 6f 72 20 54 61 62 65 2e 74 61 62 46 6c 61   for Tabe.tabFla
d7c0: 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  gs..*/.#define T
d7d0: 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20  F_Readonly      
d7e0: 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61    0x01    /* Rea
d7f0: 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61  d-only system ta
d800: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
d810: 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20  F_Ephemeral     
d820: 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20    0x02    /* An 
d830: 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
d840: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
d850: 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
d860: 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68  04    /* Table h
d870: 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  as a primary key
d880: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41   */.#define TF_A
d890: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30  utoincrement   0
d8a0: 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  x08    /* Intege
d8b0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
d8c0: 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
d8d0: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72  /.#define TF_Vir
d8e0: 74 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31  tual         0x1
d8f0: 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72  0    /* Is a vir
d900: 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 0a  tual table */...
d910: 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65  /*.** Test to se
d920: 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
d930: 20 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69   a table is a vi
d940: 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
d950: 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73  is is.** done as
d960: 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74   a macro so that
d970: 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69   it will be opti
d980: 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76  mized out when v
d990: 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  irtual.** table 
d9a0: 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74  support is omitt
d9b0: 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c  ed from the buil
d9c0: 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
d9d0: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
d9e0: 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
d9f0: 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
da00: 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61     (((X)->tabFla
da10: 67 73 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29  gs & TF_Virtual)
da20: 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
da30: 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
da40: 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
da50: 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
da60: 4e 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20  N)!=0).#else.#  
da70: 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
da80: 28 58 29 20 20 20 20 20 20 30 0a 23 20 20 64 65  (X)      0.#  de
da90: 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
daa0: 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  umn(X) 0.#endif.
dab0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65  ./*.** Each fore
dac0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
dad0: 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  nt is an instanc
dae0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
daf0: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
db00: 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65  .** A foreign ke
db10: 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20  y is associated 
db20: 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e  with two tables.
db30: 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62    The "from" tab
db40: 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62  le is.** the tab
db50: 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
db60: 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
db70: 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61  clause that crea
db80: 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  tes the foreign.
db90: 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f  ** key.  The "to
dba0: 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74  " table is the t
dbb0: 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d  able that is nam
dbc0: 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45  ed in the REFERE
dbd0: 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20  NCES clause..** 
dbe0: 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78  Consider this ex
dbf0: 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ample:.**.**    
dc00: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78   CREATE TABLE ex
dc10: 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e  1(.**       a IN
dc20: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
dc30: 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e  Y,.**       b IN
dc40: 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54  TEGER CONSTRAINT
dc50: 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20   fk1 REFERENCES 
dc60: 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b  ex2(x).**     );
dc70: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69  .**.** For forei
dc80: 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68  gn key "fk1", th
dc90: 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
dca0: 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f  "ex1" and the to
dcb0: 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e  -table is "ex2".
dcc0: 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
dcd0: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
dce0: 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
dcf0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
dd00: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
dd10: 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
dd20: 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
dd30: 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
dd40: 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
dd50: 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
dd60: 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
dd70: 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
dd80: 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
dd90: 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
dda0: 63 6b 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  cked..*/.struct 
ddb0: 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a  FKey {.  Table *
ddc0: 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61  pFrom;     /* Ta
ddd0: 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ble containing t
dde0: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
ddf0: 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64  ause (aka: Child
de00: 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
de10: 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74  xtFrom;  /* Next
de20: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e 20   foreign key in 
de30: 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20  pFrom */.  char 
de40: 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  *zTo;        /* 
de50: 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68  Name of table th
de60: 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74  at the key point
de70: 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e  s to (aka: Paren
de80: 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  t) */.  FKey *pN
de90: 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78  extTo;    /* Nex
dea0: 74 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e  t foreign key on
deb0: 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f   table named zTo
dec0: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65   */.  FKey *pPre
ded0: 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69  vTo;    /* Previ
dee0: 6f 75 73 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ous foreign key 
def0: 6f 6e 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a  on table named z
df00: 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  To */.  int nCol
df10: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
df20: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
df30: 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20  n this key */.  
df40: 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32  /* EV: R-30323-2
df50: 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44  1917 */.  u8 isD
df60: 65 66 65 72 72 65 64 3b 20 20 20 20 2f 2a 20 54  eferred;    /* T
df70: 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
df80: 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
df90: 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
dfa0: 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
dfb0: 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20  on[2];          
dfc0: 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64  /* ON DELETE and
dfd0: 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f   ON UPDATE actio
dfe0: 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ns, respectively
dff0: 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61   */.  Trigger *a
e000: 70 54 72 69 67 67 65 72 5b 32 5d 3b 20 20 2f 2a  pTrigger[2];  /*
e010: 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
e020: 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
e030: 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
e040: 4d 61 70 20 7b 20 20 2f 2a 20 4d 61 70 70 69 6e  Map {  /* Mappin
e050: 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
e060: 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
e070: 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
e080: 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
e090: 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f    /* Index of co
e0a0: 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f  lumn in pFrom */
e0b0: 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b  .    char *zCol;
e0c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
e0d0: 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f  of column in zTo
e0e0: 2e 20 20 49 66 20 30 20 75 73 65 20 50 52 49 4d  .  If 0 use PRIM
e0f0: 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61  ARY KEY */.  } a
e100: 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 2f  Col[1];        /
e110: 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
e120: 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c  each of nCol col
e130: 75 6d 6e 20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  umn s */.};../*.
e140: 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
e150: 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
e160: 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
e170: 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
e180: 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
e190: 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
e1a0: 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
e1b0: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
e1c0: 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
e1d0: 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
e1e0: 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
e1f0: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
e200: 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
e210: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
e220: 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
e230: 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
e240: 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
e250: 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
e260: 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
e270: 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
e280: 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
e290: 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
e2a0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
e2b0: 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
e2c0: 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
e2d0: 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
e2e0: 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
e2f0: 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
e300: 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
e310: 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
e320: 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
e330: 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
e340: 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
e350: 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
e360: 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
e370: 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
e380: 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
e390: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
e3a0: 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
e3b0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
e3c0: 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
e3d0: 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
e3e0: 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
e3f0: 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
e400: 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
e410: 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
e420: 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
e430: 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
e440: 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
e450: 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
e460: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
e470: 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
e480: 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
e490: 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
e4a0: 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
e4b0: 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
e4c0: 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
e4d0: 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
e4e0: 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
e4f0: 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
e500: 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
e510: 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
e520: 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
e530: 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
e540: 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
e550: 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
e560: 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
e570: 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
e580: 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
e590: 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
e5a0: 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
e5b0: 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
e5c0: 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
e5d0: 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
e5e0: 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
e5f0: 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
e600: 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
e610: 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
e620: 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
e630: 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
e640: 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54  gn key..** .** T
e650: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d  he following sym
e660: 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65  bolic values are
e670: 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20   used to record 
e680: 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66  which type.** of
e690: 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e   action to take.
e6a0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e  .*/.#define OE_N
e6b0: 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54  one     0   /* T
e6c0: 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74  here is no const
e6d0: 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a  raint to check *
e6e0: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c  /.#define OE_Rol
e6f0: 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69  lback 1   /* Fai
e700: 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  l the operation 
e710: 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  and rollback the
e720: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
e730: 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74  #define OE_Abort
e740: 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20      2   /* Back 
e750: 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20  out changes but 
e760: 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  do no rollback t
e770: 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
e780: 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20  efine OE_Fail   
e790: 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68    3   /* Stop th
e7a0: 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
e7b0: 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20  leave all prior 
e7c0: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
e7d0: 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34  ne OE_Ignore   4
e7e0: 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65     /* Ignore the
e7f0: 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64   error. Do not d
e800: 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20  o the INSERT or 
e810: 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
e820: 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20  e OE_Replace  5 
e830: 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73    /* Delete exis
e840: 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65  ting record, the
e850: 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55  n do INSERT or U
e860: 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e  PDATE */..#defin
e870: 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20  e OE_Restrict 6 
e880: 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f    /* OE_Abort fo
e890: 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f  r IMMEDIATE, OE_
e8a0: 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46  Rollback for DEF
e8b0: 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65  ERRED */.#define
e8c0: 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20   OE_SetNull  7  
e8d0: 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
e8e0: 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
e8f0: 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
e900: 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20   OE_SetDflt  8  
e910: 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
e920: 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
e930: 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a   its default */.
e940: 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61  #define OE_Casca
e950: 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61  de  9   /* Casca
e960: 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a  de the changes *
e970: 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65  /..#define OE_De
e980: 66 61 75 6c 74 20 20 39 39 20 20 2f 2a 20 44 6f  fault  99  /* Do
e990: 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65   whatever the de
e9a0: 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20  fault action is 
e9b0: 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  */.../*.** An in
e9c0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
e9d0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
e9e0: 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  e is passed as t
e9f0: 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
ea00: 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56  ment to sqlite3V
ea10: 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e  dbeKeyCompare an
ea20: 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  d is used to con
ea30: 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d  trol the .** com
ea40: 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74  parison of the t
ea50: 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a  wo index keys..*
ea60: 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61  *.** Note that a
ea70: 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20  SortOrder[] and 
ea80: 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69  aColl[] have nFi
ea90: 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68  eld+1 slots.  Th
eaa0: 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c  ere.** are nFiel
eab0: 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20  d slots for the 
eac0: 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e  columns of an in
ead0: 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74  dex then one ext
eae0: 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74  ra slot.** for t
eaf0: 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65 20  he rowid at the 
eb00: 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b  end..*/.struct K
eb10: 65 79 49 6e 66 6f 20 7b 0a 20 20 73 71 6c 69 74  eyInfo {.  sqlit
eb20: 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
eb30: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
eb40: 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75  onnection */.  u
eb50: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
eb60: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
eb70: 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65  ing - one of the
eb80: 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c   SQLITE_UTF* val
eb90: 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ues */.  u16 nFi
eba0: 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
ebb0: 4d 61 78 69 6d 75 6d 20 69 6e 64 65 78 20 66 6f  Maximum index fo
ebc0: 72 20 61 43 6f 6c 6c 5b 5d 20 61 6e 64 20 61 53  r aColl[] and aS
ebd0: 6f 72 74 4f 72 64 65 72 5b 5d 20 2a 2f 0a 20 20  ortOrder[] */.  
ebe0: 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
ebf0: 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65      /* Sort orde
ec00: 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  r for each colum
ec10: 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  n. */.  CollSeq 
ec20: 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43  *aColl[1];  /* C
ec30: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
ec40: 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  e for each term 
ec50: 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b  of the key */.};
ec60: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
ec70: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
ec80: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68  wing structure h
ec90: 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  olds information
eca0: 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69 6e 67   about a.** sing
ecb0: 6c 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64 20  le index record 
ecc0: 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79  that has already
ecd0: 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74   been parsed out
ece0: 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c   into individual
ecf0: 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a  .** values..**.*
ed00: 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e  * A record is an
ed10: 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e   object that con
ed20: 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
ed30: 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61  e fields of data
ed40: 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65  ..** Records are
ed50: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
ed60: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20  he content of a 
ed70: 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f  table row and to
ed80: 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65   store.** the ke
ed90: 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20  y of an index.  
eda0: 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20  A blob encoding 
edb0: 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63  of a record is c
edc0: 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65  reated by.** the
edd0: 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f   OP_MakeRecord o
ede0: 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42  pcode of the VDB
edf0: 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65  E and is disasse
ee00: 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20  mbled by the.** 
ee10: 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
ee20: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ..**.** This str
ee30: 75 63 74 75 72 65 20 68 6f 6c 64 73 20 61 20 72  ucture holds a r
ee40: 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61  ecord that has a
ee50: 6c 72 65 61 64 79 20 62 65 65 6e 20 64 69 73 61  lready been disa
ee60: 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f  ssembled.** into
ee70: 20 69 74 73 20 63 6f 6e 73 74 69 74 75 65 6e 74   its constituent
ee80: 20 66 69 65 6c 64 73 2e 0a 2a 2f 0a 73 74 72 75   fields..*/.stru
ee90: 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ct UnpackedRecor
eea0: 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  d {.  KeyInfo *p
eeb0: 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c  KeyInfo;  /* Col
eec0: 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d  lation and sort-
eed0: 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f  order informatio
eee0: 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  n */.  u16 nFiel
eef0: 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
ef00: 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
ef10: 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20  in apMem[] */.  
ef20: 75 38 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  u8 flags;       
ef30: 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 73      /* Boolean s
ef40: 65 74 74 69 6e 67 73 2e 20 20 55 4e 50 41 43 4b  ettings.  UNPACK
ef50: 45 44 5f 2e 2e 2e 20 62 65 6c 6f 77 20 2a 2f 0a  ED_... below */.
ef60: 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20    i64 rowid;    
ef70: 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79        /* Used by
ef80: 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
ef90: 5f 53 45 41 52 43 48 20 2a 2f 0a 20 20 4d 65 6d  _SEARCH */.  Mem
efa0: 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *aMem;         
efb0: 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 7d 3b   /* Values */.};
efc0: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
efd0: 76 61 6c 75 65 73 20 6f 66 20 55 6e 70 61 63 6b  values of Unpack
efe0: 65 64 52 65 63 6f 72 64 2e 66 6c 61 67 73 0a 2a  edRecord.flags.*
eff0: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b  /.#define UNPACK
f000: 45 44 5f 49 4e 43 52 4b 45 59 20 20 20 20 20 20  ED_INCRKEY      
f010: 20 30 78 30 31 20 20 2f 2a 20 4d 61 6b 65 20 74   0x01  /* Make t
f020: 68 69 73 20 6b 65 79 20 61 6e 20 65 70 73 69 6c  his key an epsil
f030: 6f 6e 20 6c 61 72 67 65 72 20 2a 2f 0a 23 64 65  on larger */.#de
f040: 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50 52  fine UNPACKED_PR
f050: 45 46 49 58 5f 4d 41 54 43 48 20 20 30 78 30 32  EFIX_MATCH  0x02
f060: 20 20 2f 2a 20 41 20 70 72 65 66 69 78 20 6d 61    /* A prefix ma
f070: 74 63 68 20 69 73 20 63 6f 6e 73 69 64 65 72 65  tch is considere
f080: 64 20 4f 4b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  d OK */.#define 
f090: 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f  UNPACKED_PREFIX_
f0a0: 53 45 41 52 43 48 20 30 78 30 34 20 20 2f 2a 20  SEARCH 0x04  /* 
f0b0: 49 67 6e 6f 72 65 20 66 69 6e 61 6c 20 28 72 6f  Ignore final (ro
f0c0: 77 69 64 29 20 66 69 65 6c 64 20 2a 2f 0a 0a 2f  wid) field */../
f0d0: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
f0e0: 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
f0f0: 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
f100: 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
f110: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
f120: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
f130: 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
f140: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
f150: 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
f160: 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
f170: 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
f180: 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
f190: 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
f1a0: 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
f1b0: 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
f1c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
f1d0: 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
f1e0: 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
f1f0: 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
f200: 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
f210: 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
f220: 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
f230: 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
f240: 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
f250: 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
f260: 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
f270: 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
f280: 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
f290: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
f2a0: 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
f2b0: 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
f2c0: 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
f2d0: 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
f2e0: 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
f2f0: 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
f300: 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
f310: 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
f320: 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
f330: 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
f340: 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  e .** first colu
f350: 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
f360: 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
f370: 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
f380: 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
f390: 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
f3a0: 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
f3b0: 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
f3c0: 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
f3d0: 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
f3e0: 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
f3f0: 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
f400: 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
f410: 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
f420: 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
f430: 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
f440: 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
f450: 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
f460: 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
f470: 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
f480: 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
f490: 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
f4a0: 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
f4b0: 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
f4c0: 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
f4d0: 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
f4e0: 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
f4f0: 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
f500: 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
f510: 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67  solution .** alg
f520: 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79  orithm to employ
f530: 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74   whenever an att
f540: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
f550: 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69  insert a non-uni
f560: 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a  que.** element..
f570: 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20  */.struct Index 
f580: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
f590: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f5a0: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64  Name of this ind
f5b0: 65 78 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69 43  ex */.  int *aiC
f5c0: 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
f5d0: 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e   /* Which column
f5e0: 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  s are used by th
f5f0: 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69  is index.  1st i
f600: 73 20 30 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  s 0 */.  tRowcnt
f610: 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20   *aiRowEst;     
f620: 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a    /* From ANALYZ
f630: 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c  E: Est. rows sel
f640: 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f  ected by each co
f650: 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  lumn */.  Table 
f660: 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  *pTable;        
f670: 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61     /* The SQL ta
f680: 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  ble being indexe
f690: 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  d */.  char *zCo
f6a0: 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20  lAff;           
f6b0: 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
f6c0: 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
f6d0: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
f6e0: 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74  /.  Index *pNext
f6f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
f700: 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61  The next index a
f710: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
f720: 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f  he same table */
f730: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
f740: 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ma;         /* S
f750: 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
f760: 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
f770: 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
f780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72            /* for
f790: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72   each column: Tr
f7a0: 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d  ue==DESC, False=
f7b0: 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a  =ASC */.  char *
f7c0: 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  *azColl;        
f7d0: 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63     /* Array of c
f7e0: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
f7f0: 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65  e names for inde
f800: 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61  x */.  Expr *pPa
f810: 72 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20  rtIdxWhere;     
f820: 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
f830: 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69  for partial indi
f840: 63 65 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  ces */.  int tnu
f850: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
f860: 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e    /* DB Page con
f870: 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20  taining root of 
f880: 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
f890: 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
f8a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
f8b0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
f8c0: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 74   table used by t
f8d0: 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
f8e0: 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20  8 onError;      
f8f0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62          /* OE_Ab
f900: 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ort, OE_Ignore, 
f910: 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f  OE_Replace, or O
f920: 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69  E_None */.  unsi
f930: 67 6e 65 64 20 61 75 74 6f 49 6e 64 65 78 3a 32  gned autoIndex:2
f940: 3b 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55  ;    /* 1==UNIQU
f950: 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45  E, 2==PRIMARY KE
f960: 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44  Y, 0==CREATE IND
f970: 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  EX */.  unsigned
f980: 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20   bUnordered:1;  
f990: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64   /* Use this ind
f9a0: 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20  ex for == or IN 
f9b0: 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a  queries only */.
f9c0: 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e    unsigned uniqN
f9d0: 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72  otNull:1;  /* Tr
f9e0: 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64  ue if UNIQUE and
f9f0: 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c   NOT NULL for al
fa00: 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 69 66  l columns */.#if
fa10: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
fa20: 45 5f 53 54 41 54 33 0a 20 20 69 6e 74 20 6e 53  E_STAT3.  int nS
fa30: 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20  ample;          
fa40: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
fa50: 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d  elements in aSam
fa60: 70 6c 65 5b 5d 20 2a 2f 0a 20 20 74 52 6f 77 63  ple[] */.  tRowc
fa70: 6e 74 20 61 76 67 45 71 3b 20 20 20 20 20 20 20  nt avgEq;       
fa80: 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
fa90: 45 71 20 76 61 6c 75 65 20 66 6f 72 20 6b 65 79  Eq value for key
faa0: 20 76 61 6c 75 65 73 20 6e 6f 74 20 69 6e 20 61   values not in a
fab0: 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65  Sample */.  Inde
fac0: 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65  xSample *aSample
fad0: 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20  ;    /* Samples 
fae0: 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  of the left-most
faf0: 20 6b 65 79 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d   key */.#endif.}
fb00: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  ;../*.** Each sa
fb10: 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
fb20: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
fb30: 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
fb40: 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a  nted in memory .
fb50: 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63  ** using a struc
fb60: 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70  ture of this typ
fb70: 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  e.  See document
fb80: 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70  ation at the top
fb90: 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79   of the.** analy
fba0: 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65  ze.c source file
fbb0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
fbc0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
fbd0: 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
fbe0: 6c 65 20 7b 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  le {.  union {. 
fbf0: 20 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20     char *z;     
fc00: 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65     /* Value if e
fc10: 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f 54  Type is SQLITE_T
fc20: 45 58 54 20 6f 72 20 53 51 4c 49 54 45 5f 42 4c  EXT or SQLITE_BL
fc30: 4f 42 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65  OB */.    double
fc40: 20 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c   r;       /* Val
fc50: 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53  ue if eType is S
fc60: 51 4c 49 54 45 5f 46 4c 4f 41 54 20 2a 2f 0a 20  QLITE_FLOAT */. 
fc70: 20 20 20 69 36 34 20 69 3b 20 20 20 20 20 20 20     i64 i;       
fc80: 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65     /* Value if e
fc90: 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f 49  Type is SQLITE_I
fca0: 4e 54 45 47 45 52 20 2a 2f 0a 20 20 7d 20 75 3b  NTEGER */.  } u;
fcb0: 0a 20 20 75 38 20 65 54 79 70 65 3b 20 20 20 20  .  u8 eType;    
fcc0: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e       /* SQLITE_N
fcd0: 55 4c 4c 2c 20 53 51 4c 49 54 45 5f 49 4e 54 45  ULL, SQLITE_INTE
fce0: 47 45 52 20 2e 2e 2e 20 65 74 63 2e 20 2a 2f 0a  GER ... etc. */.
fcf0: 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20    int nByte;    
fd00: 20 20 20 20 2f 2a 20 53 69 7a 65 20 69 6e 20 62      /* Size in b
fd10: 79 74 65 20 6f 66 20 74 65 78 74 20 6f 72 20 62  yte of text or b
fd20: 6c 6f 62 2e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  lob. */.  tRowcn
fd30: 74 20 6e 45 71 3b 20 20 20 20 20 20 2f 2a 20 45  t nEq;      /* E
fd40: 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
fd50: 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79  ws where the key
fd60: 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d   equals this sam
fd70: 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
fd80: 20 6e 4c 74 3b 20 20 20 20 20 20 2f 2a 20 45 73   nLt;      /* Es
fd90: 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
fda0: 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c  s where key is l
fdb0: 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
fdc0: 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
fdd0: 74 20 6e 44 4c 74 3b 20 20 20 20 20 2f 2a 20 45  t nDLt;     /* E
fde0: 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  st. number of di
fdf0: 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73  stinct keys less
fe00: 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
fe10: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  e */.};../*.** E
fe20: 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67  ach token coming
fe30: 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65   out of the lexe
fe40: 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  r is an instance
fe50: 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75   of.** this stru
fe60: 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61  cture.  Tokens a
fe70: 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20  re also used as 
fe80: 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65  part of an expre
fe90: 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  ssion..**.** Not
fea0: 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20  e if Token.z==0 
feb0: 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61  then Token.dyn a
fec0: 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75  nd Token.n are u
fed0: 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20  ndefined and.** 
fee0: 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64  may contain rand
fef0: 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e  om values.  Do n
ff00: 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75  ot make any assu
ff10: 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f  mptions about To
ff20: 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54  ken.dyn.** and T
ff30: 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65  oken.n when Toke
ff40: 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63  n.z==0..*/.struc
ff50: 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73  t Token {.  cons
ff60: 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f  t char *z;     /
ff70: 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f  * Text of the to
ff80: 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74  ken.  Not NULL-t
ff90: 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20  erminated! */.  
ffa0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20  unsigned int n; 
ffb0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
ffc0: 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
ffd0: 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a  is token */.};..
ffe0: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
fff0: 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
10000 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
10010 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
10020 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
10030 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54  ode for a SELECT
10040 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
10050 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
10060 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70  ns..**.** If Exp
10070 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c  r.op==TK_AGG_COL
10080 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55  UMN or TK_AGG_FU
10090 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72  NCTION then Expr
100a0 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a  .pAggInfo is a.*
100b0 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  * pointer to thi
100c0 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  s structure.  Th
100d0 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66  e Expr.iColumn f
100e0 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65  ield is the inde
100f0 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  x in.** AggInfo.
10100 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66  aCol[] or AggInf
10110 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66  o.aFunc[] of inf
10120 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
10130 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
10140 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64  ode for that nod
10150 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f  e..**.** AggInfo
10160 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67  .pGroupBy and Ag
10170 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70  gInfo.aFunc.pExp
10180 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64  r point to field
10190 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20  s within the.** 
101a0 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20  original Select 
101b0 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
101c0 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c  escribes the SEL
101d0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
101e0 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20  These.** fields 
101f0 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62  do not need to b
10200 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61  e freed when dea
10210 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67  llocating the Ag
10220 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e  gInfo structure.
10230 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e  .*/.struct AggIn
10240 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74  fo {.  u8 direct
10250 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Mode;          /
10260 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69  * Direct renderi
10270 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61  ng mode means ta
10280 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79  ke data directly
10290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
102a0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72             ** fr
102b0 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  om source tables
102c0 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f   rather than fro
102d0 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a  m accumulators *
102e0 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e  /.  u8 useSortin
102f0 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49  gIdx;       /* I
10300 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72  n direct mode, r
10310 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72  eference the sor
10320 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65  ting index rathe
10330 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
10340 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
10350 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  han the source t
10360 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  able */.  int so
10370 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
10380 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
10390 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e  er of the sortin
103a0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
103b0 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b   sortingIdxPTab;
103c0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
103d0 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d  umber of pseudo-
103e0 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  table */.  int n
103f0 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20  SortingColumn;  
10400 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10410 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73  columns in the s
10420 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
10430 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
10440 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65  upBy;     /* The
10450 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65   group by clause
10460 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
10470 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a  Info_col {    /*
10480 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   For each column
10490 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20   used in source 
104a0 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61  tables */.    Ta
104b0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
104c0 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65         /* Source
104d0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
104e0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
104f0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
10500 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
10510 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
10520 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20     int iColumn; 
10530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
10540 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74  olumn number wit
10550 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  hin the source t
10560 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
10570 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20  iSorterColumn;  
10580 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
10590 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72  umber in the sor
105a0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
105b0 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
105c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
105d0 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
105e0 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
105f0 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78  ulator */.    Ex
10600 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
10610 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72         /* The or
10620 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f  iginal expressio
10630 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a  n */.  } *aCol;.
10640 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20    int nColumn;  
10650 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
10660 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72  ber of used entr
10670 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f  ies in aCol[] */
10680 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61  .  int nAccumula
10690 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  tor;       /* Nu
106a0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
106b0 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67  that show throug
106c0 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e  h to the output.
106d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
106e0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64             ** Ad
106f0 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73  ditional columns
10700 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61   are used only a
10710 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  s parameters to.
10720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10730 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67            ** agg
10740 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
10750 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
10760 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a  Info_func {   /*
10770 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67   For each aggreg
10780 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ate function */.
10790 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
107b0 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64  Expression encod
107c0 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ing the function
107d0 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20   */.    FuncDef 
107e0 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20  *pFunc;         
107f0 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74   /* The aggregat
10800 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  e function imple
10810 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  mentation */.   
10820 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
10830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
10840 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
10850 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
10860 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74  lator */.    int
10870 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20   iDistinct;     
10880 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72        /* Ephemer
10890 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f  al table used to
108a0 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43   enforce DISTINC
108b0 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b  T */.  } *aFunc;
108c0 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20  .  int nFunc;   
108d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
108e0 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
108f0 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b  in aFunc[] */.};
10900 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
10910 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20  type ynVar is a 
10920 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20  signed integer, 
10930 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72  either 16-bit or
10940 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61   32-bit..** Usua
10950 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74  lly it is 16-bit
10960 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54  s.  But if SQLIT
10970 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
10980 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72  UMBER is greater
10990 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77  .** than 32767 w
109a0 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69  e have to make i
109b0 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69  t 32-bit.  16-bi
109c0 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62  t is preferred b
109d0 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65  ecause.** it use
109e0 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e  s less memory in
109f0 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74   the Expr object
10a00 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67  , which is a big
10a10 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20   memory user.** 
10a20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  in systems with 
10a30 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64  lots of prepared
10a40 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e   statements.  An
10a50 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f  d few applicatio
10a60 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20  ns.** need more 
10a70 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72  than about 10 or
10a80 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20   20 variables.  
10a90 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65  But some extreme
10aa0 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74   users want.** t
10ab0 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20  o have prepared 
10ac0 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20  statements with 
10ad0 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61  over 32767 varia
10ae0 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68  bles, and for th
10af0 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e  em.** the option
10b00 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61   is available (a
10b10 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e  t compile-time).
10b20 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
10b30 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
10b40 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65  ER<=32767.typede
10b50 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c  f i16 ynVar;.#el
10b60 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79  se.typedef int y
10b70 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  nVar;.#endif../*
10b80 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66  .** Each node of
10b90 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
10ba0 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  n the parse tree
10bb0 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
10bc0 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
10bd0 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  ture..**.** Expr
10be0 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64  .op is the opcod
10bf0 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70  e. The integer p
10c00 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65  arser token code
10c10 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20  s are reused.** 
10c20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e  as opcodes here.
10c30 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68   For example, th
10c40 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73  e parser defines
10c50 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20   TK_GE to be an 
10c60 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20  integer.** code 
10c70 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
10c80 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20   ">=" operator. 
10c90 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65  This same intege
10ca0 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64  r code is reused
10cb0 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74  .** to represent
10cc0 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61   the greater-tha
10cd0 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70  n-or-equal-to op
10ce0 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78  erator in the ex
10cf0 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65  pression.** tree
10d00 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
10d10 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
10d20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f  SQL literal (TK_
10d30 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41  INTEGER, TK_FLOA
10d40 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20  T, TK_BLOB, .** 
10d50 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
10d60 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
10d70 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
10d80 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
10d90 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
10da0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
10db0 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
10dc0 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
10dd0 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
10de0 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65  the .** variable
10df0 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20   name. Finally, 
10e00 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
10e10 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
10e20 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f  tion (TK_FUNCTIO
10e30 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72  N),.** then Expr
10e40 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
10e50 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
10e60 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
10e70 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20  Expr.pRight and 
10e80 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74  Expr.pLeft are t
10e90 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
10ea0 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73  t subexpressions
10eb0 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20   of a.** binary 
10ec0 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72  operator. Either
10ed0 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20   or both may be 
10ee0 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  NULL..**.** Expr
10ef0 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69  .x.pList is a li
10f00 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  st of arguments 
10f10 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
10f20 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
10f30 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20  tion,.** a CASE 
10f40 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e  expression or an
10f50 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   IN expression o
10f60 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  f the form "<lhs
10f70 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e  > IN (<y>, <z>..
10f80 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  .)"..** Expr.x.p
10f90 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69  Select is used i
10fa0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
10fb0 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74   is a sub-select
10fc0 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
10fd0 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d  n of.** the form
10fe0 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45   "<lhs> IN (SELE
10ff0 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65  CT ...)". If the
11000 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69   EP_xIsSelect bi
11010 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a  t is set in the.
11020 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  ** Expr.flags ma
11030 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e  sk, then Expr.x.
11040 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
11050 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70  . Otherwise, Exp
11060 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a  r.x.pList is .**
11070 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e   valid..**.** An
11080 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
11090 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44  he form ID or ID
110a0 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20  .ID refers to a 
110b0 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c  column in a tabl
110c0 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65  e..** For such e
110d0 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72  xpressions, Expr
110e0 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b  .op is set to TK
110f0 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72  _COLUMN and Expr
11100 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  .iTable is.** th
11110 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72  e integer cursor
11120 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42   number of a VDB
11130 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  E cursor pointin
11140 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20  g to that table 
11150 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c  and.** Expr.iCol
11160 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d  umn is the colum
11170 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  n number for the
11180 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e   specific column
11190 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70  .  If the.** exp
111a0 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
111b0 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61  as a result in a
111c0 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45  n aggregate SELE
111d0 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  CT, then the.** 
111e0 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74  value is also st
111f0 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72  ored in the Expr
11200 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20  .iAgg column in 
11210 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f  the aggregate so
11220 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20   that.** it can 
11230 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65  be accessed afte
11240 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73  r all aggregates
11250 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a   are computed..*
11260 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
11270 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62  ession is an unb
11280 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61  ound variable ma
11290 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e  rker (a question
112a0 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63   mark .** charac
112b0 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f  ter '?' in the o
112c0 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65  riginal SQL) the
112d0 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c  n the Expr.iTabl
112e0 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65  e holds the inde
112f0 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72  x .** number for
11300 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a   that variable..
11310 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
11320 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
11330 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e  query then Expr.
11340 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e  iColumn holds an
11350 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69   integer.** regi
11360 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74  ster number cont
11370 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c  aining the resul
11380 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  t of the subquer
11390 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75  y.  If the.** su
113a0 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63  bquery gives a c
113b0 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20  onstant result, 
113c0 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d  then iTable is -
113d0 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75  1.  If the subqu
113e0 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64  ery.** gives a d
113f0 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20  ifferent answer 
11400 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d  at different tim
11410 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d  es during statem
11420 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a  ent processing.*
11430 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  * then iTable is
11440 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
11450 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61  a subroutine tha
11460 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73  t computes the s
11470 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49  ubquery..**.** I
11480 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66  f the Expr is of
11490 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c   type OP_Column,
114a0 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
114b0 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66  t is selecting f
114c0 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b  rom.** is a disk
114d0 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f   table or the "o
114e0 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62  ld.*" pseudo-tab
114f0 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f  le, then pTab po
11500 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ints to the.** c
11510 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
11520 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a  le definition..*
11530 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20  *.** ALLOCATION 
11540 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70  NOTES:.**.** Exp
11550 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73  r objects can us
11560 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72  e a lot of memor
11570 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62  y space in datab
11580 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a  ase schema.  To.
11590 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d  ** help reduce m
115a0 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e  emory requiremen
115b0 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e  ts, sometimes an
115c0 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c   Expr object wil
115d0 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65  l be.** truncate
115e0 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63  d.  And to reduc
115f0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
11600 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
11610 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  ns, sometimes.**
11620 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70   two or more Exp
11630 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62  r objects will b
11640 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
11650 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ngle memory allo
11660 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74  cation,.** toget
11670 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54  her with Expr.zT
11680 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a  oken strings..**
11690 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65  .** If the EP_Re
116a0 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b  duced and EP_Tok
116b0 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65  enOnly flags are
116c0 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20   set when.** an 
116d0 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74  Expr object is t
116e0 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20  runcated.  When 
116f0 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
11700 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74  t, then all.** t
11710 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62  he child Expr ob
11720 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70  jects in the Exp
11730 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72  r.pLeft and Expr
11740 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73  .pRight subtrees
11750 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  .** are containe
11760 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  d within the sam
11770 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
11780 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65  ion.  Note, howe
11790 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65  ver, that.** the
117a0 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70   subtrees in Exp
117b0 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70  r.x.pList or Exp
117c0 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20  r.x.pSelect are 
117d0 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c  always separatel
117e0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
117f0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
11800 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f  ether or not EP_
11810 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a  Reduced is set..
11820 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
11830 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
11840 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
11850 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
11860 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
11870 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
11880 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
11890 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65   affinity of the
118a0 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20   column or 0 if 
118b0 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  not a column */.
118c0 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20    u16 flags;    
118d0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
118e0 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a  ous flags.  EP_*
118f0 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
11900 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
11910 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20   *zToken;       
11920 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75     /* Token valu
11930 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74  e. Zero terminat
11940 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20  ed and dequoted 
11950 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75  */.    int iValu
11960 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
11970 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   Non-negative in
11980 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45  teger value if E
11990 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20  P_IntValue */.  
119a0 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } u;..  /* If th
119b0 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
119c0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
119d0 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
119e0 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
119f0 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
11a00 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
11a10 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
11a20 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
11a30 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
11a40 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
11a50 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
11a60 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20  malfunction. .  
11a70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11aa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11ab0 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a  *****/..  Expr *
11ac0 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20  pLeft;          
11ad0 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65   /* Left subnode
11ae0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67   */.  Expr *pRig
11af0 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ht;          /* 
11b00 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f  Right subnode */
11b10 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45  .  union {.    E
11b20 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20  xprList *pList; 
11b30 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20      /* Function 
11b40 61 72 67 75 6d 65 6e 74 73 20 6f 72 20 69 6e 20  arguments or in 
11b50 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 65 78 70  "<expr> IN (<exp
11b60 72 2d 6c 69 73 74 29 22 20 2a 2f 0a 20 20 20 20  r-list)" */.    
11b70 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
11b80 20 20 20 20 20 2f 2a 20 55 73 65 64 20 66 6f 72       /* Used for
11b90 20 73 75 62 2d 73 65 6c 65 63 74 73 20 61 6e 64   sub-selects and
11ba0 20 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 73 65   "<expr> IN (<se
11bb0 6c 65 63 74 3e 29 22 20 2a 2f 0a 20 20 7d 20 78  lect>)" */.  } x
11bc0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
11bd0 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69  P_Reduced flag i
11be0 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
11bf0 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
11c00 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
11c10 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
11c20 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
11c30 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
11c40 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
11c50 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
11c60 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
11c70 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
11c80 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  nction..  ******
11c90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11ca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11cb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11cc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
11cd0 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
11ce0 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
11cf0 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
11d00 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74         /* Height
11d10 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61   of the tree hea
11d20 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  ded by this node
11d30 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
11d40 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
11d50 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
11d60 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  : cursor number 
11d70 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67  of table holding
11d80 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20   column.        
11d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11da0 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   ** TK_REGISTER:
11db0 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
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 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65  TRIGGER: 1 -> ne
11df0 77 2c 20 30 20 2d 3e 20 6f 6c 64 20 2a 2f 0a 20  w, 0 -> old */. 
11e00 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20   ynVar iColumn; 
11e10 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
11e20 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64  LUMN: column ind
11e30 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69  ex.  -1 for rowi
11e40 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
11e50 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
11e60 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69  K_VARIABLE: vari
11e70 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77  able number (alw
11e80 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20  ays >= 1). */.  
11e90 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20  i16 iAgg;       
11ea0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
11eb0 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66  entry in pAggInf
11ec0 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61  o->aCol[] or ->a
11ed0 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20  Func[] */.  i16 
11ee0 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b  iRightJoinTable;
11ef0 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d     /* If EP_From
11f00 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20  Join, the right 
11f10 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69  table of the joi
11f20 6e 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 32  n */.  u8 flags2
11f30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11f40 20 53 65 63 6f 6e 64 20 73 65 74 20 6f 66 20 66   Second set of f
11f50 6c 61 67 73 2e 20 20 45 50 32 5f 2e 2e 2e 20 2a  lags.  EP2_... *
11f60 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
11f70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
11f80 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69  _REGISTER: origi
11f90 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70  nal value of Exp
11fa0 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20  r.op.           
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
11fc0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20   TK_COLUMN: the 
11fd0 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20  value of p5 for 
11fe0 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  OP_Column.      
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12000 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e     ** TK_AGG_FUN
12010 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64  CTION: nesting d
12020 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66  epth */.  AggInf
12030 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20  o *pAggInfo;    
12040 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41   /* Used by TK_A
12050 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b  GG_COLUMN and TK
12060 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f  _AGG_FUNCTION */
12070 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
12080 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
12090 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e  le for TK_COLUMN
120a0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f   expressions. */
120b0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
120c0 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
120d0 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74   meanings of bit
120e0 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  s in the Expr.fl
120f0 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
12100 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69  efine EP_FromJoi
12110 6e 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f  n   0x0001  /* O
12120 72 69 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20  riginated in ON 
12130 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  or USING clause 
12140 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  of a join */.#de
12150 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
12160 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 43 6f     0x0002  /* Co
12170 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
12180 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
12190 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
121a0 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 20  e EP_Resolved   
121b0 30 78 30 30 30 34 20 20 2f 2a 20 49 44 73 20 68  0x0004  /* IDs h
121c0 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
121d0 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a  d to COLUMNs */.
121e0 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72  #define EP_Error
121f0 20 20 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a        0x0008  /*
12200 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74   Expression cont
12210 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
12220 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
12230 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20  ne EP_Distinct  
12240 20 30 78 30 30 31 30 20 20 2f 2a 20 41 67 67 72   0x0010  /* Aggr
12250 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
12260 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79  ith DISTINCT key
12270 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
12280 45 50 5f 56 61 72 53 65 6c 65 63 74 20 20 30 78  EP_VarSelect  0x
12290 30 30 32 30 20 20 2f 2a 20 70 53 65 6c 65 63 74  0020  /* pSelect
122a0 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20   is correlated, 
122b0 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a  not constant */.
122c0 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75  #define EP_DblQu
122d0 6f 74 65 64 20 20 30 78 30 30 34 30 20 20 2f 2a  oted  0x0040  /*
122e0 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69   token.z was ori
122f0 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22  ginally in "..."
12300 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
12310 6e 66 69 78 46 75 6e 63 20 20 30 78 30 30 38 30  nfixFunc  0x0080
12320 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e    /* True for an
12330 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a   infix function:
12340 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63   LIKE, GLOB, etc
12350 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
12360 6f 6c 6c 61 74 65 20 20 20 20 30 78 30 31 30 30  ollate    0x0100
12370 20 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69    /* Tree contai
12380 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20  ns a TK_COLLATE 
12390 6f 70 65 61 72 74 6f 72 20 2a 2f 0a 23 64 65 66  opeartor */.#def
123a0 69 6e 65 20 45 50 5f 46 69 78 65 64 44 65 73 74  ine EP_FixedDest
123b0 20 20 30 78 30 32 30 30 20 20 2f 2a 20 52 65 73    0x0200  /* Res
123c0 75 6c 74 20 6e 65 65 64 65 64 20 69 6e 20 61 20  ult needed in a 
123d0 73 70 65 63 69 66 69 63 20 72 65 67 69 73 74 65  specific registe
123e0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
123f0 49 6e 74 56 61 6c 75 65 20 20 20 30 78 30 34 30  IntValue   0x040
12400 30 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61  0  /* Integer va
12410 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  lue contained in
12420 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65   u.iValue */.#de
12430 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63  fine EP_xIsSelec
12440 74 20 20 30 78 30 38 30 30 20 20 2f 2a 20 78 2e  t  0x0800  /* x.
12450 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
12460 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c   (otherwise x.pL
12470 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69  ist is) */.#defi
12480 6e 65 20 45 50 5f 48 69 6e 74 20 20 20 20 20 20  ne EP_Hint      
12490 20 30 78 31 30 30 30 20 20 2f 2a 20 4e 6f 74 20   0x1000  /* Not 
124a0 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
124b0 45 50 5f 52 65 64 75 63 65 64 20 20 20 20 30 78  EP_Reduced    0x
124c0 32 30 30 30 20 20 2f 2a 20 45 78 70 72 20 73 74  2000  /* Expr st
124d0 72 75 63 74 20 69 73 20 45 58 50 52 5f 52 45 44  ruct is EXPR_RED
124e0 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f  UCEDSIZE bytes o
124f0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
12500 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 20 30 78 34  P_TokenOnly  0x4
12510 30 30 30 20 20 2f 2a 20 45 78 70 72 20 73 74 72  000  /* Expr str
12520 75 63 74 20 69 73 20 45 58 50 52 5f 54 4f 4b 45  uct is EXPR_TOKE
12530 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20  NONLYSIZE bytes 
12540 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
12550 45 50 5f 53 74 61 74 69 63 20 20 20 20 20 30 78  EP_Static     0x
12560 38 30 30 30 20 20 2f 2a 20 48 65 6c 64 20 69 6e  8000  /* Held in
12570 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61   memory not obta
12580 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
12590 28 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  () */../*.** The
125a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
125b0 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
125c0 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
125d0 66 6c 61 67 73 32 20 66 69 65 6c 64 2e 0a 2a 2f  flags2 field..*/
125e0 0a 23 64 65 66 69 6e 65 20 45 50 32 5f 4d 61 6c  .#define EP2_Mal
125f0 6c 6f 63 65 64 54 6f 6b 65 6e 20 20 30 78 30 30  locedToken  0x00
12600 30 31 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73  01  /* Need to s
12610 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45  qlite3DbFree() E
12620 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64  xpr.zToken */.#d
12630 65 66 69 6e 65 20 45 50 32 5f 49 72 72 65 64 75  efine EP2_Irredu
12640 63 69 62 6c 65 20 20 20 20 30 78 30 30 30 32 20  cible    0x0002 
12650 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44   /* Cannot EXPRD
12660 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45  UP_REDUCE this E
12670 78 70 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  xpr */../*.** Th
12680 65 20 70 73 65 75 64 6f 2d 72 6f 75 74 69 6e 65  e pseudo-routine
12690 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 49   sqlite3ExprSetI
126a0 72 72 65 64 75 63 69 62 6c 65 20 73 65 74 73 20  rreducible sets 
126b0 74 68 65 20 45 50 32 5f 49 72 72 65 64 75 63 69  the EP2_Irreduci
126c0 62 6c 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 61  ble.** flag on a
126d0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 73 74 72  n expression str
126e0 75 63 74 75 72 65 2e 20 20 54 68 69 73 20 66 6c  ucture.  This fl
126f0 61 67 20 69 73 20 75 73 65 64 20 66 6f 72 20 56  ag is used for V
12700 56 26 41 20 6f 6e 6c 79 2e 20 20 54 68 65 0a 2a  V&A only.  The.*
12710 2a 20 72 6f 75 74 69 6e 65 20 69 73 20 69 6d 70  * routine is imp
12720 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 6d 61  lemented as a ma
12730 63 72 6f 20 74 68 61 74 20 6f 6e 6c 79 20 77 6f  cro that only wo
12740 72 6b 73 20 77 68 65 6e 20 69 6e 20 64 65 62 75  rks when in debu
12750 67 67 69 6e 67 20 6d 6f 64 65 2c 0a 2a 2a 20 73  gging mode,.** s
12760 6f 20 61 73 20 6e 6f 74 20 74 6f 20 62 75 72 64  o as not to burd
12770 65 6e 20 70 72 6f 64 75 63 74 69 6f 6e 20 63 6f  en production co
12780 64 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  de..*/.#ifdef SQ
12790 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66  LITE_DEBUG.# def
127a0 69 6e 65 20 45 78 70 72 53 65 74 49 72 72 65 64  ine ExprSetIrred
127b0 75 63 69 62 6c 65 28 58 29 20 20 28 58 29 2d 3e  ucible(X)  (X)->
127c0 66 6c 61 67 73 32 20 7c 3d 20 45 50 32 5f 49 72  flags2 |= EP2_Ir
127d0 72 65 64 75 63 69 62 6c 65 0a 23 65 6c 73 65 0a  reducible.#else.
127e0 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
127f0 49 72 72 65 64 75 63 69 62 6c 65 28 58 29 0a 23  Irreducible(X).#
12800 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
12810 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
12820 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
12830 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
12840 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70  s in the .** Exp
12850 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
12860 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  /.#define ExprHa
12870 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  sProperty(E,P)  
12880 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26     (((E)->flags&
12890 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
128a0 6e 65 20 45 78 70 72 48 61 73 41 6e 79 50 72 6f  ne ExprHasAnyPro
128b0 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45  perty(E,P)  (((E
128c0 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
128d0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65  ).#define ExprSe
128e0 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  tProperty(E,P)  
128f0 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28     (E)->flags|=(
12900 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43  P).#define ExprC
12910 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50  learProperty(E,P
12920 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d  )   (E)->flags&=
12930 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ~(P)../*.** Macr
12940 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
12950 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
12960 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
12970 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a  a normal Expr .*
12980 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
12990 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
129a0 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
129b0 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
129c0 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45  ags .** and an E
129d0 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
129e0 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
129f0 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64   flag set..*/.#d
12a00 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53  efine EXPR_FULLS
12a10 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69  IZE           si
12a20 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20  zeof(Expr)      
12a30 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a       /* Full siz
12a40 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  e */.#define EXP
12a50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20  R_REDUCEDSIZE   
12a60 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
12a70 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43  pr,iTable)  /* C
12a80 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a  ommon features *
12a90 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54  /.#define EXPR_T
12aa0 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20  OKENONLYSIZE    
12ab0 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
12ac0 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65  pLeft)   /* Fewe
12ad0 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f  r features */../
12ae0 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65  *.** Flags passe
12af0 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  d to the sqlite3
12b00 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69  ExprDup() functi
12b10 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64  on. See the head
12b20 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61  er comment .** a
12b30 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72  bove sqlite3Expr
12b40 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c  Dup() for detail
12b50 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  s..*/.#define EX
12b60 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20  PRDUP_REDUCE    
12b70 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
12b80 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a  Used reduced-siz
12b90 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a  e Expr nodes */.
12ba0 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  ./*.** A list of
12bb0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45   expressions.  E
12bc0 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ach expression m
12bd0 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61  ay optionally ha
12be0 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41  ve a.** name.  A
12bf0 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62  n expr/name comb
12c00 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75  ination can be u
12c10 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  sed in several w
12c20 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20  ays, such.** as 
12c30 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70  the list of "exp
12c40 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20  r AS ID" fields 
12c50 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c  following a "SEL
12c60 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a  ECT" or in the.*
12c70 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20  * list of "ID = 
12c80 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61  expr" items in a
12c90 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73  n UPDATE.  A lis
12ca0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
12cb0 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20   can.** also be 
12cc0 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
12cd0 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69  ment to a functi
12ce0 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  on, in which cas
12cf0 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a  e the a.zName.**
12d00 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73   field is not us
12d10 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66  ed..**.** By def
12d20 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53  ault the Expr.zS
12d30 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20  pan field holds 
12d40 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65  a human-readable
12d50 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a   description of.
12d60 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
12d70 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69  n that is used i
12d80 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
12d90 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67   of error messag
12da0 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e  es and.** column
12db0 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69   labels.  In thi
12dc0 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70  s case, Expr.zSp
12dd0 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  an is typically 
12de0 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a  the text of a.**
12df0 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69   column expressi
12e00 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20  on as it exists 
12e10 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
12e20 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c  ement.  However,
12e30 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e   if.** the bSpan
12e40 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65  IsTab flag is se
12e50 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73  t, then zSpan is
12e60 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d   overloaded to m
12e70 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20  ean the name.** 
12e80 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
12e90 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d  lumn in the form
12ea0 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45  : DATABASE.TABLE
12eb0 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c  .COLUMN.  This l
12ec0 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20  ater.** form is 
12ed0 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65  used for name re
12ee0 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65  solution with ne
12ef0 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  sted FROM clause
12f00 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  s..*/.struct Exp
12f10 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45  rList {.  int nE
12f20 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
12f30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78   /* Number of ex
12f40 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65  pressions on the
12f50 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20 69   list */.  int i
12f60 45 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20 20  ECursor;        
12f70 20 20 2f 2a 20 56 44 42 45 20 43 75 72 73 6f 72    /* VDBE Cursor
12f80 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
12f90 20 74 68 69 73 20 45 78 70 72 4c 69 73 74 20 2a   this ExprList *
12fa0 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
12fb0 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f  ist_item { /* Fo
12fc0 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
12fd0 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
12fe0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
12ff0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13000 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72  The list of expr
13010 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63  essions */.    c
13020 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
13030 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
13040 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
13050 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
13060 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70  */.    char *zSp
13070 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  an;            /
13080 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
13090 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
130a0 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74  n */.    u8 sort
130b0 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
130c0 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f   /* 1 for DESC o
130d0 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20  r 0 for ASC */. 
130e0 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
130f0 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
13100 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
13110 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
13120 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
13130 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
13140 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
13150 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
13160 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
13170 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f    u16 iOrderByCo
13180 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72  l;        /* For
13190 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d   ORDER BY, colum
131a0 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75  n number in resu
131b0 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 75 31  lt set */.    u1
131c0 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20  6 iAlias;       
131d0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
131e0 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73  nto Parse.aAlias
131f0 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a  [] for zName */.
13200 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20    } *a;         
13210 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
13220 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  c a power of two
13230 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75 61   greater or equa
13240 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b  l to nExpr */.};
13250 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
13260 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
13270 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62 79  cture is used by
13280 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 72   the parser to r
13290 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68  ecord both.** th
132a0 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
132b0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61   an expression a
132c0 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69  nd the span of i
132d0 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e  nput text for an
132e0 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  .** expression..
132f0 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53 70  */.struct ExprSp
13300 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78  an {.  Expr *pEx
13310 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  pr;          /* 
13320 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70  The expression p
13330 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63  arse tree */.  c
13340 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72  onst char *zStar
13350 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68  t;   /* First ch
13360 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74  aracter of input
13370 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74   text */.  const
13380 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20   char *zEnd;    
13390 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65   /* One characte
133a0 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  r past the end o
133b0 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
133c0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
133d0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
133e0 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
133f0 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
13400 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
13410 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
13420 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
13430 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
13440 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
13450 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
13460 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
13470 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
13480 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
13490 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
134a0 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
134b0 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
134c0 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
134d0 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
134e0 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
134f0 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
13500 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
13510 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
13520 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
13530 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
13540 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
13550 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
13560 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
13570 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
13580 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
13590 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
135a0 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
135b0 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
135c0 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
135d0 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
135e0 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
135f0 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
13600 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
13610 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
13620 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
13630 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
13640 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
13650 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
13660 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
13670 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
13680 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
13690 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
136a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
136b0 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
136c0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
136d0 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
136e0 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
136f0 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
13700 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
13710 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
13720 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
13730 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
13740 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
13750 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
13760 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
13770 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
13780 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
13790 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
137a0 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
137b0 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
137c0 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
137d0 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74  .typedef u64 Bit
137e0 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  mask;../*.** The
137f0 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
13800 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22  in a Bitmask.  "
13810 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d  BMS" means "BitM
13820 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64  ask Size"..*/.#d
13830 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74  efine BMS  ((int
13840 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  )(sizeof(Bitmask
13850 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62  )*8))../*.** A b
13860 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a  it in a Bitmask.
13870 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  */.#define MASKB
13880 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61  IT(n)   (((Bitma
13890 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a  sk)1)<<(n))../*.
138a0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
138b0 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
138c0 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
138d0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
138e0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
138f0 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
13900 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
13910 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
13920 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
13930 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
13940 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
13950 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
13960 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
13970 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
13980 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
13990 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
139a0 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
139b0 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
139c0 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
139d0 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
139e0 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
139f0 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
13a00 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
13a10 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
13a20 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
13a30 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
13a40 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
13a50 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
13a60 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
13a70 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
13a80 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
13a90 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
13aa0 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
13ab0 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
13ac0 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
13ad0 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
13ae0 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
13af0 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
13b00 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
13b10 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
13b20 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
13b30 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
13b40 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
13b50 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
13b60 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
13b70 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
13b80 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
13b90 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
13ba0 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
13bb0 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
13bc0 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
13bd0 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
13be0 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
13bf0 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
13c00 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
13c10 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
13c20 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
13c30 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
13c40 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
13c50 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
13c60 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
13c70 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
13c80 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
13c90 53 72 63 4c 69 73 74 20 7b 0a 20 20 75 38 20 6e  SrcList {.  u8 n
13ca0 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Src;        /* N
13cb0 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
13cc0 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e  or subqueries in
13cd0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
13ce0 20 2a 2f 0a 20 20 75 38 20 6e 41 6c 6c 6f 63 3b   */.  u8 nAlloc;
13cf0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13d00 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
13d10 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
13d20 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
13d30 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
13d40 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
13d50 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
13d60 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
13d70 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
13d80 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
13d90 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
13da0 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
13db0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
13dc0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
13dd0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
13de0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
13df0 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
13e00 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
13e10 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
13e20 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
13e30 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
13e40 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
13e50 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
13e60 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
13e70 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
13e80 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
13e90 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
13ea0 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
13eb0 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
13ec0 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
13ed0 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
13ee0 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
13ef0 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
13f00 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
13f10 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
13f20 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
13f30 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
13f40 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
13f50 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
13f60 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20  u8 jointype;    
13f70 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69    /* Type of joi
13f80 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 61  n between this a
13f90 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
13fa0 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ious */.    unsi
13fb0 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
13fc0 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
13fd0 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
13fe0 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
13ff0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
14000 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
14010 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
14020 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
14030 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ated */.    unsi
14040 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
14050 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
14060 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
14070 75 74 69 6e 65 20 2a 2f 0a 23 69 66 6e 64 65 66  utine */.#ifndef
14080 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
14090 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
140a0 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
140b0 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
140c0 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
140d0 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
140e0 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
140f0 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
14100 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
14110 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
14120 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
14130 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
14140 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
14150 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
14160 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
14170 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
14180 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
14190 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
141a0 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
141b0 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
141c0 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
141d0 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
141e0 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  used */.    char
141f0 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a   *zIndex;     /*
14200 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
14210 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
14220 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
14230 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  .    Index *pInd
14240 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20  ex;    /* Index 
14250 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
14260 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65  ponding to zInde
14270 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d  x, if any */.  }
14280 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
14290 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
142a0 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66  for each identif
142b0 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ier on the list 
142c0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72  */.};../*.** Per
142d0 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66  mitted values of
142e0 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a   the SrcList.a.j
142f0 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f  ointype field.*/
14300 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45  .#define JT_INNE
14310 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20  R     0x0001    
14320 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69  /* Any kind of i
14330 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f  nner or cross jo
14340 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
14350 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30  _CROSS     0x000
14360 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74  2    /* Explicit
14370 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53   use of the CROS
14380 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  S keyword */.#de
14390 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20  fine JT_NATURAL 
143a0 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
143b0 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72  rue for a "natur
143c0 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  al" join */.#def
143d0 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20  ine JT_LEFT     
143e0 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65   0x0008    /* Le
143f0 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ft outer join */
14400 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48  .#define JT_RIGH
14410 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20  T     0x0010    
14420 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a  /* Right outer j
14430 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
14440 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30  T_OUTER     0x00
14450 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55  20    /* The "OU
14460 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20  TER" keyword is 
14470 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69  present */.#defi
14480 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20  ne JT_ERROR     
14490 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b  0x0040    /* unk
144a0 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72  nown or unsuppor
144b0 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f  ted join type */
144c0 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61  .../*.** Flags a
144d0 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74  ppropriate for t
144e0 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61  he wctrlFlags pa
144f0 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74  rameter of sqlit
14500 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a  e3WhereBegin().*
14510 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49  * and the WhereI
14520 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d  nfo.wctrlFlags m
14530 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ember..*/.#defin
14540 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
14550 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20  NORMAL   0x0000 
14560 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66  /* No-op */.#def
14570 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
14580 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30  Y_MIN      0x000
14590 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  1 /* ORDER BY pr
145a0 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e  ocessing for min
145b0 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
145c0 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
145d0 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32  _MAX      0x0002
145e0 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
145f0 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28  cessing for max(
14600 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
14610 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
14620 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20  DESIRED  0x0004 
14630 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e  /* Want to do on
14640 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45  e-pass UPDATE/DE
14650 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
14660 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
14670 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a  _OK    0x0008 /*
14680 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
14690 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
146a0 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
146b0 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c  ERE_OMIT_OPEN_CL
146c0 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54  OSE  0x0010 /* T
146d0 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65  able cursors are
146e0 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f   already open */
146f0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46  .#define WHERE_F
14700 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20  ORCE_TABLE      
14710 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x0020 /* Do not
14720 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e   use an index-on
14730 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65  ly search */.#de
14740 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41  fine WHERE_ONETA
14750 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30  BLE_ONLY    0x00
14760 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20  40 /* Only code 
14770 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e  the 1st table in
14780 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65   pTabList */.#de
14790 66 69 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f  fine WHERE_AND_O
147a0 4e 4c 59 20 20 20 20 20 20 20 20 20 30 78 30 30  NLY         0x00
147b0 38 30 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20  80 /* Don't use 
147c0 69 6e 64 69 63 65 73 20 66 6f 72 20 4f 52 20 74  indices for OR t
147d0 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  erms */.#define 
147e0 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
147f0 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a         0x0100 /*
14800 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
14810 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
14820 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14830 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
14840 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65   0x0200 /* pOrde
14850 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
14860 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
14870 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
14880 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
14890 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20    0x0400 /* All 
148a0 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
148b0 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 0a  be distinct */..
148c0 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  /* Allowed retur
148d0 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
148e0 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
148f0 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  inct().*/.#defin
14900 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
14910 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a  _NOOP      0  /*
14920 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
14930 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64  d not used */.#d
14940 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
14950 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31  INCT_UNIQUE    1
14960 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74    /* No duplicat
14970 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  es */.#define WH
14980 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44  ERE_DISTINCT_ORD
14990 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c  ERED   2  /* All
149a0 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   duplicates are 
149b0 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66  adjacent */.#def
149c0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
149d0 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20  CT_UNORDERED 3  
149e0 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72  /* Duplicates ar
149f0 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a  e scattered */..
14a00 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74  /*.** A NameCont
14a10 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ext defines a co
14a20 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74  ntext in which t
14a30 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20  o resolve table 
14a40 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61  and column.** na
14a50 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78  mes.  The contex
14a60 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
14a70 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28  list of tables (
14a80 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69  the pSrcList) fi
14a90 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73  eld and.** a lis
14aa0 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65  t of named expre
14ab0 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20  ssion (pEList). 
14ac0 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65   The named expre
14ad0 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a  ssion list may.*
14ae0 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20  * be NULL.  The 
14af0 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73  pSrc corresponds
14b00 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   to the FROM cla
14b10 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
14b20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62  or.** to the tab
14b30 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  le being operate
14b40 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20  d on by INSERT, 
14b50 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54  UPDATE, or DELET
14b60 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73  E.  The.** pELis
14b70 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
14b80 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
14b90 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20  of a SELECT and 
14ba0 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f  is NULL for.** o
14bb0 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e  ther statements.
14bc0 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  .**.** NameConte
14bd0 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65  xts can be neste
14be0 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69  d.  When resolvi
14bf0 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e  ng names, the in
14c00 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e  ner-most .** con
14c10 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
14c20 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
14c30 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
14c40 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
14c50 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
14c60 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
14c70 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
14c80 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
14c90 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
14ca0 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
14cb0 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
14cc0 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
14cd0 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
14ce0 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
14cf0 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
14d00 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
14d10 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
14d20 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
14d30 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
14d40 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
14d50 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68  ted. .**.** Each
14d60 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61   subquery gets a
14d70 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74   new NameContext
14d80 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65  .  The pNext fie
14d90 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
14da0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
14db0 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75  in the parent qu
14dc0 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70  ery.  Thus the p
14dd0 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69  rocess of scanni
14de0 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  ng the.** NameCo
14df0 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65  ntext list corre
14e00 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68  sponds to search
14e10 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63  ing through succ
14e20 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a  essively outer.*
14e30 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f  * subqueries loo
14e40 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68  king for a match
14e50 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65  ..*/.struct Name
14e60 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73  Context {.  Pars
14e70 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
14e80 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a   /* The parser *
14e90 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
14ea0 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20  cList;   /* One 
14eb0 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75  or more tables u
14ec0 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e  sed to resolve n
14ed0 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ames */.  ExprLi
14ee0 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f  st *pEList;    /
14ef0 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20  * Optional list 
14f00 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f  of result-set co
14f10 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e  lumns */.  AggIn
14f20 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
14f30 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
14f40 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20  bout aggregates 
14f50 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f  at this level */
14f60 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a  .  NameContext *
14f70 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
14f80 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65  outer name conte
14f90 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75  xt.  NULL for ou
14fa0 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74  termost */.  int
14fb0 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
14fc0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
14fd0 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79  ames resolved by
14fe0 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f   this context */
14ff0 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
15000 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15010 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f  r of errors enco
15020 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65  untered while re
15030 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f  solving names */
15040 0a 20 20 75 38 20 6e 63 46 6c 61 67 73 3b 20 20  .  u8 ncFlags;  
15050 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20          /* Zero 
15060 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61  or more NC_* fla
15070 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  gs defined below
15080 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
15090 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
150a0 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74   the NameContext
150b0 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e  , ncFlags field.
150c0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41  .*/.#define NC_A
150d0 6c 6c 6f 77 41 67 67 20 20 30 78 30 31 20 20 20  llowAgg  0x01   
150e0 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
150f0 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f  nctions are allo
15100 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66  wed here */.#def
15110 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20  ine NC_HasAgg   
15120 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 6e 65 20   0x02    /* One 
15130 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
15140 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e  e functions seen
15150 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
15160 73 43 68 65 63 6b 20 20 20 30 78 30 34 20 20 20  sCheck   0x04   
15170 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
15180 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61  lving names in a
15190 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
151a0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  t */.#define NC_
151b0 49 6e 41 67 67 46 75 6e 63 20 30 78 30 38 20 20  InAggFunc 0x08  
151c0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61    /* True if ana
151d0 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  lyzing arguments
151e0 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20   to an agg func 
151f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61  */.#define NC_Pa
15200 72 74 49 64 78 20 20 20 30 78 31 30 20 20 20 20  rtIdx   0x10    
15210 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
15220 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69  ving a partial i
15230 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 0a 2f  ndex WHERE */../
15240 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
15250 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
15260 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
15270 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61  ains all informa
15280 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74  tion.** needed t
15290 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20  o generate code 
152a0 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c  for a single SEL
152b0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
152c0 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73  *.** nLimit is s
152d0 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72  et to -1 if ther
152e0 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  e is no LIMIT cl
152f0 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69  ause.  nOffset i
15300 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49  s set to 0..** I
15310 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d  f there is a LIM
15320 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70  IT clause, the p
15330 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69  arser sets nLimi
15340 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
15350 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61  f the.** limit a
15360 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68  nd nOffset to th
15370 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  e value of the o
15380 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74  ffset (or 0 if t
15390 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  here is not.** o
153a0 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74  ffset).  But lat
153b0 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e  er on, nLimit an
153c0 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65  d nOffset become
153d0 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
153e0 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tions.** in the 
153f0 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64  VDBE that record
15400 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f   the limit and o
15410 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a  ffset counters..
15420 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70  **.** addrOpenEp
15430 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  hm[] entries con
15440 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73  tain the address
15450 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   of OP_OpenEphem
15460 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  eral opcodes..**
15470 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73   These addresses
15480 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20   must be stored 
15490 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67  so that we can g
154a0 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20  o back and fill 
154b0 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59  in.** the P4_KEY
154c0 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61  INFO and P2 para
154d0 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e  meters later.  N
154e0 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e  either the KeyIn
154f0 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75  fo nor.** the nu
15500 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
15510 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d  in P2 can be com
15520 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d  puted at the sam
15530 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65  e time.** as the
15540 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73   OP_OpenEphm ins
15550 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65  truction is code
15560 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a  d because not.**
15570 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74   enough informat
15580 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f  ion about the co
15590 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20  mpound query is 
155a0 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f  known at that po
155b0 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49  int..** The KeyI
155c0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
155d0 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20  Tran[0] and [1] 
155e0 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
155f0 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20  ng sequences.** 
15600 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  for the result s
15610 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  et.  The KeyInfo
15620 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68   for addrOpenEph
15630 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f  m[2] contains co
15640 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65  llating.** seque
15650 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44  nces for the ORD
15660 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f  ER BY clause..*/
15670 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b  .struct Select {
15680 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
15690 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  ist;      /* The
156a0 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72   fields of the r
156b0 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70  esult */.  u8 op
156c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
156d0 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f    /* One of: TK_
156e0 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f  UNION TK_ALL TK_
156f0 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43  INTERSECT TK_EXC
15700 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c  EPT */.  u16 sel
15710 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
15720 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20  /* Various SF_* 
15730 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
15740 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b  iLimit, iOffset;
15750 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
15760 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c  isters holding L
15770 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f  IMIT & OFFSET co
15780 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20  unters */.  int 
15790 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b  addrOpenEphm[3];
157a0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
157b0 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
157c0 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
157d0 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65  t */.  u64 nSele
157e0 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a  ctRow;        /*
157f0 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
15800 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
15810 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
15820 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
15830 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
15840 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
15850 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
15860 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
15870 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
15880 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
15890 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
158a0 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
158b0 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
158c0 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
158d0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
158e0 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
158f0 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
15900 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
15910 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
15920 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
15930 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
15940 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
15950 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
15960 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
15970 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
15980 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
15990 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 53 65 6c 65  mpound */.  Sele
159a0 63 74 20 2a 70 52 69 67 68 74 6d 6f 73 74 3b 20  ct *pRightmost; 
159b0 20 20 20 2f 2a 20 52 69 67 68 74 2d 6d 6f 73 74     /* Right-most
159c0 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d   select in a com
159d0 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61  pound select sta
159e0 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72  tement */.  Expr
159f0 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
15a00 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
15a10 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
15a20 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
15a30 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b    Expr *pOffset;
15a40 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53           /* OFFS
15a50 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  ET expression. N
15a60 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
15a70 65 64 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ed. */.};../*.**
15a80 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
15a90 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c  for Select.selFl
15aa0 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70  ags.  The "SF" p
15ab0 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72  refix stands for
15ac0 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67  .** "Select Flag
15ad0 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  "..*/.#define SF
15ae0 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20  _Distinct       
15af0 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70   0x0001  /* Outp
15b00 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53  ut should be DIS
15b10 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  TINCT */.#define
15b20 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20   SF_Resolved    
15b30 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49      0x0002  /* I
15b40 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20  dentifiers have 
15b50 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f  been resolved */
15b60 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72  .#define SF_Aggr
15b70 65 67 61 74 65 20 20 20 20 20 20 20 30 78 30 30  egate       0x00
15b80 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  04  /* Contains 
15b90 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
15ba0 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ons */.#define S
15bb0 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20  F_UsesEphemeral 
15bc0 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65    0x0008  /* Use
15bd0 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65  s the OpenEpheme
15be0 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64  ral opcode */.#d
15bf0 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65  efine SF_Expande
15c00 64 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20  d        0x0010 
15c10 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63   /* sqlite3Selec
15c20 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64  tExpand() called
15c30 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66   on this */.#def
15c40 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e  ine SF_HasTypeIn
15c50 66 6f 20 20 20 20 20 30 78 30 30 32 30 20 20 2f  fo     0x0020  /
15c60 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65  * FROM subquerie
15c70 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74  s have Table met
15c80 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65  adata */.#define
15c90 20 53 46 5f 55 73 65 53 6f 72 74 65 72 20 20 20   SF_UseSorter   
15ca0 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 53      0x0040  /* S
15cb0 6f 72 74 20 75 73 69 6e 67 20 61 20 73 6f 72 74  ort using a sort
15cc0 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  er */.#define SF
15cd0 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
15ce0 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74   0x0080  /* Synt
15cf0 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
15d00 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  UES clause */.#d
15d10 65 66 69 6e 65 20 53 46 5f 4d 61 74 65 72 69 61  efine SF_Materia
15d20 6c 69 7a 65 20 20 20 20 20 30 78 30 31 30 30 20  lize     0x0100 
15d30 20 2f 2a 20 46 6f 72 63 65 20 6d 61 74 65 72 69   /* Force materi
15d40 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 76 69 65  alization of vie
15d50 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ws */.#define SF
15d60 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20  _NestedFrom     
15d70 20 30 78 30 32 30 30 20 20 2f 2a 20 50 61 72 74   0x0200  /* Part
15d80 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69   of a parenthesi
15d90 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  zed FROM clause 
15da0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61  */.#define SF_Ma
15db0 79 62 65 43 6f 6e 76 65 72 74 20 20 20 20 30 78  ybeConvert    0x
15dc0 30 34 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f  0400  /* Need co
15dd0 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c  nvertCompoundSel
15de0 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20  ectToSubquery() 
15df0 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72  */.../*.** The r
15e00 65 73 75 6c 74 73 20 6f 66 20 61 20 73 65 6c 65  esults of a sele
15e10 63 74 20 63 61 6e 20 62 65 20 64 69 73 74 72 69  ct can be distri
15e20 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c  buted in several
15e30 20 77 61 79 73 2e 20 20 54 68 65 0a 2a 2a 20 22   ways.  The.** "
15e40 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e  SRT" prefix mean
15e50 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74  s "SELECT Result
15e60 20 54 79 70 65 22 2e 0a 2a 2f 0a 23 64 65 66 69   Type"..*/.#defi
15e70 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
15e80 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
15e90 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
15ea0 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
15eb0 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
15ec0 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
15ed0 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
15ee0 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
15ef0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
15f00 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
15f10 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
15f20 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
15f30 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
15f40 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
15f50 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
15f60 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
15f70 77 68 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65  where */../* The
15f80 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
15f90 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20   is ignored for 
15fa0 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  all of the above
15fb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f   */.#define Igno
15fc0 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20  rableOrderby(X) 
15fd0 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54  ((X->eDest)<=SRT
15fe0 5f 44 69 73 63 61 72 64 29 0a 0a 23 64 65 66 69  _Discard)..#defi
15ff0 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20  ne SRT_Output   
16000 20 20 20 20 35 20 20 2f 2a 20 4f 75 74 70 75 74      5  /* Output
16010 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73   each row of res
16020 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
16030 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 20  RT_Mem          
16040 36 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  6  /* Store resu
16050 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63  lt in a memory c
16060 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ell */.#define S
16070 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 20  RT_Set          
16080 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  7  /* Store resu
16090 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61  lts as keys in a
160a0 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
160b0 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20  ne SRT_Table    
160c0 20 20 20 20 38 20 20 2f 2a 20 53 74 6f 72 65 20      8  /* Store 
160d0 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
160e0 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
160f0 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
16100 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
16110 20 20 20 39 20 20 2f 2a 20 43 72 65 61 74 65 20     9  /* Create 
16120 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
16130 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
16140 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
16150 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
16160 20 20 31 30 20 20 2f 2a 20 47 65 6e 65 72 61 74    10  /* Generat
16170 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
16180 66 20 72 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a  f result */../*.
16190 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
161a0 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65  f this object de
161b0 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f  scribes where to
161c0 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75   put of the resu
161d0 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45  lts of.** a SELE
161e0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  CT statement..*/
161f0 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65  .struct SelectDe
16200 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b  st {.  u8 eDest;
16210 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
16220 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  to dispose of th
16230 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f  e results.  On o
16240 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a  f SRT_* above. *
16250 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74  /.  char affSdst
16260 3b 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74  ;     /* Affinit
16270 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73  y used when eDes
16280 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20  t==SRT_Set */.  
16290 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20  int iSDParm;    
162a0 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72    /* A parameter
162b0 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65   used by the eDe
162c0 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68  st disposal meth
162d0 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73  od */.  int iSds
162e0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73  t;        /* Bas
162f0 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65  e register where
16300 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69   results are wri
16310 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  tten */.  int nS
16320 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  dst;        /* N
16330 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
16340 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a  rs allocated */.
16350 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67  };../*.** During
16360 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
16370 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74   of statements t
16380 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69  hat do inserts i
16390 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  nto AUTOINCREMEN
163a0 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68  T .** tables, th
163b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f  e following info
163c0 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63  rmation is attac
163d0 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65  hed to the Table
163e0 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20  .u.autoInc.p.** 
163f0 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20  pointer of each 
16400 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61  autoincrement ta
16410 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f  ble to record so
16420 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74  me side informat
16430 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ion that.** the 
16440 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e  code generator n
16450 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74  eeds.  We have t
16460 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65  o keep per-table
16470 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a   autoincrement.*
16480 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  * information in
16490 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72   case inserts ar
164a0 65 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72  e down within tr
164b0 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72  iggers.  Trigger
164c0 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d  s do not.** norm
164d0 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20  ally coordinate 
164e0 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73  their activities
164f0 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64  , but we do need
16500 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74   to coordinate t
16510 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e  he.** loading an
16520 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f  d saving of auto
16530 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d  increment inform
16540 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
16550 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20   AutoincInfo {. 
16560 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e   AutoincInfo *pN
16570 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69  ext;   /* Next i
16580 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c  nfo block in a l
16590 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20  ist of them all 
165a0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
165b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
165c0 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c  ble this info bl
165d0 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f  ock refers to */
165e0 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
165f0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
16600 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  x in sqlite3.aDb
16610 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  [] of database h
16620 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20  olding pTab */. 
16630 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20   int regCtr;    
16640 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
16650 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
16660 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e  g the rowid coun
16670 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ter */.};../*.**
16680 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c   Size of the col
16690 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66  umn cache.*/.#if
166a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  ndef SQLITE_N_CO
166b0 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20  LCACHE.# define 
166c0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
166d0 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E 10.#endif../*.
166e0 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20  ** At least one 
166f0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
16700 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
16710 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ure is created f
16720 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67  or each .** trig
16730 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20  ger that may be 
16740 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73  fired while pars
16750 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55  ing an INSERT, U
16760 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a  PDATE or DELETE.
16770 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c  ** statement. Al
16780 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61  l such objects a
16790 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
167a0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
167b0 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e  ded at.** Parse.
167c0 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20  pTriggerPrg and 
167d0 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61  deleted once sta
167e0 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69  tement compilati
167f0 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63  on has been.** c
16800 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  ompleted..**.** 
16810 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72  A Vdbe sub-progr
16820 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  am that implemen
16830 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20  ts the body and 
16840 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
16850 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65  rigger.** Trigge
16860 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61  rPrg.pTrigger, a
16870 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c  ssuming a defaul
16880 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  t ON CONFLICT cl
16890 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67  ause of.** Trigg
168a0 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73  erPrg.orconf, is
168b0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54   stored in the T
168c0 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72  riggerPrg.pProgr
168d0 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20  am variable..** 
168e0 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67  The Parse.pTrigg
168f0 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72  erPrg list never
16900 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e   contains two en
16910 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73  tries with the s
16920 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f  ame.** values fo
16930 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20  r both pTrigger 
16940 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a  and orconf..**.*
16950 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67  * The TriggerPrg
16960 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72  .aColmask[0] var
16970 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
16980 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  a mask of old.* 
16990 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73  columns.** acces
169a0 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30  sed (or set to 0
169b0 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69   for triggers fi
169c0 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  red as a result 
169d0 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74  of INSERT .** st
169e0 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c  atements). Simil
169f0 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65  arly, the Trigge
16a00 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d  rPrg.aColmask[1]
16a10 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
16a20 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66   to.** a mask of
16a30 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75   new.* columns u
16a40 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
16a50 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  am..*/.struct Tr
16a60 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69  iggerPrg {.  Tri
16a70 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
16a80 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
16a90 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73  this program was
16aa0 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20   coded from */. 
16ab0 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65   TriggerPrg *pNe
16ac0 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
16ad0 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e   entry in Parse.
16ae0 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
16af0 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
16b00 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
16b10 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65   Program impleme
16b20 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f  nting pTrigger/o
16b30 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f  rconf */.  int o
16b40 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
16b50 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
16b60 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
16b70 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61   */.  u32 aColma
16b80 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  sk[2];        /*
16b90 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c   Masks of old.*,
16ba0 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61   new.* columns a
16bb0 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  ccessed */.};../
16bc0 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b  *.** The yDbMask
16bd0 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68   datatype for th
16be0 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c  e bitmask of all
16bf0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
16c00 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ses..*/.#if SQLI
16c10 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
16c20 33 30 0a 20 20 74 79 70 65 64 65 66 20 73 71 6c  30.  typedef sql
16c30 69 74 65 33 5f 75 69 6e 74 36 34 20 79 44 62 4d  ite3_uint64 yDbM
16c40 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ask;.#else.  typ
16c50 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
16c60 74 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6e 64 69  t yDbMask;.#endi
16c70 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20  f../*.** An SQL 
16c80 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  parser context. 
16c90 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20   A copy of this 
16ca0 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
16cb0 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  sed through.** t
16cc0 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f  he parser and do
16cd0 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20  wn into all the 
16ce0 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f  parser action ro
16cf0 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
16d00 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e  o.** carry aroun
16d10 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  d information th
16d20 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20  at is global to 
16d30 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65  the entire parse
16d40 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75  ..**.** The stru
16d50 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64  cture is divided
16d60 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e   into two parts.
16d70 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65    When the parse
16d80 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65  r and code.** ge
16d90 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d  nerate call them
16da0 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65  selves recursive
16db0 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61  ly, the first pa
16dc0 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74  rt of the struct
16dd0 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61  ure.** is consta
16de0 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e  nt but the secon
16df0 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20  d part is reset 
16e00 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
16e10 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65   and end of.** e
16e20 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a  ach recursion..*
16e30 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c  *.** The nTableL
16e40 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f  ock and aTableLo
16e50 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ck variables are
16e60 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68   only used if th
16e70 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a  e shared-cache .
16e80 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  ** feature is en
16e90 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65  abled (if sqlite
16ea0 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65  3Tsd()->useShare
16eb0 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20  dData is true). 
16ec0 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64  They are.** used
16ed0 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65   to store the se
16ee0 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73  t of table-locks
16ef0 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
16f00 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
16f10 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75  .** compiled. Fu
16f20 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61  nction sqlite3Ta
16f30 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65  bleLock() is use
16f40 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73  d to add entries
16f50 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e   to the.** list.
16f60 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65  .*/.struct Parse
16f70 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
16f80 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
16f90 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73   main database s
16fa0 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68  tructure */.  ch
16fb0 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
16fc0 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d     /* An error m
16fd0 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65  essage */.  Vdbe
16fe0 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
16ff0 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f   /* An engine fo
17000 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61  r executing data
17010 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f  base bytecode */
17020 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
17030 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
17040 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63  n code from exec
17050 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f  ution */.  u8 co
17060 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20  lNamesSet;      
17070 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50  /* TRUE after OP
17080 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20  _ColumnName has 
17090 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70  been issued to p
170a0 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65  Vdbe */.  u8 che
170b0 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f  ckSchema;      /
170c0 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20  * Causes schema 
170d0 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74  cookie check aft
170e0 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20  er an error */. 
170f0 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20   u8 nested;     
17100 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17110 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
17120 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f  to the parser/co
17130 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
17140 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20    u8 nTempReg;  
17150 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17160 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65   of temporary re
17170 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70  gisters in aTemp
17180 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54  Reg[] */.  u8 nT
17190 65 6d 70 49 6e 55 73 65 3b 20 20 20 20 20 20 20  empInUse;       
171a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 54 65  /* Number of aTe
171b0 6d 70 52 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c  mpReg[] currentl
171c0 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f  y checked out */
171d0 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b  .  u8 nColCache;
171e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
171f0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
17200 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20  aColCache[] */. 
17210 20 75 38 20 69 43 6f 6c 43 61 63 68 65 3b 20 20   u8 iColCache;  
17220 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
17230 74 72 79 20 69 6e 20 61 43 6f 6c 43 61 63 68 65  try in aColCache
17240 5b 5d 20 74 6f 20 72 65 70 6c 61 63 65 20 2a 2f  [] to replace */
17250 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69  .  u8 isMultiWri
17260 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  te;     /* True 
17270 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
17280 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d   modify/insert m
17290 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
172a0 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20    u8 mayAbort;  
172b0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
172c0 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
172d0 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
172e0 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xception */.  u8
172f0 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20   hasCompound;   
17300 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e     /* Need to in
17310 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70  voke convertComp
17320 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
17330 75 65 72 79 28 29 20 2a 2f 0a 20 20 69 6e 74 20  uery() */.  int 
17340 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20  aTempReg[8];    
17350 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61   /* Holding area
17360 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72   for temporary r
17370 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e  egisters */.  in
17380 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t nRangeReg;    
17390 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
173a0 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  e temporary regi
173b0 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
173c0 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20  int iRangeReg;  
173d0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
173e0 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72  gister in tempor
173f0 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
17400 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ck */.  int nErr
17410 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17420 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
17430 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
17440 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
17450 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65  /* Number of pre
17460 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65  viously allocate
17470 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a  d VDBE cursors *
17480 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
17490 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
174a0 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
174b0 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ls used so far *
174c0 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20  /.  int nSet;   
174d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
174e0 65 72 20 6f 66 20 73 65 74 73 20 75 73 65 64 20  er of sets used 
174f0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
17500 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20  nOnce;          
17510 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50   /* Number of OP
17520 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f  _Once instructio
17530 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ns so far */.  i
17540 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20  nt ckBase;      
17550 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
17560 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72  ster of data dur
17570 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  ing check constr
17580 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69  aints */.  int i
17590 50 61 72 74 49 64 78 54 61 62 3b 20 20 20 20 20  PartIdxTab;     
175a0 2f 2a 20 54 61 62 6c 65 20 63 6f 72 72 65 73 70  /* Table corresp
175b0 6f 6e 64 69 6e 67 20 74 6f 20 61 20 70 61 72 74  onding to a part
175c0 69 61 6c 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ial index */.  i
175d0 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20  nt iCacheLevel; 
175e0 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20      /* ColCache 
175f0 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43  valid when aColC
17600 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69  ache[].iLevel<=i
17610 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20  CacheLevel */.  
17620 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20  int iCacheCnt;  
17630 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
17640 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
17650 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75   aColCache[].lru
17660 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 73 74 72   values */.  str
17670 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
17680 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
17690 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
176a0 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
176b0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
176c0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
176d0 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
176e0 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
176f0 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
17700 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
17710 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
17720 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
17730 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
17740 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
17750 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
17760 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
17770 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
17780 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
17790 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
177a0 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
177b0 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
177c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
177d0 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
177e0 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
177f0 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
17800 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
17810 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
17820 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
17830 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
17840 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 79 44  he entry */.  yD
17850 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b  bMask writeMask;
17860 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72     /* Start a wr
17870 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
17880 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73  on these databas
17890 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  es */.  yDbMask 
178a0 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20  cookieMask;  /* 
178b0 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d  Bitmask of schem
178c0 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62  a verified datab
178d0 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f  ases */.  int co
178e0 6f 6b 69 65 47 6f 74 6f 3b 20 20 20 20 20 20 2f  okieGoto;      /
178f0 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  * Address of OP_
17900 47 6f 74 6f 20 74 6f 20 63 6f 6f 6b 69 65 20 76  Goto to cookie v
17910 65 72 69 66 69 65 72 20 73 75 62 72 6f 75 74 69  erifier subrouti
17920 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b  ne */.  int cook
17930 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d  ieValue[SQLITE_M
17940 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20  AX_ATTACHED+2]; 
17950 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f   /* Values of co
17960 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20  okies to verify 
17970 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69  */.  int regRowi
17980 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  d;        /* Reg
17990 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
179a0 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41  wid of CREATE TA
179b0 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69  BLE entry */.  i
179c0 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20  nt regRoot;     
179d0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
179e0 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67  holding root pag
179f0 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77  e number for new
17a00 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e   objects */.  in
17a10 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20  t nMaxArg;      
17a20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70     /* Max args p
17a30 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75  assed to user fu
17a40 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72  nction by sub-pr
17a50 6f 67 72 61 6d 20 2a 2f 0a 20 20 54 6f 6b 65 6e  ogram */.  Token
17a60 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
17a70 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
17a80 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
17a90 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
17aa0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
17ab0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
17ac0 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c  ACHE.  int nTabl
17ad0 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a  eLock;        /*
17ae0 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73   Number of locks
17af0 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a   in aTableLock *
17b00 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61  /.  TableLock *a
17b10 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65  TableLock; /* Re
17b20 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63  quired table loc
17b30 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61  ks for shared-ca
17b40 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64  che mode */.#end
17b50 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f  if.  AutoincInfo
17b60 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66   *pAinc;  /* Inf
17b70 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41  ormation about A
17b80 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75  UTOINCREMENT cou
17b90 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  nters */..  /* I
17ba0 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
17bb0 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69  while coding tri
17bc0 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a  gger programs. *
17bd0 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c  /.  Parse *pTopl
17be0 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73  evel;    /* Pars
17bf0 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
17c00 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72  main program (or
17c10 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c   NULL) */.  Tabl
17c20 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20  e *pTriggerTab; 
17c30 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65   /* Table trigge
17c40 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64  rs are being cod
17c50 65 64 20 66 6f 72 20 2a 2f 0a 20 20 75 33 32 20  ed for */.  u32 
17c60 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  nQueryLoop;     
17c70 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f   /* Est number o
17c80 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
17c90 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32  a query (10*log2
17ca0 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  (N)) */.  u32 ol
17cb0 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
17cc0 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
17cd0 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
17ce0 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
17cf0 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
17d00 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
17d10 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
17d20 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
17d30 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
17d40 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
17d50 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
17d60 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
17d70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
17d80 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
17d90 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
17da0 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
17db0 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
17dc0 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
17dd0 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
17de0 2a 2f 0a 0a 20 20 2f 2a 20 41 62 6f 76 65 20 69  */..  /* Above i
17df0 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65  s constant betwe
17e00 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20  en recursions.  
17e10 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62  Below is reset b
17e20 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a  efore and after.
17e30 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73    ** each recurs
17e40 69 6f 6e 20 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56  ion */..  int nV
17e50 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
17e60 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17e70 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73   '?' variables s
17e80 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73  een in the SQL s
17e90 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
17ea0 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  zVar;           
17eb0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17ec0 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74  f available slot
17ed0 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a  s in azVar[] */.
17ee0 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20    u8 explain;   
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
17f00 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c 41  rue if the EXPLA
17f10 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64  IN flag is found
17f20 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f   on the query */
17f30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
17f40 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
17f50 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56 74  E.  u8 declareVt
17f60 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
17f70 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65 20   True if inside 
17f80 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
17f90 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20  vtab() */.  int 
17fa0 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  nVtabLock;      
17fb0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17fc0 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  of virtual table
17fd0 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e  s to lock */.#en
17fe0 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73  dif.  int nAlias
17ff0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18000 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69  /* Number of ali
18010 61 73 65 64 20 72 65 73 75 6c 74 20 73 65 74 20  ased result set 
18020 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74  columns */.  int
18030 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
18040 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
18050 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74  sion tree height
18060 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d   of current sub-
18070 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65  select */.#ifnde
18080 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
18090 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c  PLAIN.  int iSel
180a0 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 20 20  ectId;          
180b0 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65    /* ID of curre
180c0 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58  nt select for EX
180d0 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
180e0 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63    int iNextSelec
180f0 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  tId;        /* N
18100 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
18110 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c  lect ID for EXPL
18120 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65  AIN output */.#e
18130 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a  ndif.  char **az
18140 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
18150 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20   /* Pointers to 
18160 6e 61 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74  names of paramet
18170 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  ers */.  Vdbe *p
18180 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20  Reprepare;      
18190 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72     /* VM being r
181a0 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74  eprepared (sqlit
181b0 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a  e3Reprepare()) *
181c0 2f 0a 20 20 69 6e 74 20 2a 61 41 6c 69 61 73 3b  /.  int *aAlias;
181d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
181e0 20 52 65 67 69 73 74 65 72 20 75 73 65 64 20 74   Register used t
181f0 6f 20 68 6f 6c 64 20 61 6c 69 61 73 65 64 20 72  o hold aliased r
18200 65 73 75 6c 74 20 2a 2f 0a 20 20 63 6f 6e 73 74  esult */.  const
18210 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20   char *zTail;   
18220 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20       /* All SQL 
18230 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61  text past the la
18240 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72  st semicolon par
18250 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  sed */.  Table *
18260 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20  pNewTable;      
18270 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65     /* A table be
18280 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20  ing constructed 
18290 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  by CREATE TABLE 
182a0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
182b0 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f  ewTrigger;     /
182c0 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20  * Trigger under 
182d0 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43  construct by a C
182e0 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f  REATE TRIGGER */
182f0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
18300 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20  AuthContext; /* 
18310 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65  The 6th paramete
18320 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63  r to db->xAuth c
18330 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f  allbacks */.  To
18340 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20  ken sNameToken; 
18350 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
18360 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
18370 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
18380 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  name */.  Token 
18390 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20  sLastToken;     
183a0 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
183b0 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
183c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
183d0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
183e0 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18400 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
18410 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
18420 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
18430 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
18440 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
18450 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
18460 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
18470 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
18480 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
18490 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
184a0 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
184b0 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
184c0 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
184d0 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
184e0 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
184f0 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
18500 69 67 67 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  iggers */.};../*
18510 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
18520 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73  if currently ins
18530 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64  ide an sqlite3_d
18540 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61  eclare_vtab() ca
18550 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ll..*/.#ifdef SQ
18560 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
18570 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65  LTABLE.  #define
18580 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
18590 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
185a0 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
185b0 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c  AB (pParse->decl
185c0 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a  areVtab).#endif.
185d0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
185e0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
185f0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61  ing structure ca
18600 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e  n be declared on
18610 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65   a stack and use
18620 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65  d.** to save the
18630 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
18640 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61  ext value so tha
18650 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
18660 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73  ored later..*/.s
18670 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
18680 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  t {.  const char
18690 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
186a0 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50    /* Put saved P
186b0 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
186c0 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73  t here */.  Pars
186d0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
186e0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
186f0 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  arse structure *
18700 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66  /.};../*.** Bitf
18710 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50  ield flags for P
18720 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f  5 value in vario
18730 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23  us opcodes..*/.#
18740 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43  define OPFLAG_NC
18750 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31  HANGE       0x01
18760 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
18770 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65  date db->nChange
18780 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
18790 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20  AG_LASTROWID    
187a0 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20   0x02    /* Set 
187b0 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61  to update db->la
187c0 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  stRowid */.#defi
187d0 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  ne OPFLAG_ISUPDA
187e0 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20  TE      0x04    
187f0 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72  /* This OP_Inser
18800 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41  t is an sql UPDA
18810 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE */.#define OP
18820 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20  FLAG_APPEND     
18830 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68     0x08    /* Th
18840 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  is is likely to 
18850 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a  be an append */.
18860 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55  #define OPFLAG_U
18870 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31  SESEEKRESULT 0x1
18880 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61  0    /* Try to a
18890 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42  void a seek in B
188a0 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a  treeInsert() */.
188b0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 43  #define OPFLAG_C
188c0 4c 45 41 52 43 41 43 48 45 20 20 20 20 30 78 32  LEARCACHE    0x2
188d0 30 20 20 20 20 2f 2a 20 43 6c 65 61 72 20 70 73  0    /* Clear ps
188e0 65 75 64 6f 2d 74 61 62 6c 65 20 63 61 63 68 65  eudo-table cache
188f0 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20 2a 2f   in OP_Column */
18900 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
18910 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78  LENGTHARG     0x
18920 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  40    /* OP_Colu
18930 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
18940 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65   length() */.#de
18950 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45  fine OPFLAG_TYPE
18960 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20  OFARG     0x80  
18970 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
18980 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70  nly used for typ
18990 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  eof() */.#define
189a0 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
189b0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
189c0 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20   OP_Open** used 
189d0 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72  to open bulk cur
189e0 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  sor */.#define O
189f0 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20  PFLAG_P2ISREG   
18a00 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 50      0x02    /* P
18a10 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69  2 to OP_Open** i
18a20 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d  s a register num
18a30 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ber */.#define O
18a40 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20  PFLAG_PERMUTE   
18a50 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
18a60 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74  P_Compare: use t
18a70 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a  he permutation *
18a80 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72  /../*. * Each tr
18a90 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e  igger present in
18aa0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
18ab0 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61  hema is stored a
18ac0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
18ad0 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67  . * struct Trigg
18ae0 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74  er. . *. * Point
18af0 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73  ers to instances
18b00 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
18b10 65 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  er are stored in
18b20 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e   two ways.. * 1.
18b30 20 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73   In the "trigHas
18b40 68 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70  h" hash table (p
18b50 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74  art of the sqlit
18b60 65 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65  e3* that represe
18b70 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64  nts the . *    d
18b80 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20 61  atabase). This a
18b90 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73 74  llows Trigger st
18ba0 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20 72  ructures to be r
18bb0 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65  etrieved by name
18bc0 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67  .. * 2. All trig
18bd0 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20  gers associated 
18be0 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61  with a single ta
18bf0 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65  ble form a linke
18c00 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68  d list, using th
18c10 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65  e. *    pNext me
18c20 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20 54  mber of struct T
18c30 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65  rigger. A pointe
18c40 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  r to the first e
18c50 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a  lement of the. *
18c60 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20      linked list 
18c70 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68 65  is stored as the
18c80 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62   "pTrigger" memb
18c90 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69  er of the associ
18ca0 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63  ated. *    struc
18cb0 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54  t Table.. *. * T
18cc0 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
18cd0 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20  ember points to 
18ce0 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
18cf0 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69  t of a linked li
18d00 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67  st. * containing
18d10 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
18d20 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73  nts specified as
18d30 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
18d40 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74  gram.. */.struct
18d50 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61   Trigger {.  cha
18d60 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
18d70 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65       /* The name
18d80 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20   of the trigger 
18d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18da0 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72         */.  char
18db0 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20   *table;        
18dc0 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65      /* The table
18dd0 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63   or view to whic
18de0 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61 70  h the trigger ap
18df0 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70  plies */.  u8 op
18e00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18e10 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
18e20 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
18e30 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20  E, TK_INSERT    
18e40 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f       */.  u8 tr_
18e50 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  tm;             
18e60 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47    /* One of TRIG
18e70 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47  GER_BEFORE, TRIG
18e80 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45  GER_AFTER */.  E
18e90 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20  xpr *pWhen;     
18ea0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
18eb0 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  EN clause of the
18ec0 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79   expression (may
18ed0 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49   be NULL) */.  I
18ee0 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b  dList *pColumns;
18ef0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69         /* If thi
18f00 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f  s is an UPDATE O
18f10 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20  F <column-list> 
18f20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20  trigger,.       
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f40 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d        the <colum
18f50 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65  n-list> is store
18f60 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65  d here */.  Sche
18f70 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
18f80 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
18f90 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69  ntaining the tri
18fa0 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61  gger */.  Schema
18fb0 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20   *pTabSchema;   
18fc0 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
18fd0 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65  aining the table
18fe0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
18ff0 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a  p *step_list; /*
19000 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72   Link list of tr
19010 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74  igger program st
19020 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20 20  eps             
19030 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
19040 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
19050 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73 73  Next trigger ass
19060 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
19070 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   table */.};../*
19080 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69 73  .** A trigger is
19090 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52 45   either a BEFORE
190a0 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72 69   or an AFTER tri
190b0 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  gger.  The follo
190c0 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a  wing constants.*
190d0 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63  * determine whic
190e0 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  h. .**.** If the
190f0 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20  re are multiple 
19100 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69  triggers, you mi
19110 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f  ght of some BEFO
19120 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45  RE and some AFTE
19130 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61  R..** In that ca
19140 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e  ses, the constan
19150 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20  ts below can be 
19160 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a  ORed together..*
19170 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  /.#define TRIGGE
19180 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66  R_BEFORE  1.#def
19190 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45  ine TRIGGER_AFTE
191a0 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20  R   2../*. * An 
191b0 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75  instance of stru
191c0 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69  ct TriggerStep i
191d0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
191e0 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61  a single SQL sta
191f0 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69  tement. * that i
19200 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72  s a part of a tr
19210 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a  igger-program. .
19220 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20   *. * Instances 
19230 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
19240 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64  rStep are stored
19250 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e   in a singly lin
19260 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64  ked list (linked
19270 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70  . * using the "p
19280 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65  Next" member) re
19290 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20  ferenced by the 
192a0 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
192b0 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73  er of the . * as
192c0 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20  sociated struct 
192d0 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65  Trigger instance
192e0 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
192f0 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65  ent of the linke
19300 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65  d list is. * the
19310 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74   first step of t
19320 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72  he trigger-progr
19330 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22  am.. * . * The "
19340 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63  op" member indic
19350 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69  ates whether thi
19360 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c  s is a "DELETE",
19370 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41   "INSERT", "UPDA
19380 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43  TE" or. * "SELEC
19390 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  T" statement. Th
193a0 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68  e meanings of th
193b0 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20  e other members 
193c0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
193d0 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f   the . * value o
193e0 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77  f "op" as follow
193f0 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  s:. *. * (op == 
19400 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72  TK_INSERT). * or
19410 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65  conf    -> store
19420 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  s the ON CONFLIC
19430 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70  T algorithm. * p
19440 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74  Select   -> If t
19450 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
19460 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54   INTO ... SELECT
19470 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
19480 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
19490 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
194a0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
194b0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
194c0 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  nt. Otherwise NU
194d0 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20 20 20  LL.. * target   
194e0 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
194f0 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e  ing the quoted n
19500 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
19510 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e   to insert into.
19520 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
19530 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
19540 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56  NSERT INTO ... V
19550 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d  ALUES ... statem
19560 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
19570 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
19580 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20  tores values to 
19590 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68  be inserted. Oth
195a0 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
195b0 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20  pIdList   -> If 
195c0 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
195d0 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c  T INTO ... (<col
195e0 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55  umn-names>) VALU
195f0 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20  ES ... . *      
19600 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
19610 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f  t, then this sto
19620 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e  res the column-n
19630 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20  ames to be. *   
19640 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72             inser
19650 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20  ted into.. *. * 
19660 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45  (op == TK_DELETE
19670 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d  ). * target    -
19680 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e  > A token holdin
19690 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d  g the quoted nam
196a0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
196b0 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20  o delete from.. 
196c0 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
196d0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
196e0 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  of the DELETE st
196f0 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
19700 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
19720 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
19730 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50  . * (op == TK_UP
19740 44 41 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20  DATE). * target 
19750 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f     -> A token ho
19760 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64  lding the quoted
19770 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
19780 6c 65 20 74 6f 20 75 70 64 61 74 65 20 72 6f 77  le to update row
19790 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65 20  s of.. * pWhere 
197a0 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
197b0 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50  clause of the UP
197c0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
197d0 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
197e0 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
197f0 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
19800 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  LL.. * pExprList
19810 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68   -> A list of th
19820 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64  e columns to upd
19830 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72  ate and the expr
19840 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74  essions to updat
19850 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
19860 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73    them to. See s
19870 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64  qlite3Update() d
19880 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  ocumentation of 
19890 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20  "pChanges". *   
198a0 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d             argum
198b0 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72  ent.. * . */.str
198c0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
198d0 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
198e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
198f0 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
19900 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
19910 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f  RT, TK_SELECT */
19920 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20  .  u8 orconf;   
19930 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f          /* OE_Ro
19940 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20  llback etc. */. 
19950 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b   Trigger *pTrig;
19960 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69        /* The tri
19970 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73  gger that this s
19980 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66  tep is a part of
19990 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
199a0 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45  elect;     /* SE
199b0 4c 45 43 54 20 73 74 61 74 6d 65 6e 74 20 6f 72  LECT statment or
199c0 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49   RHS of INSERT I
199d0 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  NTO .. SELECT ..
199e0 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72  . */.  Token tar
199f0 67 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  get;        /* T
19a00 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20  arget table for 
19a10 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20  DELETE, UPDATE, 
19a20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72  INSERT */.  Expr
19a30 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20   *pWhere;       
19a40 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c   /* The WHERE cl
19a50 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20  ause for DELETE 
19a60 6f 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20  or UPDATE steps 
19a70 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
19a80 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54  ExprList; /* SET
19a90 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41   clause for UPDA
19aa0 54 45 2e 20 20 56 41 4c 55 45 53 20 63 6c 61 75  TE.  VALUES clau
19ab0 73 65 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f  se for INSERT */
19ac0 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
19ad0 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
19ae0 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
19af0 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  RT */.  TriggerS
19b00 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
19b10 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
19b20 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
19b30 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
19b40 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
19b50 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
19b60 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
19b70 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
19b80 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
19b90 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
19ba0 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
19bb0 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
19bc0 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
19bd0 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
19be0 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
19bf0 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
19c00 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
19c10 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74  explicit.  .*/.t
19c20 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
19c30 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73  Fixer DbFixer;.s
19c40 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a  truct DbFixer {.
19c50 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
19c60 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
19c70 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45  sing context.  E
19c80 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72  rror messages wr
19c90 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
19ca0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
19cb0 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73      /* Fix items
19cc0 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20   to this schema 
19cd0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
19ce0 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65  *zDb;    /* Make
19cf0 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74   sure all object
19d00 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  s are contained 
19d10 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65  in this database
19d20 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
19d30 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70   *zType;  /* Typ
19d40 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
19d50 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
19d60 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
19d70 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70    const Token *p
19d80 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66  Name; /* Name of
19d90 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
19da0 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
19db0 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a  messages */.};..
19dc0 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65  /*.** An objecte
19dd0 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75  d used to accumu
19de0 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66  late the text of
19df0 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20   a string where 
19e00 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63  we.** do not nec
19e10 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f  essarily know ho
19e20 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67  w big the string
19e30 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20   will be in the 
19e40 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  end..*/.struct S
19e50 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69  trAccum {.  sqli
19e60 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
19e70 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74   /* Optional dat
19e80 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73  abase for lookas
19e90 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c  ide.  Can be NUL
19ea0 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61  L */.  char *zBa
19eb0 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  se;         /* A
19ec0 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e   base allocation
19ed0 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c  .  Not from mall
19ee0 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  oc. */.  char *z
19ef0 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Text;         /*
19f00 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c   The string coll
19f10 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a  ected so far */.
19f20 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20    int  nChar;   
19f30 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
19f40 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73   of the string s
19f50 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20  o far */.  int  
19f60 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  nAlloc;         
19f70 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61  /* Amount of spa
19f80 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  ce allocated in 
19f90 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20  zText */.  int  
19fa0 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  mxAlloc;        
19fb0 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77  /* Maximum allow
19fc0 65 64 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  ed string length
19fd0 20 2a 2f 0a 20 20 75 38 20 20 20 6d 61 6c 6c 6f   */.  u8   mallo
19fe0 63 46 61 69 6c 65 64 3b 20 20 20 2f 2a 20 42 65  cFailed;   /* Be
19ff0 63 6f 6d 65 73 20 74 72 75 65 20 69 66 20 61 6e  comes true if an
1a000 79 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  y memory allocat
1a010 69 6f 6e 20 66 61 69 6c 73 20 2a 2f 0a 20 20 75  ion fails */.  u
1a020 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20  8   useMalloc;  
1a030 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20      /* 0: none, 
1a040 20 31 3a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c   1: sqlite3DbMal
1a050 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69 74 65 33  loc,  2: sqlite3
1a060 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20  _malloc */.  u8 
1a070 20 20 74 6f 6f 42 69 67 3b 20 20 20 20 20 20 20    tooBig;       
1a080 20 20 2f 2a 20 42 65 63 6f 6d 65 73 20 74 72 75    /* Becomes tru
1a090 65 20 69 66 20 73 74 72 69 6e 67 20 73 69 7a 65  e if string size
1a0a0 20 65 78 63 65 65 64 73 20 6c 69 6d 69 74 73 20   exceeds limits 
1a0b0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 70  */.};../*.** A p
1a0c0 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
1a0d0 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
1a0e0 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20   to communicate 
1a0f0 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66  information.** f
1a100 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20  rom sqlite3Init 
1a110 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65  and OP_ParseSche
1a120 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69  ma into the sqli
1a130 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e  te3InitCallback.
1a140 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
1a150 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ct {.  sqlite3 *
1a160 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
1a170 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67  e database being
1a180 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1a190 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73    char **pzErrMs
1a1a0 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d  g;    /* Error m
1a1b0 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65  essage stored he
1a1c0 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  re */.  int iDb;
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30              /* 0
1a1e0 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61   for main databa
1a1f0 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c  se.  1 for TEMP,
1a200 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65   2.. for ATTACHe
1a210 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  d */.  int rc;  
1a220 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1a230 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64  sult code stored
1a240 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44   here */.} InitD
1a250 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75  ata;../*.** Stru
1a260 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67  cture containing
1a270 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72   global configur
1a280 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74  ation data for t
1a290 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
1a2a0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74  y..**.** This st
1a2b0 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e  ructure also con
1a2c0 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65  tains some state
1a2d0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1a2e0 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  .struct Sqlite3C
1a2f0 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d  onfig {.  int bM
1a300 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20  emstat;         
1a310 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1a320 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65  rue to enable me
1a330 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20  mory status */. 
1a340 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b   int bCoreMutex;
1a350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a360 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
1a370 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69  able core mutexi
1a380 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c  ng */.  int bFul
1a390 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  lMutex;         
1a3a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1a3b0 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c  e to enable full
1a3c0 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
1a3d0 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20  nt bOpenUri;    
1a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3f0 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65   /* True to inte
1a400 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20  rpret filenames 
1a410 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74  as URIs */.  int
1a420 20 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20   bUseCis;       
1a430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a440 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69  * Use covering i
1a450 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d  ndices for full-
1a460 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d  scans */.  int m
1a470 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20  xStrlen;        
1a480 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a490 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c  Maximum string l
1a4a0 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 73  ength */.  int s
1a4b0 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a4d0 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
1a4e0 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
1a4f0 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
1a500 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1a510 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1a520 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
1a530 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69   count */.  sqli
1a540 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
1a550 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
1a560 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72   Low-level memor
1a570 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74  y allocation int
1a580 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
1a590 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
1a5a0 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a  s mutex;      /*
1a5b0 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78   Low-level mutex
1a5c0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1a5d0 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d  sqlite3_pcache_m
1a5e0 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b  ethods2 pcache2;
1a5f0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70    /* Low-level p
1a600 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66  age-cache interf
1a610 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
1a620 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
1a630 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
1a640 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65  ap storage space
1a650 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b   */.  int nHeap;
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a670 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1a680 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20  of pHeap[] */.  
1a690 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71  int mnReq, mxReq
1a6a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a6b0 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78    /* Min and max
1a6c0 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73   heap requests s
1a6d0 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  izes */.  sqlite
1a6e0 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20  3_int64 szMmap; 
1a6f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
1a700 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20  map() space per 
1a710 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73  open file */.  s
1a720 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
1a730 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
1a740 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75   /* Maximum valu
1a750 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a  e for szMmap */.
1a760 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68    void *pScratch
1a770 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a780 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d      /* Scratch m
1a790 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
1a7a0 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  zScratch;       
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a7c0 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72  Size of each scr
1a7d0 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20  atch buffer */. 
1a7e0 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20   int nScratch;  
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a800 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1a810 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20  scratch buffers 
1a820 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65  */.  void *pPage
1a830 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a840 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63         /* Page c
1a850 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  ache memory */. 
1a860 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20   int szPage;    
1a870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a880 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
1a890 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65  ch page in pPage
1a8a0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67  [] */.  int nPag
1a8b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1a8c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a8d0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
1a8e0 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
1a8f0 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20   mxParserStack; 
1a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a910 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20  * maximum depth 
1a920 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74  of the parser st
1a930 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61  ack */.  int sha
1a940 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b  redCacheEnabled;
1a950 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72             /* tr
1a960 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63  ue if shared-cac
1a970 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20  he mode enabled 
1a980 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76  */.  /* The abov
1a990 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69  e might be initi
1a9a0 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65  alized to non-ze
1a9b0 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ro.  The followi
1a9c0 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79  ng need to alway
1a9d0 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79  s.  ** initially
1a9e0 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65   be zero, howeve
1a9f0 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e  r. */.  int isIn
1aa00 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1aa10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1aa20 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69  e after initiali
1aa30 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73  zation has finis
1aa40 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50  hed */.  int inP
1aa50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20  rogress;        
1aa60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1aa70 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c  ue while initial
1aa80 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  ization in progr
1aa90 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  ess */.  int isM
1aaa0 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20  utexInit;       
1aab0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1aac0 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73  ue after mutexes
1aad0 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
1aae0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c   */.  int isMall
1aaf0 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  ocInit;         
1ab00 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1ab10 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
1ab20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1ab30 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69   int isPCacheIni
1ab40 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1ab50 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1ab60 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
1ab70 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 73 71 6c 69  alized */.  sqli
1ab80 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74  te3_mutex *pInit
1ab90 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a  Mutex;        /*
1aba0 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73   Mutex used by s
1abb0 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
1abc0 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  e() */.  int nRe
1abd0 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
1abe0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1abf0 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
1ac00 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
1ac10 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f   void (*xLog)(vo
1ac20 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
1ac30 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f  ar*); /* Functio
1ac40 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f  n for logging */
1ac50 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67  .  void *pLogArg
1ac60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ac70 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
1ac80 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f   argument to xLo
1ac90 67 28 29 20 2a 2f 0a 20 20 69 6e 74 20 62 4c 6f  g() */.  int bLo
1aca0 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20  caltimeFault;   
1acb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1acc0 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c  ue to fail local
1acd0 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  time() calls */.
1ace0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1acf0 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f  ABLE_SQLLOG.  vo
1ad00 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69  id(*xSqllog)(voi
1ad10 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
1ad20 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20  t char*, int);. 
1ad30 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72   void *pSqllogAr
1ad40 67 3b 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  g;.#endif.};../*
1ad50 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e  .** Context poin
1ad60 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20  ter passed down 
1ad70 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65  through the tree
1ad80 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  -walk..*/.struct
1ad90 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20   Walker {.  int 
1ada0 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29  (*xExprCallback)
1adb0 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
1adc0 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63  ;     /* Callbac
1add0 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  k for expression
1ade0 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65  s */.  int (*xSe
1adf0 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61  lectCallback)(Wa
1ae00 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20  lker*,Select*); 
1ae10 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
1ae20 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61   SELECTs */.  Pa
1ae30 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae50 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65          /* Parse
1ae60 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20  r context.  */. 
1ae70 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68   int walkerDepth
1ae80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ae90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1aea0 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72 69  mber of subqueri
1aeb0 65 73 20 2a 2f 0a 20 20 75 38 20 62 53 65 6c 65  es */.  u8 bSele
1aec0 63 74 44 65 70 74 68 46 69 72 73 74 3b 20 20 20  ctDepthFirst;   
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aee0 20 20 2f 2a 20 44 6f 20 73 75 62 71 75 65 72 69    /* Do subqueri
1aef0 65 73 20 66 69 72 73 74 20 2a 2f 0a 20 20 75 6e  es first */.  un
1af00 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20  ion {           
1af10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61          /* Extra
1af30 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61   data for callba
1af40 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f  ck */.    NameCo
1af50 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20  ntext *pNC;     
1af60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af70 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63       /* Naming c
1af80 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e  ontext */.    in
1af90 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
1afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afb0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
1afc0 67 65 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20  ger value */.   
1afd0 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
1afe0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1b000 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
1b010 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e    struct SrcCoun
1b020 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20  t *pSrcCount;   
1b030 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b040 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20  Counting column 
1b050 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
1b060 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77  } u;.};../* Forw
1b070 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ard declarations
1b080 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57   */.int sqlite3W
1b090 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  alkExpr(Walker*,
1b0a0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
1b0b0 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74  ite3WalkExprList
1b0c0 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69  (Walker*, ExprLi
1b0d0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1b0e0 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b  3WalkSelect(Walk
1b0f0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
1b100 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1b110 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a  lectExpr(Walker*
1b120 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
1b130 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1b140 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53  tFrom(Walker*, S
1b150 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20  elect*);../*.** 
1b160 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
1b170 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
1b180 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
1b190 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
1b1a0 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
1b1b0 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
1b1c0 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
1b1d0 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
1b1e0 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
1b1f0 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
1b200 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
1b210 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
1b220 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
1b230 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
1b240 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
1b250 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
1b260 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
1b270 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e  /../*.** Assumin
1b280 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20  g zIn points to 
1b290 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
1b2a0 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63  f a UTF-8 charac
1b2b0 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20  ter,.** advance 
1b2c0 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  zIn to point to 
1b2d0 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
1b2e0 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38  f the next UTF-8
1b2f0 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23   character..*/.#
1b300 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b  define SQLITE_SK
1b310 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20  IP_UTF8(zIn) {  
1b320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b330 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a        \.  if( (*
1b340 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29  (zIn++))>=0xc0 )
1b350 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1b370 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49  .    while( (*zI
1b380 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20  n & 0xc0)==0x80 
1b390 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20  ){ zIn++; }     
1b3a0 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20          \.  }   
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3e0 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   \.}../*.** The 
1b3f0 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61  SQLITE_*_BKPT ma
1b400 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74  cros are substit
1b410 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72  utes for the err
1b420 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a  or codes with.**
1b430 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62   the same name b
1b440 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f  ut without the _
1b450 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68  BKPT suffix.  Th
1b460 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b  ese macros invok
1b470 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68  e.** routines th
1b480 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69  at report the li
1b490 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69  ne-number on whi
1b4a0 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69  ch the error ori
1b4b0 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  ginated.** using
1b4c0 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20   sqlite3_log(). 
1b4d0 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c   The routines al
1b4e0 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e  so provide a con
1b4f0 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a  venient place.**
1b500 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67   to set a debugg
1b510 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a  er breakpoint..*
1b520 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  /.int sqlite3Cor
1b530 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
1b540 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
1b550 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
1b560 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
1b570 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
1b580 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
1b590 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
1b5a0 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
1b5b0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
1b5c0 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
1b5d0 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
1b5e0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
1b5f0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
1b600 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
1b610 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
1b620 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a  __LINE__).../*.*
1b630 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79  * FTS4 is really
1b640 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f   an extension fo
1b650 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65  r FTS3.  It is e
1b660 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  nabled using the
1b670 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
1b680 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42  E_FTS3 macro.  B
1b690 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66  ut to avoid conf
1b6a0 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 61 6c  usion we also al
1b6b0 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
1b6c0 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
1b6d0 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
1b6e0 20 61 6c 69 73 73 65 20 66 6f 72 20 53 51 4c 49   alisse for SQLI
1b6f0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a  TE_ENABLE_FTS3..
1b700 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
1b710 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1b720 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  4) && !defined(S
1b730 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1b740 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  3).# define SQLI
1b750 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23  TE_ENABLE_FTS3.#
1b760 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
1b770 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20   ctype.h header 
1b780 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f  is needed for no
1b790 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e  n-ASCII systems.
1b7a0 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20    It is also.** 
1b7b0 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77  needed by FTS3 w
1b7c0 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c  hen FTS3 is incl
1b7d0 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c  uded in the amal
1b7e0 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  gamation..*/.#if
1b7f0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1b800 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20  _ASCII) || \.   
1b810 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
1b820 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26  _ENABLE_FTS3) &&
1b830 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1b840 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23  AMALGAMATION)).#
1b850 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e   include <ctype.
1b860 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
1b870 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
1b880 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20  acros mimic the 
1b890 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79  standard library
1b8a0 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70   functions toupp
1b8b0 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65  er(),.** isspace
1b8c0 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69  (), isalnum(), i
1b8d0 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78  sdigit() and isx
1b8e0 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74  digit(), respect
1b8f0 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71  ively. The.** sq
1b900 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e  lite versions on
1b910 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49  ly work for ASCI
1b920 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65  I characters, re
1b930 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61  gardless of loca
1b940 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
1b950 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66  LITE_ASCII.# def
1b960 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
1b970 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71  er(x)  ((x)&~(sq
1b980 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1b990 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1b9a0 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e  ]&0x20)).# defin
1b9b0 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
1b9c0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
1b9d0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1b9e0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29   char)(x)]&0x01)
1b9f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1ba00 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73  3Isalnum(x)   (s
1ba10 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1ba20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1ba30 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e  )]&0x06).# defin
1ba40 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
1ba50 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
1ba60 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1ba70 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29   char)(x)]&0x02)
1ba80 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1ba90 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73  3Isdigit(x)   (s
1baa0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1bab0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1bac0 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e  )]&0x04).# defin
1bad0 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
1bae0 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74  t(x)  (sqlite3Ct
1baf0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1bb00 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29   char)(x)]&0x08)
1bb10 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1bb20 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73  3Tolower(x)   (s
1bb30 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
1bb40 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er[(unsigned cha
1bb50 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20  r)(x)]).#else.# 
1bb60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
1bb70 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70  upper(x)   toupp
1bb80 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
1bb90 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1bba0 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
1bbb0 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73  )   isspace((uns
1bbc0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1bbd0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1bbe0 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61  Isalnum(x)   isa
1bbf0 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63  lnum((unsigned c
1bc00 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1bc10 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
1bc20 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75  (x)   isalpha((u
1bc30 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1bc40 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1bc50 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69  e3Isdigit(x)   i
1bc60 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  sdigit((unsigned
1bc70 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1bc80 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
1bc90 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74  git(x)  isxdigit
1bca0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1bcb0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1bcc0 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
1bcd0 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67    tolower((unsig
1bce0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 65  ned char)(x)).#e
1bcf0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
1bd00 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72  rnal function pr
1bd10 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66  ototypes.*/.#def
1bd20 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 49 43  ine sqlite3StrIC
1bd30 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63  mp sqlite3_stric
1bd40 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  mp.int sqlite3St
1bd50 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61  rlen30(const cha
1bd60 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c  r*);.#define sql
1bd70 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c  ite3StrNICmp sql
1bd80 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69  ite3_strnicmp..i
1bd90 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
1bda0 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  Init(void);.void
1bdb0 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e   sqlite3MallocEn
1bdc0 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73  d(void);.void *s
1bdd0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e 74  qlite3Malloc(int
1bde0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1bdf0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69 6e 74 29 3b  MallocZero(int);
1be00 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
1be10 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74  MallocZero(sqlit
1be20 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  e3*, int);.void 
1be30 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
1be40 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  Raw(sqlite3*, in
1be50 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  t);.char *sqlite
1be60 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65  3DbStrDup(sqlite
1be70 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
1be80 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
1be90 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a  StrNDup(sqlite3*
1bea0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
1beb0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1bec0 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20  3Realloc(void*, 
1bed0 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1bee0 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
1bef0 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  ee(sqlite3 *, vo
1bf00 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  id *, int);.void
1bf10 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
1bf20 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  oc(sqlite3 *, vo
1bf30 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  id *, int);.void
1bf40 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73   sqlite3DbFree(s
1bf50 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
1bf60 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
1bf70 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69  ocSize(void*);.i
1bf80 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  nt sqlite3DbMall
1bf90 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c  ocSize(sqlite3*,
1bfa0 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73   void*);.void *s
1bfb0 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c  qlite3ScratchMal
1bfc0 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
1bfd0 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72 65  qlite3ScratchFre
1bfe0 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  e(void*);.void *
1bff0 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f  sqlite3PageMallo
1c000 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  c(int);.void sql
1c010 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69  ite3PageFree(voi
1c020 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
1c030 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76  3MemSetDefault(v
1c040 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
1c050 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f  e3BenignMallocHo
1c060 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69  oks(void (*)(voi
1c070 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69  d), void (*)(voi
1c080 64 29 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d));.int sqlite3
1c090 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76  HeapNearlyFull(v
1c0a0 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20  oid);../*.** On 
1c0b0 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70  systems with amp
1c0c0 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61  le stack space a
1c0d0 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20  nd that support 
1c0e0 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a  alloca(), make.*
1c0f0 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28  * use of alloca(
1c100 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63  ) to obtain spac
1c110 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f  e for large auto
1c120 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20  matic objects.  
1c130 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f  By default,.** o
1c140 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d  btain space from
1c150 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a   malloc()..**.**
1c160 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f   The alloca() ro
1c170 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75  utine never retu
1c180 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20  rns NULL.  This 
1c190 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20  will cause code 
1c1a0 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65  paths.** that de
1c1b0 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53  al with sqlite3S
1c1c0 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c  tackAlloc() fail
1c1d0 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61  ures to be unrea
1c1e0 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  chable..*/.#ifde
1c1f0 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c  f SQLITE_USE_ALL
1c200 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  OCA.# define sql
1c210 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
1c220 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28  w(D,N)   alloca(
1c230 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
1c240 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
1c250 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61  o(D,N)  memset(a
1c260 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a  lloca(N), 0, N).
1c270 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1c280 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20  StackFree(D,P)  
1c290 20 20 20 20 20 0a 23 65 6c 73 65 0a 23 20 64 65       .#else.# de
1c2a0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
1c2b0 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
1c2c0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
1c2d0 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
1c2e0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
1c2f0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
1c300 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
1c310 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
1c320 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
1c330 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
1c340 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
1c350 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
1c360 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
1c370 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS3.const sqlite
1c380 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
1c390 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
1c3a0 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys3(void);.#endi
1c3b0 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
1c3c0 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63  ENABLE_MEMSYS5.c
1c3d0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
1c3e0 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
1c3f0 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76  3MemGetMemsys5(v
1c400 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23  oid);.#endif...#
1c410 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55  ifndef SQLITE_MU
1c420 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74  TEX_OMIT.  sqlit
1c430 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
1c440 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44   const *sqlite3D
1c450 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64  efaultMutex(void
1c460 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
1c470 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
1c480 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74   *sqlite3NoopMut
1c490 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
1c4a0 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
1c4b0 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74  e3MutexAlloc(int
1c4c0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
1c4d0 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b  MutexInit(void);
1c4e0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
1c4f0 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65  texEnd(void);.#e
1c500 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
1c510 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74  3StatusValue(int
1c520 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1c530 74 61 74 75 73 41 64 64 28 69 6e 74 2c 20 69 6e  tatusAdd(int, in
1c540 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1c550 53 74 61 74 75 73 53 65 74 28 69 6e 74 2c 20 69  StatusSet(int, i
1c560 6e 74 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  nt);..#ifndef SQ
1c570 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
1c580 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73  NG_POINT.  int s
1c590 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62  qlite3IsNaN(doub
1c5a0 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  le);.#else.# def
1c5b0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  ine sqlite3IsNaN
1c5c0 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 76  (X)  0.#endif..v
1c5d0 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69  oid sqlite3VXPri
1c5e0 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 69  ntf(StrAccum*, i
1c5f0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
1c600 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 6e 64   va_list);.#ifnd
1c610 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
1c620 52 41 43 45 0a 76 6f 69 64 20 73 71 6c 69 74 65  RACE.void sqlite
1c630 33 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75  3XPrintf(StrAccu
1c640 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  m*, const char*,
1c650 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 63 68   ...);.#endif.ch
1c660 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e  ar *sqlite3MPrin
1c670 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
1c680 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
1c690 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72  har *sqlite3VMPr
1c6a0 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
1c6b0 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
1c6c0 73 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  st);.char *sqlit
1c6d0 65 33 4d 41 70 70 65 6e 64 66 28 73 71 6c 69 74  e3MAppendf(sqlit
1c6e0 65 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20  e3*,char*,const 
1c6f0 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20  char*,...);.#if 
1c700 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1c710 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  EST) || defined(
1c720 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
1c730 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75  void sqlite3Debu
1c740 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68  gPrintf(const ch
1c750 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
1c760 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
1c770 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69  LITE_TEST).  voi
1c780 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65  d *sqlite3TestTe
1c790 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68  xtToPtr(const ch
1c7a0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ar*);.#endif../*
1c7b0 20 4f 75 74 70 75 74 20 66 6f 72 6d 61 74 74 69   Output formatti
1c7c0 6e 67 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45  ng for SQLITE_TE
1c7d0 53 54 43 54 52 4c 5f 45 58 50 4c 41 49 4e 20 2a  STCTRL_EXPLAIN *
1c7e0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
1c7f0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 54 52 45 45  LITE_ENABLE_TREE
1c800 5f 45 58 50 4c 41 49 4e 29 0a 20 20 76 6f 69 64  _EXPLAIN).  void
1c810 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42   sqlite3ExplainB
1c820 65 67 69 6e 28 56 64 62 65 2a 29 3b 0a 20 20 76  egin(Vdbe*);.  v
1c830 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1c840 69 6e 50 72 69 6e 74 66 28 56 64 62 65 2a 2c 20  inPrintf(Vdbe*, 
1c850 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
1c860 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1c870 33 45 78 70 6c 61 69 6e 4e 4c 28 56 64 62 65 2a  3ExplainNL(Vdbe*
1c880 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1c890 33 45 78 70 6c 61 69 6e 50 75 73 68 28 56 64 62  3ExplainPush(Vdb
1c8a0 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
1c8b0 74 65 33 45 78 70 6c 61 69 6e 50 6f 70 28 56 64  te3ExplainPop(Vd
1c8c0 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  be*);.  void sql
1c8d0 69 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73  ite3ExplainFinis
1c8e0 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  h(Vdbe*);.  void
1c8f0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53   sqlite3ExplainS
1c900 65 6c 65 63 74 28 56 64 62 65 2a 2c 20 53 65 6c  elect(Vdbe*, Sel
1c910 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ect*);.  void sq
1c920 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72  lite3ExplainExpr
1c930 28 56 64 62 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  (Vdbe*, Expr*);.
1c940 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1c950 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 56 64  plainExprList(Vd
1c960 62 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  be*, ExprList*);
1c970 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  .  const char *s
1c980 71 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e  qlite3VdbeExplan
1c990 61 74 69 6f 6e 28 56 64 62 65 2a 29 3b 0a 23 65  ation(Vdbe*);.#e
1c9a0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1c9b0 69 74 65 33 45 78 70 6c 61 69 6e 42 65 67 69 6e  ite3ExplainBegin
1c9c0 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
1c9d0 69 74 65 33 45 78 70 6c 61 69 6e 53 65 6c 65 63  ite3ExplainSelec
1c9e0 74 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  t(A,B).# define 
1c9f0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78  sqlite3ExplainEx
1ca00 70 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  pr(A,B).# define
1ca10 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45   sqlite3ExplainE
1ca20 78 70 72 4c 69 73 74 28 41 2c 42 29 0a 23 20 64  xprList(A,B).# d
1ca30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
1ca40 6c 61 69 6e 46 69 6e 69 73 68 28 58 29 0a 23 20  lainFinish(X).# 
1ca50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
1ca60 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 58 29  beExplanation(X)
1ca70 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64   0.#endif...void
1ca80 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
1ca90 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74  g(char **, sqlit
1caa0 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  e3*, const char*
1cab0 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
1cac0 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72  ite3ErrorMsg(Par
1cad0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
1cae0 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69  , ...);.int sqli
1caf0 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a  te3Dequote(char*
1cb00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  );.int sqlite3Ke
1cb10 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20  ywordCode(const 
1cb20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
1cb30 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1cb40 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65  3RunParser(Parse
1cb50 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
1cb60 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  char **);.void s
1cb70 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69  qlite3FinishCodi
1cb80 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  ng(Parse*);.int 
1cb90 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65  sqlite3GetTempRe
1cba0 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  g(Parse*);.void 
1cbb0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
1cbc0 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74  mpReg(Parse*,int
1cbd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
1cbe0 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  tTempRange(Parse
1cbf0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
1cc00 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
1cc10 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
1cc20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1cc30 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61  e3ClearTempRegCa
1cc40 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70  che(Parse*);.Exp
1cc50 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c  r *sqlite3ExprAl
1cc60 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
1cc70 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e  ,const Token*,in
1cc80 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
1cc90 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69  3Expr(sqlite3*,i
1cca0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1ccb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1ccc0 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28  rAttachSubtrees(
1ccd0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45  sqlite3*,Expr*,E
1cce0 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
1ccf0 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28  r *sqlite3PExpr(
1cd00 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Parse*, int, Exp
1cd10 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74  r*, Expr*, const
1cd20 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a   Token*);.Expr *
1cd30 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73  sqlite3ExprAnd(s
1cd40 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45  qlite3*,Expr*, E
1cd50 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
1cd60 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e  ite3ExprFunction
1cd70 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
1cd80 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
1cd90 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69   sqlite3ExprAssi
1cda0 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73  gnVarNumber(Pars
1cdb0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
1cdc0 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65   sqlite3ExprDele
1cdd0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
1cde0 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  r*);.ExprList *s
1cdf0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70  qlite3ExprListAp
1ce00 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72  pend(Parse*,Expr
1ce10 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  List*,Expr*);.vo
1ce20 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
1ce30 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a  stSetName(Parse*
1ce40 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e  ,ExprList*,Token
1ce50 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
1ce60 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
1ce70 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  pan(Parse*,ExprL
1ce80 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b  ist*,ExprSpan*);
1ce90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1cea0 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  rListDelete(sqli
1ceb0 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  te3*, ExprList*)
1cec0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
1ced0 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  t(sqlite3*, char
1cee0 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
1cef0 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69  InitCallback(voi
1cf00 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c  d*, int, char**,
1cf10 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73   char**);.void s
1cf20 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72  qlite3Pragma(Par
1cf30 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
1cf40 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
1cf50 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
1cf60 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
1cf70 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29  ection(sqlite3*)
1cf80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1cf90 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c  setOneSchema(sql
1cfa0 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
1cfb0 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65   sqlite3Collapse
1cfc0 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71  DatabaseArray(sq
1cfd0 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
1cfe0 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73 65 28  lite3BeginParse(
1cff0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
1d000 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49  d sqlite3CommitI
1d010 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73  nternalChanges(s
1d020 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c 65 20  qlite3*);.Table 
1d030 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65  *sqlite3ResultSe
1d040 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a  tOfSelect(Parse*
1d050 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20  ,Select*);.void 
1d060 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65  sqlite3OpenMaste
1d070 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20  rTable(Parse *, 
1d080 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d090 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72  e3StartTable(Par
1d0a0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
1d0b0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
1d0c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1d0d0 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  AddColumn(Parse*
1d0e0 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
1d0f0 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c  qlite3AddNotNull
1d100 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
1d110 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72  oid sqlite3AddPr
1d120 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c  imaryKey(Parse*,
1d130 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
1d140 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1d150 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b   sqlite3AddCheck
1d160 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
1d170 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
1d180 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
1d190 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  Type(Parse*,Toke
1d1a0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
1d1b0 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65  3AddDefaultValue
1d1c0 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e  (Parse*,ExprSpan
1d1d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d1e0 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50  AddCollateType(P
1d1f0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
1d200 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54  void sqlite3EndT
1d210 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
1d220 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74  n*,Token*,Select
1d230 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  *);.int sqlite3P
1d240 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68  arseUri(const ch
1d250 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
1d260 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20  unsigned int*,. 
1d270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d280 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a     sqlite3_vfs**
1d290 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29  ,char**,char **)
1d2a0 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33  ;.Btree *sqlite3
1d2b0 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71  DbNameToBtree(sq
1d2c0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1d2d0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1d2e0 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20 2a  CodeOnce(Parse *
1d2f0 29 3b 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69  );..Bitvec *sqli
1d300 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28  te3BitvecCreate(
1d310 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
1d320 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76  3BitvecTest(Bitv
1d330 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
1d340 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74 28  qlite3BitvecSet(
1d350 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76  Bitvec*, u32);.v
1d360 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
1d370 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20  cClear(Bitvec*, 
1d380 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  u32, void*);.voi
1d390 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44  d sqlite3BitvecD
1d3a0 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b  estroy(Bitvec*);
1d3b0 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74 76  .u32 sqlite3Bitv
1d3c0 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b  ecSize(Bitvec*);
1d3d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
1d3e0 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e  ecBuiltinTest(in
1d3f0 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65 74  t,int*);..RowSet
1d400 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49   *sqlite3RowSetI
1d410 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  nit(sqlite3*, vo
1d420 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e  id*, unsigned in
1d430 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1d440 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53  RowSetClear(RowS
1d450 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  et*);.void sqlit
1d460 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52  e3RowSetInsert(R
1d470 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e  owSet*, i64);.in
1d480 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  t sqlite3RowSetT
1d490 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 75 38 20  est(RowSet*, u8 
1d4a0 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e  iBatch, i64);.in
1d4b0 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  t sqlite3RowSetN
1d4c0 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ext(RowSet*, i64
1d4d0 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
1d4e0 33 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73  3CreateView(Pars
1d4f0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
1d500 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c  ,Token*,Select*,
1d510 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21  int,int);..#if !
1d520 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1d530 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65  MIT_VIEW) || !de
1d540 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1d550 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
1d560 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65    int sqlite3Vie
1d570 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
1d580 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
1d590 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1d5a0 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
1d5b0 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a  umnNames(A,B) 0.
1d5c0 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c  #endif..void sql
1d5d0 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61  ite3DropTable(Pa
1d5e0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1d5f0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1d600 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54  sqlite3CodeDropT
1d610 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62  able(Parse*, Tab
1d620 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  le*, int, int);.
1d630 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
1d640 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
1d650 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64  , Table*);.#ifnd
1d660 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
1d670 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76  UTOINCREMENT.  v
1d680 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
1d690 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61  ncrementBegin(Pa
1d6a0 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20  rse *pParse);.  
1d6b0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
1d6c0 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72  incrementEnd(Par
1d6d0 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c  se *pParse);.#el
1d6e0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1d6f0 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
1d700 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e  Begin(X).# defin
1d710 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
1d720 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e  rementEnd(X).#en
1d730 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  dif.int sqlite3C
1d740 6f 64 65 43 6f 72 6f 75 74 69 6e 65 28 50 61 72  odeCoroutine(Par
1d750 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65  se*, Select*, Se
1d760 6c 65 63 74 44 65 73 74 2a 29 3b 0a 76 6f 69 64  lectDest*);.void
1d770 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50   sqlite3Insert(P
1d780 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
1d790 20 45 78 70 72 4c 69 73 74 2a 2c 20 53 65 6c 65   ExprList*, Sele
1d7a0 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e  ct*, IdList*, in
1d7b0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1d7c0 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73  3ArrayAllocate(s
1d7d0 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e  qlite3*,void*,in
1d7e0 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64  t,int*,int*);.Id
1d7f0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
1d800 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
1d810 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b  3*, IdList*, Tok
1d820 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
1d830 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c  3IdListIndex(IdL
1d840 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
1d850 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
1d860 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67  te3SrcListEnlarg
1d870 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
1d880 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
1d890 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
1d8a0 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73  3SrcListAppend(s
1d8b0 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
1d8c0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
1d8d0 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
1d8e0 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
1d8f0 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a  dFromTerm(Parse*
1d900 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
1d910 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  n*, Token*,.    
1d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d940 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74    Token*, Select
1d950 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74  *, Expr*, IdList
1d960 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d970 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79  SrcListIndexedBy
1d980 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
1d990 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69  t *, Token *);.i
1d9a0 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65  nt sqlite3Indexe
1d9b0 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20  dByLookup(Parse 
1d9c0 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  *, struct SrcLis
1d9d0 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20  t_item *);.void 
1d9e0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
1d9f0 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c  iftJoinType(SrcL
1da00 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
1da10 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e  te3SrcListAssign
1da20 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20  Cursors(Parse*, 
1da30 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
1da40 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c  sqlite3IdListDel
1da50 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64  ete(sqlite3*, Id
1da60 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
1da70 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74  ite3SrcListDelet
1da80 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
1da90 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  ist*);.Index *sq
1daa0 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78  lite3CreateIndex
1dab0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1dac0 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  oken*,SrcList*,E
1dad0 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b  xprList*,int,Tok
1dae0 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
1db00 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
1db10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f  .void sqlite3Dro
1db20 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53  pIndex(Parse*, S
1db30 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69  rcList*, int);.i
1db40 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
1db50 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
1db60 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a  , SelectDest*);.
1db70 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
1db80 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c  electNew(Parse*,
1db90 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73  ExprList*,SrcLis
1dba0 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
1dbb0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
1dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
1dbd0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36  r*,ExprList*,u16
1dbe0 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76  ,Expr*,Expr*);.v
1dbf0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
1dc00 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
1dc10 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c  , Select*);.Tabl
1dc20 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  e *sqlite3SrcLis
1dc30 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20  tLookup(Parse*, 
1dc40 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
1dc50 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79  qlite3IsReadOnly
1dc60 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
1dc70 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1dc80 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72  te3OpenTable(Par
1dc90 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69  se*, int iCur, i
1dca0 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20  nt iDb, Table*, 
1dcb0 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  int);.#if define
1dcc0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1dcd0 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
1dce0 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  MIT) && !defined
1dcf0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42  (SQLITE_OMIT_SUB
1dd00 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c  QUERY).Expr *sql
1dd10 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50  ite3LimitWhere(P
1dd20 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
1dd30 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
1dd40 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a  xpr*,Expr*,char*
1dd50 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
1dd60 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d  qlite3DeleteFrom
1dd70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1dd80 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
1dd90 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50 61  sqlite3Update(Pa
1dda0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1ddb0 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
1ddc0 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66  , int);.WhereInf
1ddd0 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42  o *sqlite3WhereB
1dde0 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c  egin(Parse*,SrcL
1ddf0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
1de00 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  ist*,ExprList*,u
1de10 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  16,int);.void sq
1de20 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68  lite3WhereEnd(Wh
1de30 65 72 65 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73  ereInfo*);.u64 s
1de40 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75  qlite3WhereOutpu
1de50 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49  tRowCount(WhereI
1de60 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
1de70 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
1de80 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
1de90 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
1dea0 73 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e  sOrdered(WhereIn
1deb0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
1dec0 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61  3WhereContinueLa
1ded0 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
1dee0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
1def0 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72  eBreakLabel(Wher
1df00 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
1df10 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61  ite3WhereOkOnePa
1df20 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ss(WhereInfo*);.
1df30 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1df40 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72  odeGetColumn(Par
1df50 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
1df60 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
1df70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1df80 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
1df90 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62  Table(Vdbe*, Tab
1dfa0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
1dfb0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1dfc0 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61  3ExprCodeMove(Pa
1dfd0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
1dfe0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1dff0 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65  e3ExprCacheStore
1e000 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
1e010 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1e020 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75  lite3ExprCachePu
1e030 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  sh(Parse*);.void
1e040 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
1e050 65 50 6f 70 28 50 61 72 73 65 2a 2c 20 69 6e 74  ePop(Parse*, int
1e060 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e070 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50  xprCacheRemove(P
1e080 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
1e090 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1e0a0 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72  prCacheClear(Par
1e0b0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
1e0c0 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e  e3ExprCacheAffin
1e0d0 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a  ityChange(Parse*
1e0e0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
1e0f0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1e100 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1e110 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1e120 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61  3ExprCodeTemp(Pa
1e130 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1e140 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1e150 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61  xprCodeTarget(Pa
1e160 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1e170 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1e180 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50  prCodeAndCache(P
1e190 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1e1a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e1b0 45 78 70 72 43 6f 64 65 43 6f 6e 73 74 61 6e 74  ExprCodeConstant
1e1c0 73 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  s(Parse*, Expr*)
1e1d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1e1e0 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
1e1f0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
1e200 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1e210 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72   sqlite3ExprIfTr
1e220 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ue(Parse*, Expr*
1e230 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1e240 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
1e250 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70  alse(Parse*, Exp
1e260 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54  r*, int, int);.T
1e270 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e  able *sqlite3Fin
1e280 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  dTable(sqlite3*,
1e290 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
1e2a0 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
1e2b0 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
1e2c0 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20  able(Parse*,int 
1e2d0 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61  isView,const cha
1e2e0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
1e2f0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
1e300 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28  LocateTableItem(
1e310 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65  Parse*,int isVie
1e320 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  w,struct SrcList
1e330 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20  _item *);.Index 
1e340 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65  *sqlite3FindInde
1e350 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  x(sqlite3*,const
1e360 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
1e370 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
1e380 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
1e390 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
1e3a0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
1e3b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
1e3c0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
1e3d0 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  ex(sqlite3*,int,
1e3e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
1e3f0 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d  id sqlite3Vacuum
1e400 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
1e410 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63  lite3RunVacuum(c
1e420 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29  har**, sqlite3*)
1e430 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e  ;.char *sqlite3N
1e440 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c  ameFromToken(sql
1e450 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
1e460 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1e470 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78  ompare(Expr*, Ex
1e480 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
1e490 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f  qlite3ExprListCo
1e4a0 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c  mpare(ExprList*,
1e4b0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
1e4c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1e4d0 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78 70  rImpliesExpr(Exp
1e4e0 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
1e4f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1e500 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74  rAnalyzeAggregat
1e510 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
1e520 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
1e530 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
1e540 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74  AggList(NameCont
1e550 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  ext*,ExprList*);
1e560 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63  .int sqlite3Func
1e570 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28  tionUsesThisSrc(
1e580 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  Expr*, SrcList*)
1e590 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47  ;.Vdbe *sqlite3G
1e5a0 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a  etVdbe(Parse*);.
1e5b0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
1e5c0 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b  SaveState(void);
1e5d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
1e5e0 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f  gRestoreState(vo
1e5f0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1e600 33 50 72 6e 67 52 65 73 65 74 53 74 61 74 65 28  3PrngResetState(
1e610 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
1e620 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73  te3RollbackAll(s
1e630 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
1e640 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
1e650 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65  rifySchema(Parse
1e660 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1e670 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e  lite3CodeVerifyN
1e680 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65  amedSchema(Parse
1e690 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
1e6a0 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  Db);.void sqlite
1e6b0 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f  3BeginTransactio
1e6c0 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  n(Parse*, int);.
1e6d0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
1e6e0 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  itTransaction(Pa
1e6f0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1e700 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73  te3RollbackTrans
1e710 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a  action(Parse*);.
1e720 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65  void sqlite3Save
1e730 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  point(Parse*, in
1e740 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  t, Token*);.void
1e750 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76   sqlite3CloseSav
1e760 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20  epoints(sqlite3 
1e770 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e780 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f  LeaveMutexAndClo
1e790 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33  seZombie(sqlite3
1e7a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1e7b0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78  xprIsConstant(Ex
1e7c0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1e7d0 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e  3ExprIsConstantN
1e7e0 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69  otJoin(Expr*);.i
1e7f0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
1e800 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69  ConstantOrFuncti
1e810 6f 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  on(Expr*);.int s
1e820 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65  qlite3ExprIsInte
1e830 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29  ger(Expr*, int*)
1e840 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1e850 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74  rCanBeNull(const
1e860 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
1e870 6c 69 74 65 33 45 78 70 72 43 6f 64 65 49 73 4e  lite3ExprCodeIsN
1e880 75 6c 6c 4a 75 6d 70 28 56 64 62 65 2a 2c 20 63  ullJump(Vdbe*, c
1e890 6f 6e 73 74 20 45 78 70 72 2a 2c 20 69 6e 74 2c  onst Expr*, int,
1e8a0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
1e8b0 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66  e3ExprNeedsNoAff
1e8c0 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73  inityChange(cons
1e8d0 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a  t Expr*, char);.
1e8e0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77  int sqlite3IsRow
1e8f0 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  id(const char*);
1e900 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
1e910 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50  erateRowDelete(P
1e920 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
1e930 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 54 72  nt, int, int, Tr
1e940 69 67 67 65 72 20 2a 2c 20 69 6e 74 29 3b 0a 76  igger *, int);.v
1e950 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
1e960 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74  ateRowIndexDelet
1e970 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
1e980 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e  , int, int*);.in
1e990 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  t sqlite3Generat
1e9a0 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a  eIndexKey(Parse*
1e9b0 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
1e9c0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a  nt, int, int*);.
1e9d0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
1e9e0 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68  rateConstraintCh
1e9f0 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ecks(Parse*,Tabl
1ea00 65 2a 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20  e*,int,int,.    
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea30 20 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e   int*,int,int,in
1ea40 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69  t,int,int*);.voi
1ea50 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74  d sqlite3Complet
1ea60 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65  eInsertion(Parse
1ea70 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1ea80 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20  int, int*, int, 
1ea90 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
1eaa0 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41  qlite3OpenTableA
1eab0 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a  ndIndices(Parse*
1eac0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1ead0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1eae0 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
1eaf0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
1eb00 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1eb10 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50  ite3MultiWrite(P
1eb20 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
1eb30 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72  ite3MayAbort(Par
1eb40 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
1eb50 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74  e3HaltConstraint
1eb60 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
1eb70 74 2c 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  t, char*, int);.
1eb80 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1eb90 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  rDup(sqlite3*,Ex
1eba0 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69  pr*,int);.ExprLi
1ebb0 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
1ebc0 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
1ebd0 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ExprList*,int);.
1ebe0 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
1ebf0 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74  SrcListDup(sqlit
1ec00 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74  e3*,SrcList*,int
1ec10 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
1ec20 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69  e3IdListDup(sqli
1ec30 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53  te3*,IdList*);.S
1ec40 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
1ec50 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a  lectDup(sqlite3*
1ec60 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76  ,Select*,int);.v
1ec70 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44  oid sqlite3FuncD
1ec80 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66  efInsert(FuncDef
1ec90 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29  Hash*, FuncDef*)
1eca0 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
1ecb0 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73  e3FindFunction(s
1ecc0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1ecd0 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75  ar*,int,int,u8,u
1ece0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
1ecf0 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46  RegisterBuiltinF
1ed00 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
1ed10 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ed20 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65  RegisterDateTime
1ed30 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
1ed40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
1ed50 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74  isterGlobalFunct
1ed60 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
1ed70 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
1ed80 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ckOk(sqlite3*);.
1ed90 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
1eda0 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73  yCheckSickOrOk(s
1edb0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
1edc0 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b  qlite3ChangeCook
1edd0 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ie(Parse*, int);
1ede0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
1edf0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
1ee00 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1ee10 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
1ee20 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ).void sqlite3Ma
1ee30 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61  terializeView(Pa
1ee40 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
1ee50 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69  pr*, int);.#endi
1ee60 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
1ee70 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20  E_OMIT_TRIGGER. 
1ee80 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
1ee90 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  inTrigger(Parse*
1eea0 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  , Token*,Token*,
1eeb0 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c  int,int,IdList*,
1eec0 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  SrcList*,.      
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eee0 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20       Expr*,int, 
1eef0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
1ef00 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65  ite3FinishTrigge
1ef10 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
1ef20 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rStep*, Token*);
1ef30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
1ef40 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65  ropTrigger(Parse
1ef50 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
1ef60 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1ef70 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
1ef80 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a  Parse*, Trigger*
1ef90 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
1efa0 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
1efb0 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
1efc0 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  e*, int, ExprLis
1efd0 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b  t*, int *pMask);
1efe0 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
1eff0 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50  te3TriggerList(P
1f000 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29  arse *, Table *)
1f010 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1f020 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50  CodeRowTrigger(P
1f030 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a  arse*, Trigger *
1f040 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
1f050 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a  , int, Table *,.
1f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f070 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c              int,
1f080 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
1f090 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
1f0a0 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50  wTriggerDirect(P
1f0b0 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20  arse *, Trigger 
1f0c0 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
1f0d0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
1f0e0 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69  id sqliteViewTri
1f0f0 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61  ggers(Parse*, Ta
1f100 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
1f110 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
1f120 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
1f130 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71  teTriggerStep(sq
1f140 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53  lite3*, TriggerS
1f150 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  tep*);.  Trigger
1f160 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
1f170 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73  ggerSelectStep(s
1f180 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29  qlite3*,Select*)
1f190 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
1f1a0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49  *sqlite3TriggerI
1f1b0 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65  nsertStep(sqlite
1f1c0 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73  3*,Token*, IdLis
1f1d0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
1f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1f0 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
1f200 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 75 38  List*,Select*,u8
1f210 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
1f220 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
1f230 55 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74  UpdateStep(sqlit
1f240 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  e3*,Token*,ExprL
1f250 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29  ist*, Expr*, u8)
1f260 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
1f270 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44  *sqlite3TriggerD
1f280 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65  eleteStep(sqlite
1f290 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a  3*,Token*, Expr*
1f2a0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1f2b0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  3DeleteTrigger(s
1f2c0 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
1f2d0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1f2e0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
1f2f0 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
1f300 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
1f310 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  *);.  u32 sqlite
1f320 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
1f330 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Parse*,Trigger*,
1f340 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e  ExprList*,int,in
1f350 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23  t,Table*,int);.#
1f360 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
1f370 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
1f380 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20  ((p)->pToplevel 
1f390 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c  ? (p)->pToplevel
1f3a0 20 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20   : (p)).#else.# 
1f3b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
1f3c0 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c  iggersExist(B,C,
1f3d0 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e  D,E,F) 0.# defin
1f3e0 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  e sqlite3DeleteT
1f3f0 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65  rigger(A,B).# de
1f400 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70  fine sqlite3Drop
1f410 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a  TriggerPtr(A,B).
1f420 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1f430 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
1f440 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20  rigger(A,B,C).# 
1f450 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
1f460 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42  deRowTrigger(A,B
1f470 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a  ,C,D,E,F,G,H,I).
1f480 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1f490 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69  CodeRowTriggerDi
1f4a0 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  rect(A,B,C,D,E,F
1f4b0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1f4c0 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c  e3TriggerList(X,
1f4d0 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73   Y) 0.# define s
1f4e0 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
1f4f0 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e  vel(p) p.# defin
1f500 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
1f510 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c  Colmask(A,B,C,D,
1f520 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a  E,F,G) 0.#endif.
1f530 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e  .int sqlite3Join
1f540 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
1f550 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
1f560 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1f570 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b  e3CreateForeignK
1f580 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
1f590 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78  ist*, Token*, Ex
1f5a0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  prList*, int);.v
1f5b0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72  oid sqlite3Defer
1f5c0 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
1f5d0 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  *, int);.#ifndef
1f5e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
1f5f0 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69  HORIZATION.  voi
1f600 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  d sqlite3AuthRea
1f610 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53  d(Parse*,Expr*,S
1f620 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29  chema*,SrcList*)
1f630 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
1f640 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  uthCheck(Parse*,
1f650 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
1f660 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
1f670 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
1f680 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
1f690 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65  ontextPush(Parse
1f6a0 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c  *, AuthContext*,
1f6b0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
1f6c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
1f6d0 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68  hContextPop(Auth
1f6e0 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74  Context*);.  int
1f6f0 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
1f700 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Col(Parse*, cons
1f710 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20  t char *, const 
1f720 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65  char *, int);.#e
1f730 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1f740 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62  ite3AuthRead(a,b
1f750 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73  ,c,d).# define s
1f760 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
1f770 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51  a,b,c,d,e)    SQ
1f780 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65  LITE_OK.# define
1f790 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
1f7a0 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23  extPush(a,b,c).#
1f7b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
1f7c0 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29  uthContextPop(a)
1f7d0 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65    ((void)(a)).#e
1f7e0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
1f7f0 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Attach(Parse*, 
1f800 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78  Expr*, Expr*, Ex
1f810 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
1f820 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Detach(Parse*,
1f830 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
1f840 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
1f850 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
1f860 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
1f870 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
1f880 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
1f890 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
1f8a0 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
1f8b0 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
1f8c0 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
1f8d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
1f8e0 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
1f8f0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
1f900 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
1f910 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
1f920 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1f930 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
1f940 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
1f950 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
1f960 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
1f970 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
1f980 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
1f990 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
1f9a0 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
1f9b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
1f9c0 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
1f9d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
1f9e0 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
1f9f0 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
1fa00 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69  nChar);.int sqli
1fa10 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
1fa20 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
1fa30 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
1fa40 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
1fa50 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 0a  d(const u8**);..
1fa60 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74  /*.** Routines t
1fa70 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  o read and write
1fa80 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
1fa90 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73   integers.  Thes
1faa0 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
1fab0 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c  defined locally,
1fac0 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20   but now we use 
1fad0 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69  the varint routi
1fae0 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e  nes in the util.
1faf0 63 0a 2a 2a 20 66 69 6c 65 2e 20 20 43 6f 64 65  c.** file.  Code
1fb00 20 73 68 6f 75 6c 64 20 75 73 65 20 74 68 65 20   should use the 
1fb10 4d 41 43 52 4f 20 66 6f 72 6d 73 20 62 65 6c 6f  MACRO forms belo
1fb20 77 2c 20 61 73 20 74 68 65 20 56 61 72 69 6e 74  w, as the Varint
1fb30 33 32 20 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 61  32 versions.** a
1fb40 72 65 20 63 6f 64 65 64 20 74 6f 20 61 73 73 75  re coded to assu
1fb50 6d 65 20 74 68 65 20 73 69 6e 67 6c 65 20 62 79  me the single by
1fb60 74 65 20 63 61 73 65 20 69 73 20 61 6c 72 65 61  te case is alrea
1fb70 64 79 20 68 61 6e 64 6c 65 64 20 28 77 68 69 63  dy handled (whic
1fb80 68 20 0a 2a 2a 20 74 68 65 20 4d 41 43 52 4f 20  h .** the MACRO 
1fb90 66 6f 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69  form does)..*/.i
1fba0 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
1fbb0 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
1fbc0 72 2a 2c 20 75 36 34 29 3b 0a 69 6e 74 20 73 71  r*, u64);.int sq
1fbd0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32  lite3PutVarint32
1fbe0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
1fbf0 20 75 33 32 29 3b 0a 75 38 20 73 71 6c 69 74 65   u32);.u8 sqlite
1fc00 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74  3GetVarint(const
1fc10 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
1fc20 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c  , u64 *);.u8 sql
1fc30 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
1fc40 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
1fc50 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69  har *, u32 *);.i
1fc60 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
1fc70 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a  Len(u64 v);../*.
1fc80 2a 2a 20 54 68 65 20 68 65 61 64 65 72 20 6f 66  ** The header of
1fc90 20 61 20 72 65 63 6f 72 64 20 63 6f 6e 73 69 73   a record consis
1fca0 74 73 20 6f 66 20 61 20 73 65 71 75 65 6e 63 65  ts of a sequence
1fcb0 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
1fcc0 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68   integers..** Th
1fcd0 65 73 65 20 69 6e 74 65 67 65 72 73 20 61 72 65  ese integers are
1fce0 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 73   almost always s
1fcf0 6d 61 6c 6c 20 61 6e 64 20 61 72 65 20 65 6e 63  mall and are enc
1fd00 6f 64 65 64 20 61 73 20 61 20 73 69 6e 67 6c 65  oded as a single
1fd10 20 62 79 74 65 2e 0a 2a 2a 20 54 68 65 20 66 6f   byte..** The fo
1fd20 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 74  llowing macros t
1fd30 61 6b 65 20 61 64 76 61 6e 74 61 67 65 20 74 68  ake advantage th
1fd40 69 73 20 66 61 63 74 20 74 6f 20 70 72 6f 76 69  is fact to provi
1fd50 64 65 20 61 20 66 61 73 74 20 65 6e 63 6f 64 65  de a fast encode
1fd60 0a 2a 2a 20 61 6e 64 20 64 65 63 6f 64 65 20 6f  .** and decode o
1fd70 66 20 74 68 65 20 69 6e 74 65 67 65 72 73 20 69  f the integers i
1fd80 6e 20 61 20 72 65 63 6f 72 64 20 68 65 61 64 65  n a record heade
1fd90 72 2e 20 20 49 74 20 69 73 20 66 61 73 74 65 72  r.  It is faster
1fda0 20 66 6f 72 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a   for the common.
1fdb0 2a 2a 20 63 61 73 65 20 77 68 65 72 65 20 74 68  ** case where th
1fdc0 65 20 69 6e 74 65 67 65 72 20 69 73 20 61 20 73  e integer is a s
1fdd0 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 49 74 20  ingle byte.  It 
1fde0 69 73 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77  is a little slow
1fdf0 65 72 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 69  er when the.** i
1fe00 6e 74 65 67 65 72 20 69 73 20 74 77 6f 20 6f 72  nteger is two or
1fe10 20 6d 6f 72 65 20 62 79 74 65 73 2e 20 20 42 75   more bytes.  Bu
1fe20 74 20 6f 76 65 72 61 6c 6c 20 69 74 20 69 73 20  t overall it is 
1fe30 66 61 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  faster..**.** Th
1fe40 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72  e following expr
1fe50 65 73 73 69 6f 6e 73 20 61 72 65 20 65 71 75 69  essions are equi
1fe60 76 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20  valent:.**.**   
1fe70 20 20 78 20 3d 20 73 71 6c 69 74 65 33 47 65 74    x = sqlite3Get
1fe80 56 61 72 69 6e 74 33 32 28 20 41 2c 20 26 42 20  Varint32( A, &B 
1fe90 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71  );.**     x = sq
1fea0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32  lite3PutVarint32
1feb0 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20  ( A, B );.**.** 
1fec0 20 20 20 20 78 20 3d 20 67 65 74 56 61 72 69 6e      x = getVarin
1fed0 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 20  t32( A, B );.** 
1fee0 20 20 20 20 78 20 3d 20 70 75 74 56 61 72 69 6e      x = putVarin
1fef0 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a  t32( A, B );.**.
1ff00 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  */.#define getVa
1ff10 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
1ff20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29   (u8)((*(A)<(u8)
1ff30 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29  0x80)?((B)=(u32)
1ff40 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47  *(A)),1:sqlite3G
1ff50 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28  etVarint32((A),(
1ff60 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65  u32 *)&(B))).#de
1ff70 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32  fine putVarint32
1ff80 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
1ff90 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30  ((u32)(B)<(u32)0
1ffa0 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69  x80)?(*(A)=(unsi
1ffb0 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31  gned char)(B)),1
1ffc0 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56  :\.  sqlite3PutV
1ffd0 61 72 69 6e 74 33 32 28 28 41 29 2c 28 42 29 29  arint32((A),(B))
1ffe0 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  ).#define getVar
1fff0 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65  int    sqlite3Ge
20000 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20  tVarint.#define 
20010 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  putVarint    sql
20020 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a  ite3PutVarint...
20030 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
20040 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
20050 53 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65  Str(Vdbe *, Inde
20060 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  x *);.void sqlit
20070 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 53  e3TableAffinityS
20080 74 72 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  tr(Vdbe *, Table
20090 20 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65   *);.char sqlite
200a0 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79  3CompareAffinity
200b0 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
200c0 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71  ar aff2);.int sq
200d0 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
200e0 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72  tyOk(Expr *pExpr
200f0 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e  , char idx_affin
20100 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ity);.char sqlit
20110 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45  e3ExprAffinity(E
20120 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
20130 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63   sqlite3Atoi64(c
20140 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
20150 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64  , int, u8);.void
20160 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71   sqlite3Error(sq
20170 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
20180 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76  st char*,...);.v
20190 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
201a0 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20  oBlob(sqlite3*, 
201b0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
201c0 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65  nt n);.u8 sqlite
201d0 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29  3HexToInt(int h)
201e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f  ;.int sqlite3Two
201f0 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  PartName(Parse *
20200 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
20210 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a   *, Token **);..
20220 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
20230 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
20240 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
20250 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e  ) || \.    defin
20260 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 5f  ed(SQLITE_DEBUG_
20270 4f 53 5f 54 52 41 43 45 29 0a 63 6f 6e 73 74 20  OS_TRACE).const 
20280 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
20290 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69  Name(int);.#endi
202a0 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  f..const char *s
202b0 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74  qlite3ErrStr(int
202c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
202d0 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a  adSchema(Parse *
202e0 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71  pParse);.CollSeq
202f0 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c   *sqlite3FindCol
20300 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38  lSeq(sqlite3*,u8
20310 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72   enc, const char
20320 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20  *,int);.CollSeq 
20330 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f  *sqlite3LocateCo
20340 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
20350 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  rse, const char*
20360 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  zName);.CollSeq 
20370 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c  *sqlite3ExprColl
20380 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
20390 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
203a0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
203b0 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65  prAddCollateToke
203c0 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  n(Parse *pParse,
203d0 20 45 78 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b   Expr*, Token*);
203e0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
203f0 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69  prAddCollateStri
20400 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ng(Parse*,Expr*,
20410 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78  const char*);.Ex
20420 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53  pr *sqlite3ExprS
20430 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a  kipCollate(Expr*
20440 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
20450 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  eckCollSeq(Parse
20460 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a   *, CollSeq *);.
20470 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
20480 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65  ObjectName(Parse
20490 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
204a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
204b0 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71  dbeSetChanges(sq
204c0 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69  lite3 *, int);.i
204d0 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  nt sqlite3AddInt
204e0 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
204f0 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  t sqlite3SubInt6
20500 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
20510 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34   sqlite3MulInt64
20520 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
20530 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28  sqlite3AbsInt32(
20540 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  int);.#ifdef SQL
20550 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e  ITE_ENABLE_8_3_N
20560 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65  AMES.void sqlite
20570 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e  3FileSuffix3(con
20580 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29  st char*, char*)
20590 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
205a0 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
205b0 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a  ix3(X,Y).#endif.
205c0 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  u8 sqlite3GetBoo
205d0 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  lean(const char 
205e0 2a 7a 2c 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20  *z,int);..const 
205f0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c  void *sqlite3Val
20600 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76  ueText(sqlite3_v
20610 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  alue*, u8);.int 
20620 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
20630 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  s(sqlite3_value*
20640 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
20650 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73  te3ValueSetStr(s
20660 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69  qlite3_value*, i
20670 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  nt, const void *
20680 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20  ,u8, .          
20690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f                vo
206a0 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
206b0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
206c0 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
206d0 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
206e0 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
206f0 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
20700 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
20710 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
20720 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
20730 6e 74 2c 20 75 38 29 3b 0a 23 69 66 64 65 66 20  nt, u8);.#ifdef 
20740 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
20750 41 54 33 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  AT3.char *sqlite
20760 33 55 74 66 38 74 6f 31 36 28 73 71 6c 69 74 65  3Utf8to16(sqlite
20770 33 20 2a 2c 20 75 38 2c 20 63 68 61 72 20 2a 2c  3 *, u8, char *,
20780 20 69 6e 74 2c 20 69 6e 74 20 2a 29 3b 0a 23 65   int, int *);.#e
20790 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
207a0 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71  ValueFromExpr(sq
207b0 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c  lite3 *, Expr *,
207c0 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33   u8, u8, sqlite3
207d0 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64  _value **);.void
207e0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
207f0 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74  lyAffinity(sqlit
20800 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20  e3_value *, u8, 
20810 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  u8);.#ifndef SQL
20820 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
20830 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
20840 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
20850 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
20860 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  y[];.extern cons
20870 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
20880 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
20890 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  wer[];.extern co
208a0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
208b0 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  r sqlite3CtypeMa
208c0 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  p[];.extern cons
208d0 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49  t Token sqlite3I
208e0 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65  ntTokens[];.exte
208f0 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74  rn SQLITE_WSD st
20900 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
20910 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
20920 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f  ;.extern SQLITE_
20930 57 53 44 20 46 75 6e 63 44 65 66 48 61 73 68 20  WSD FuncDefHash 
20940 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e  sqlite3GlobalFun
20950 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20  ctions;.#ifndef 
20960 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
20970 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
20980 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23  e3PendingByte;.#
20990 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69  endif.#endif.voi
209a0 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67  d sqlite3RootPag
209b0 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c  eMoved(sqlite3*,
209c0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
209d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69  .void sqlite3Rei
209e0 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b  ndex(Parse*, Tok
209f0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
20a00 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
20a10 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
20a20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
20a30 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72  rRenameTable(Par
20a40 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
20a50 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
20a60 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73  te3GetToken(cons
20a70 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
20a80 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20  *, int *);.void 
20a90 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72  sqlite3NestedPar
20aa0 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  se(Parse*, const
20ab0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
20ac0 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65  id sqlite3Expire
20ad0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
20ae0 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ts(sqlite3*);.in
20af0 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62  t sqlite3CodeSub
20b00 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20  select(Parse *, 
20b10 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  Expr *, int, int
20b20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
20b30 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a  electPrep(Parse*
20b40 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
20b50 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
20b60 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61  lite3MatchSpanNa
20b70 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  me(const char*, 
20b80 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
20b90 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
20ba0 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
20bb0 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61  te3ResolveExprNa
20bc0 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
20bd0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
20be0 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c  qlite3ResolveSel
20bf0 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  ectNames(Parse*,
20c00 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
20c10 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71  ntext*);.void sq
20c20 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66  lite3ResolveSelf
20c30 52 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a  Reference(Parse*
20c40 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72  ,Table*,int,Expr
20c50 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
20c60 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
20c70 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72  OrderGroupBy(Par
20c80 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  se*, Select*, Ex
20c90 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
20ca0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
20cb0 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74  te3ColumnDefault
20cc0 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a  (Vdbe *, Table *
20cd0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
20ce0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69  d sqlite3AlterFi
20cf0 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61  nishAddColumn(Pa
20d00 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  rse *, Token *);
20d10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
20d20 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e  erBeginAddColumn
20d30 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
20d40 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  t *);.CollSeq *s
20d50 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71  qlite3GetCollSeq
20d60 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c  (Parse*, u8, Col
20d70 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68  lSeq *, const ch
20d80 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ar*);.char sqlit
20d90 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63  e3AffinityType(c
20da0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
20db0 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
20dc0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
20dd0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
20de0 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48  lite3InvokeBusyH
20df0 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c  andler(BusyHandl
20e00 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  er*);.int sqlite
20e10 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a  3FindDb(sqlite3*
20e20 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
20e30 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65  qlite3FindDbName
20e40 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
20e50 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
20e60 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
20e70 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  ad(sqlite3*,int 
20e80 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  iDB);.void sqlit
20e90 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d  e3DeleteIndexSam
20ea0 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e  ples(sqlite3*,In
20eb0 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
20ec0 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74  te3DefaultRowEst
20ed0 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  (Index*);.void s
20ee0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
20ef0 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  keFunctions(sqli
20f00 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  te3*, int);.int 
20f10 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e  sqlite3IsLikeFun
20f20 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45  ction(sqlite3*,E
20f30 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29  xpr*,int*,char*)
20f40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69  ;.void sqlite3Mi
20f50 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28  nimumFileFormat(
20f60 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
20f70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
20f80 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20  chemaClear(void 
20f90 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69  *);.Schema *sqli
20fa0 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c  te3SchemaGet(sql
20fb0 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29  ite3 *, Btree *)
20fc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68  ;.int sqlite3Sch
20fd0 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74  emaToIndex(sqlit
20fe0 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a  e3 *db, Schema *
20ff0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
21000 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28  te3KeyInfoAlloc(
21010 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 4b  sqlite3*,int);.K
21020 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 49  eyInfo *sqlite3I
21030 6e 64 65 78 4b 65 79 69 6e 66 6f 28 50 61 72 73  ndexKeyinfo(Pars
21040 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 69  e *, Index *);.i
21050 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  nt sqlite3Create
21060 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  Func(sqlite3 *, 
21070 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
21080 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20  t, int, void *, 
21090 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
210a0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
210b0 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
210c0 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *),.  void (*)(s
210d0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
210e0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
210f0 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28  e **), void (*)(
21100 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
21110 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63  ),.  FuncDestruc
21120 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
21130 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  .);.int sqlite3A
21140 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a  piExit(sqlite3 *
21150 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  db, int);.int sq
21160 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74  lite3OpenTempDat
21170 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a  abase(Parse *);.
21180 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
21190 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63  AccumInit(StrAcc
211a0 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c  um*, char*, int,
211b0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
211c0 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
211d0 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73  d(StrAccum*,cons
211e0 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f  t char*,int);.vo
211f0 69 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64  id sqlite3Append
21200 53 70 61 63 65 28 53 74 72 41 63 63 75 6d 2a 2c  Space(StrAccum*,
21210 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  int);.char *sqli
21220 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
21230 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  h(StrAccum*);.vo
21240 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
21250 75 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d  umReset(StrAccum
21260 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21270 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53  SelectDestInit(S
21280 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69  electDest*,int,i
21290 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
212a0 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78  e3CreateColumnEx
212b0 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72  pr(sqlite3 *, Sr
212c0 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e  cList *, int, in
212d0 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  t);..void sqlite
212e0 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73  3BackupRestart(s
212f0 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29  qlite3_backup *)
21300 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ;.void sqlite3Ba
21310 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74  ckupUpdate(sqlit
21320 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e  e3_backup *, Pgn
21330 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a  o, const u8 *);.
21340 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
21350 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f  face to the LEMO
21360 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73  N-generated pars
21370 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  er.*/.void *sqli
21380 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76  te3ParserAlloc(v
21390 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f 74 29 29  oid*(*)(size_t))
213a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
213b0 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20  rserFree(void*, 
213c0 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
213d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72  .void sqlite3Par
213e0 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ser(void*, int, 
213f0 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a  Token, Parse*);.
21400 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41  #ifdef YYTRACKMA
21410 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e  XSTACKDEPTH.  in
21420 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 53  t sqlite3ParserS
21430 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b  tackPeak(void*);
21440 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
21450 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74  lite3AutoLoadExt
21460 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
21470 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
21480 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
21490 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  NSION.  void sql
214a0 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
214b0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
214c0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
214d0 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
214e0 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ions(X).#endif..
214f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21500 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
21510 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
21520 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a  ableLock(Parse *
21530 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20  , int, int, u8, 
21540 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23  const char *);.#
21550 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
21560 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
21570 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69  v,w,x,y,z).#endi
21580 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
21590 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69  _TEST.  int sqli
215a0 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67  te3Utf8To8(unsig
215b0 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  ned char*);.#end
215c0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
215d0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
215e0 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71  BLE.#  define sq
215f0 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 59  lite3VtabClear(Y
21600 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
21610 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29  te3VtabSync(X,Y)
21620 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
21630 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
21640 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64  Rollback(X).#  d
21650 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
21660 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65  bCommit(X).#  de
21670 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
21680 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20  InSync(db) 0.#  
21690 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
216a0 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64 65  abLock(X) .#  de
216b0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
216c0 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  Unlock(X).#  def
216d0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
216e0 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20  nlockList(X).#  
216f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
21700 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59  abSavepoint(X, Y
21710 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  , Z) SQLITE_OK.#
21720 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
21730 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20  GetVTable(X,Y)  
21740 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c  ((VTable*)0).#el
21750 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  se.   void sqlit
21760 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69  e3VtabClear(sqli
21770 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29  te3 *db, Table*)
21780 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
21790 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28  3VtabDisconnect(
217a0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
217b0 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73  le *p);.   int s
217c0 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73  qlite3VtabSync(s
217d0 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 68 61 72  qlite3 *db, char
217e0 20 2a 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c   **);.   int sql
217f0 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
21800 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
21810 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
21820 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  bCommit(sqlite3 
21830 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  *db);.   void sq
21840 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54  lite3VtabLock(VT
21850 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
21860 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
21870 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
21880 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
21890 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69  bUnlockList(sqli
218a0 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  te3*);.   int sq
218b0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
218c0 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  nt(sqlite3 *, in
218d0 74 2c 20 69 6e 74 29 3b 0a 20 20 20 56 54 61 62  t, int);.   VTab
218e0 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54  le *sqlite3GetVT
218f0 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
21900 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e  able*);.#  defin
21910 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
21920 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e  ync(db) ((db)->n
21930 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29  VTrans>0 && (db)
21940 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65  ->aVTrans==0).#e
21950 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
21960 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c  3VtabMakeWritabl
21970 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  e(Parse*,Table*)
21980 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
21990 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  abBeginParse(Par
219a0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
219b0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  en*, Token*, int
219c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
219d0 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50  tabFinishParse(P
219e0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
219f0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
21a00 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b  ArgInit(Parse*);
21a10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
21a20 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65  bArgExtend(Parse
21a30 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
21a40 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
21a50 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  reate(sqlite3*, 
21a60 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
21a70 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74  *, char **);.int
21a80 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
21a90 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20  Connect(Parse*, 
21aa0 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
21ab0 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
21ac0 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  roy(sqlite3*, in
21ad0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  t, const char *)
21ae0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
21af0 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a  bBegin(sqlite3 *
21b00 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e  , VTable *);.Fun
21b10 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61  cDef *sqlite3Vta
21b20 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f  bOverloadFunctio
21b30 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63  n(sqlite3 *,Func
21b40 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20  Def*, int nArg, 
21b50 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
21b60 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74  ite3InvalidFunct
21b70 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ion(sqlite3_cont
21b80 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
21b90 5f 76 61 6c 75 65 2a 2a 29 3b 0a 69 6e 74 20 73  _value**);.int s
21ba0 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
21bb0 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
21bc0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
21bd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
21be0 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
21bf0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
21c00 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
21c10 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65  int sqlite3Repre
21c20 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69  pare(Vdbe*);.voi
21c30 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
21c40 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72  tCheckLength(Par
21c50 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
21c60 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f  const char*);.Co
21c70 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69  llSeq *sqlite3Bi
21c80 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53  naryCompareCollS
21c90 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  eq(Parse *, Expr
21ca0 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74   *, Expr *);.int
21cb0 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65   sqlite3TempInMe
21cc0 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74  mory(const sqlit
21cd0 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  e3*);.const char
21ce0 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c   *sqlite3Journal
21cf0 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23  Modename(int);.#
21d00 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21d10 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c  IT_WAL.  int sql
21d20 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73  ite3Checkpoint(s
21d30 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
21d40 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  t, int*, int*);.
21d50 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c    int sqlite3Wal
21d60 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64  DefaultHook(void
21d70 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
21d80 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e   char*,int);.#en
21d90 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74  dif../* Declarat
21da0 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f  ions for functio
21db0 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c  ns in fkey.c. Al
21dc0 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72  l of these are r
21dd0 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f  eplaced by.** no
21de0 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d  -op macros if OM
21df0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
21e00 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68  s defined. In th
21e10 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69  is case no forei
21e20 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69  gn.** key functi
21e30 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c  onality is avail
21e40 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52  able. If OMIT_TR
21e50 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64  IGGER is defined
21e60 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52   but.** OMIT_FOR
21e70 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c  EIGN_KEY is not,
21e80 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68   only some of th
21e90 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
21ea0 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74  no-oped. In.** t
21eb0 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e  his case foreign
21ec0 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64   keys are parsed
21ed0 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66  , but no other f
21ee0 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
21ef0 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
21f00 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
21f10 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
21f20 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
21f30 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
21f40 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
21f50 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
21f60 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
21f70 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
21f80 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
21f90 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
21fa0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
21fb0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
21fc0 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
21fd0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
21fe0 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ist *, Table*);.
21ff0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
22000 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20  Actions(Parse*, 
22010 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74  Table*, ExprList
22020 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  *, int);.  int s
22030 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
22040 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
22050 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75   int*, int);.  u
22060 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  32 sqlite3FkOldm
22070 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ask(Parse*, Tabl
22080 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c  e*);.  FKey *sql
22090 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
220a0 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65  (Table *);.#else
220b0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
220c0 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c  e3FkActions(a,b,
220d0 63 2c 64 29 0a 20 20 23 64 65 66 69 6e 65 20 73  c,d).  #define s
220e0 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
220f0 62 2c 63 2c 64 29 0a 20 20 23 64 65 66 69 6e 65  b,c,d).  #define
22100 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
22110 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65  ble(a,b,c).  #de
22120 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c  fine sqlite3FkOl
22130 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20  dmask(a,b)      
22140 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
22150 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c  te3FkRequired(a,
22160 62 2c 63 2c 64 29 20 30 0a 23 65 6e 64 69 66 0a  b,c,d) 0.#endif.
22170 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
22180 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
22190 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
221a0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a  Delete(sqlite3 *
221b0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74  , Table*);.  int
221c0 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
221d0 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62  Index(Parse*,Tab
221e0 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a  le*,FKey*,Index*
221f0 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a  *,int**);.#else.
22200 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
22210 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20  3FkDelete(a,b). 
22220 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22230 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c  FkLocateIndex(a,
22240 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a  b,c,d,e).#endif.
22250 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c  ../*.** Availabl
22260 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72  e fault injector
22270 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75  s.  Should be nu
22280 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67  mbered beginning
22290 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66   with 0..*/.#def
222a0 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
222b0 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20  INJECTOR_MALLOC 
222c0 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51      0.#define SQ
222d0 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
222e0 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a  OR_COUNT      1.
222f0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
22300 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65  face to the code
22310 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64   in fault.c used
22320 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67   for identifying
22330 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c   "benign".** mal
22340 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68  loc failures. Th
22350 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65  is is only prese
22360 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49  nt if SQLITE_OMI
22370 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a  T_BUILTIN_TEST.*
22380 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64  * is not defined
22390 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
223a0 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
223b0 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c  _TEST.  void sql
223c0 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
223d0 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76  alloc(void);.  v
223e0 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65  oid sqlite3EndBe
223f0 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
22400 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
22410 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  e sqlite3BeginBe
22420 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23  nignMalloc().  #
22430 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e  define sqlite3En
22440 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  dBenignMalloc().
22450 23 65 6e 64 69 66 0a 0a 23 64 65 66 69 6e 65 20  #endif..#define 
22460 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20  IN_INDEX_ROWID  
22470 20 20 20 20 20 20 20 20 20 31 0a 23 64 65 66 69           1.#defi
22480 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20  ne IN_INDEX_EPH 
22490 20 20 20 20 20 20 20 20 20 20 20 20 32 0a 23 64              2.#d
224a0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
224b0 4e 44 45 58 5f 41 53 43 20 20 20 20 20 20 20 33  NDEX_ASC       3
224c0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
224d0 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 20  X_INDEX_DESC    
224e0 20 20 34 0a 69 6e 74 20 73 71 6c 69 74 65 33 46    4.int sqlite3F
224f0 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65  indInIndex(Parse
22500 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2a   *, Expr *, int*
22510 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
22520 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
22530 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69  WRITE.  int sqli
22540 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  te3JournalOpen(s
22550 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f  qlite3_vfs *, co
22560 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69  nst char *, sqli
22570 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c  te3_file *, int,
22580 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
22590 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
225a0 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a  sqlite3_vfs *);.
225b0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
225c0 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74  rnalCreate(sqlit
225d0 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e  e3_file *);.  in
225e0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
225f0 45 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66  Exists(sqlite3_f
22600 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20  ile *p);.#else. 
22610 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22620 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73  JournalSize(pVfs
22630 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46  ) ((pVfs)->szOsF
22640 69 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73  ile).  #define s
22650 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69  qlite3JournalExi
22660 73 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a  sts(p) 1.#endif.
22670 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
22680 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
22690 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74  te3_file *);.int
226a0 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
226b0 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e  alSize(void);.in
226c0 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f  t sqlite3IsMemJo
226d0 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69  urnal(sqlite3_fi
226e0 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49  le *);..#if SQLI
226f0 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
22700 48 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  H>0.  void sqlit
22710 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28  e3ExprSetHeight(
22720 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
22730 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73  xpr *p);.  int s
22740 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
22750 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29  Height(Select *)
22760 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45  ;.  int sqlite3E
22770 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50  xprCheckHeight(P
22780 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  arse*, int);.#el
22790 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
227a0 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
227b0 74 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65  t(x,y).  #define
227c0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
227d0 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20  prHeight(x) 0.  
227e0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
227f0 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78  xprCheckHeight(x
22800 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20  ,y).#endif..u32 
22810 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28  sqlite3Get4byte(
22820 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64  const u8*);.void
22830 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65   sqlite3Put4byte
22840 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66  (u8*, u32);..#if
22850 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
22860 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a  E_UNLOCK_NOTIFY.
22870 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
22880 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
22890 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74  sqlite3 *, sqlit
228a0 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  e3 *);.  void sq
228b0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
228c0 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  nlocked(sqlite3 
228d0 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  *db);.  void sql
228e0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
228f0 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  osed(sqlite3 *db
22900 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
22910 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
22920 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29  tionBlocked(x,y)
22930 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22940 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
22950 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e  cked(x).  #defin
22960 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
22970 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e  ionClosed(x).#en
22980 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
22990 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20  TE_DEBUG.  void 
229a0 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
229b0 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a  ce(FILE*, char *
229c0 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
229d0 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45   If the SQLITE_E
229e0 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78  NABLE IOTRACE ex
229f0 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c  ists then the gl
22a00 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a  obal variable.**
22a10 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
22a20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
22a30 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f  a printf-like ro
22a40 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a  utine used to.**
22a50 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69   print I/O traci
22a60 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f  ng messages. .*/
22a70 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
22a80 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20  NABLE_IOTRACE.# 
22a90 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
22aa0 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f  )  if( sqlite3Io
22ab0 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33  Trace ){ sqlite3
22ac0 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76  IoTrace A; }.  v
22ad0 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  oid sqlite3VdbeI
22ae0 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29  OTraceSql(Vdbe*)
22af0 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20  ;.SQLITE_EXTERN 
22b00 76 6f 69 64 20 28 2a 73 71 6c 69 74 65 33 49 6f  void (*sqlite3Io
22b10 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61  Trace)(const cha
22b20 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23  r*,...);.#else.#
22b30 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
22b40 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  A).# define sqli
22b50 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
22b60 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l(X).#endif../*.
22b70 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65  ** These routine
22b80 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
22b90 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64  for the mem2.c d
22ba0 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20  ebugging memory 
22bb0 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c  allocator.** onl
22bc0 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65  y.  They are use
22bd0 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  d to verify that
22be0 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65   different "type
22bf0 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  s" of memory.** 
22c00 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
22c10 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64  properly tracked
22c20 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a   by the system..
22c30 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
22c40 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73  debugSetType() s
22c50 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f  ets the "type" o
22c60 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
22c70 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65  to one of.** the
22c80 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f   MEMTYPE_* macro
22c90 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e  s defined below.
22ca0 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20    The type must 
22cb0 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74  be a bitmask wit
22cc0 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69  h.** a single bi
22cd0 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  t set..**.** sql
22ce0 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
22cf0 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
22d00 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  ue if any of the
22d10 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
22d20 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
22d30 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
22d40 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
22d50 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
22d60 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20  ugSetType()..** 
22d70 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
22d80 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65  asType() is inte
22d90 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73  nded for use ins
22da0 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61  ide assert() sta
22db0 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73  tements..**.** s
22dc0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
22dd0 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
22de0 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74  rue if none of t
22df0 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
22e00 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
22e10 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
22e20 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
22e30 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
22e40 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
22e50 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65  *.** Perhaps the
22e60 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20   most important 
22e70 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66  point is the dif
22e80 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
22e90 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20  MEMTYPE_HEAP.** 
22ea0 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  and MEMTYPE_LOOK
22eb0 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c  ASIDE.  If an al
22ec0 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54  location is MEMT
22ed0 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74  YPE_LOOKASIDE, t
22ee0 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20  hat means.** it 
22ef0 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
22f00 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f  allocated by loo
22f10 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74  kaside, except t
22f20 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61  he allocation wa
22f30 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f  s.** too large o
22f40 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20  r lookaside was 
22f50 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49  already full.  I
22f60 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
22f70 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74  o verify.** that
22f80 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61   allocations tha
22f90 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
22fa0 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c  n satisfied by l
22fb0 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74  ookaside are not
22fc0 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20  .** passed back 
22fd0 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  to non-lookaside
22fe0 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
22ff0 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20  .  Asserts such 
23000 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c  as the.** exampl
23010 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63  e above are plac
23020 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f  ed on the non-lo
23030 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
23040 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66  outines to verif
23050 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72  y.** this constr
23060 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c  aint. .**.** All
23070 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f   of this is no-o
23080 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69  p for a producti
23090 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e  on build.  It on
230a0 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a  ly comes into.**
230b0 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53   play when the S
230c0 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63  QLITE_MEMDEBUG c
230d0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
230e0 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23  on is used..*/.#
230f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
23100 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
23110 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
23120 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
23130 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
23140 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64  ebugHasType(void
23150 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
23160 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
23170 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65  pe(void*,u8);.#e
23180 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
23190 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
231a0 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d  ype(X,Y)  /* no-
231b0 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73  op */.# define s
231c0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
231d0 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20  sType(X,Y)  1.# 
231e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
231f0 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59  mdebugNoType(X,Y
23200 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65  )   1.#endif.#de
23210 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41  fine MEMTYPE_HEA
23220 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  P       0x01  /*
23230 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c   General heap al
23240 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
23250 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f  fine MEMTYPE_LOO
23260 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a  KASIDE  0x02  /*
23270 20 4d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   Might have been
23280 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72   lookaside memor
23290 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  y */.#define MEM
232a0 54 59 50 45 5f 53 43 52 41 54 43 48 20 20 20 20  TYPE_SCRATCH    
232b0 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68  0x04  /* Scratch
232c0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
232d0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
232e0 50 43 41 43 48 45 20 20 20 20 20 30 78 30 38 20  PCACHE     0x08 
232f0 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 61   /* Page cache a
23300 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
23310 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 44 42  efine MEMTYPE_DB
23320 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20 2f           0x10  /
23330 2a 20 55 73 65 73 20 73 71 6c 69 74 65 33 44 62  * Uses sqlite3Db
23340 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c 69  Malloc, not sqli
23350 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 23 65  te_malloc */..#e
23360 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49  ndif /* _SQLITEI
23370 4e 54 5f 48 5f 20 2a 2f 0a                       NT_H_ */.