/ Hex Artifact Content
Login

Artifact 7580edf7e7e13af8dff6152666e4ea32535abf8c:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74  .** Similar is t
0540: 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  rue for Mac OS X
0550: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
0560: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20  upported on Mac 
0570: 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72  OS X 9 and later
0580: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
0590: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
05a0: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f  # define _LARGE_
05b0: 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69  FILE       1.# i
05c0: 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53  fndef _FILE_OFFS
05d0: 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69  ET_BITS.#   defi
05e0: 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ne _FILE_OFFSET_
05f0: 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a  BITS 64.# endif.
0600: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0610: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0620: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75  dif../*.** Inclu
0630: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  de the configura
0640: 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70  tion header outp
0650: 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65  ut by 'configure
0660: 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67  ' if we're using
0670: 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66   the.** autoconf
0680: 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a  -based build.*/.
0690: 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c  #ifdef _HAVE_SQL
06a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e  ITE_CONFIG_H.#in
06b0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22  clude "config.h"
06c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
06d0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
06e0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
06f0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
0700: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
0710: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
0720: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
0730: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
0740: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
0750: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
0760: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
0770: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
0780: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
0790: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
07a0: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
07b0: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
07c0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
07d0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
07e0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
07f0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
0800: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
0810: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
0820: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
0830: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
0840: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
0850: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
0860: 2e 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f 47  .. */.#ifndef _G
0870: 4e 55 5f 53 4f 55 52 43 45 0a 23 20 64 65 66 69  NU_SOURCE.# defi
0880: 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ne _GNU_SOURCE.#
0890: 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
08a0: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
08b0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 42 53 44  && !defined(_BSD
08c0: 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e  _SOURCE).# defin
08d0: 65 20 5f 42 53 44 5f 53 4f 55 52 43 45 0a 23 65  e _BSD_SOURCE.#e
08e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
08f0: 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65 61  ude standard hea
0900: 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65 63  der files as nec
0910: 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66  essary.*/.#ifdef
0920: 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23   HAVE_STDINT_H.#
0930: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e  include <stdint.
0940: 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  h>.#endif.#ifdef
0950: 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f 48   HAVE_INTTYPES_H
0960: 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79  .#include <intty
0970: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  pes.h>.#endif../
0980: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
0990: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
09a0: 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74  ed to cast point
09b0: 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20  ers to integers 
09c0: 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20  and.** integers 
09d0: 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68  to pointers.  Th
09e0: 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69  e way you do thi
09f0: 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e  s varies from on
0a00: 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  e compiler.** to
0a10: 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65   the next, so we
0a20: 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20   have developed 
0a30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  the following se
0a40: 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65  t of #if stateme
0a50: 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61  nts.** to genera
0a60: 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d  te appropriate m
0a70: 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65  acros for a wide
0a80: 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c   range of compil
0a90: 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ers..**.** The c
0aa0: 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77 61  orrect "ANSI" wa
0ab0: 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20  y to do this is 
0ac0: 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70 74  to use the intpt
0ad0: 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55 6e  r_t type. .** Un
0ae0: 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68 61  fortunately, tha
0af0: 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f 74  t typedef is not
0b00: 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c   available on al
0b10: 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a  l compilers, or.
0b20: 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61 69  ** if it is avai
0b30: 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69 72  lable, it requir
0b40: 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f  es an #include o
0b50: 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64 65  f specific heade
0b60: 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79 20  rs.** that vary 
0b70: 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65  from one machine
0b80: 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a   to the next..**
0b90: 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36 30  .** Ticket #3860
0ba0: 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d  :  The llvm-gcc-
0bb0: 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f  4.2 compiler fro
0bc0: 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f  m Apple chokes o
0bd0: 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64 2a  n.** the ((void*
0be0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0bf0: 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75 74   construct.  But
0c00: 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20   MSVC chokes on 
0c10: 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a  ((void*)(X))..**
0c20: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 64   So we have to d
0c30: 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f 73  efine the macros
0c40: 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77 61   in different wa
0c50: 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ys depending on 
0c60: 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e  the.** compiler.
0c70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0c80: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0c90: 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65 20  )  /* This case 
0ca0: 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20  should work for 
0cb0: 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  GCC */.# define 
0cc0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
0cd0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 5f  R(X)  ((void*)(_
0ce0: 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29  _PTRDIFF_TYPE__)
0cf0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
0d00: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
0d10: 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54 52  X)  ((int)(__PTR
0d20: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
0d30: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
0d40: 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20 20  __GNUC__)       
0d50: 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d  /* Works for com
0d60: 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68 61  pilers other tha
0d70: 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69  n LLVM */.# defi
0d80: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
0d90: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
0da0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0dc0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
0dd0: 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29 58  ((int)(((char*)X
0de0: 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65 6c  )-(char*)0)).#el
0df0: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f  if defined(HAVE_
0e00: 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55  STDINT_H)   /* U
0e10: 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66 20  se this case if 
0e20: 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65 61  we have ANSI hea
0e30: 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  ders */.# define
0e40: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0e50: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0e60: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 20  intptr_t)(X)).# 
0e70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0e80: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0e90: 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29  nt)(intptr_t)(X)
0ea0: 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20 20  ).#else         
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ec0: 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61 20   /* Generates a 
0ed0: 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69 74  warning - but it
0ee0: 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f   always works */
0ef0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0f00: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
0f10: 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20 64  ((void*)(X)).# d
0f20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
0f30: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
0f40: 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  t)(X)).#endif../
0f50: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
0f60: 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f  THREADSAFE macro
0f70: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
0f80: 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a   as 0, 1, or 2..
0f90: 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78  ** 0 means mutex
0fa0: 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74  es are permanent
0fb0: 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74  ly disable and t
0fc0: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65  he library is ne
0fd0: 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66  ver.** threadsaf
0fe0: 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20  e.  1 means the 
0ff0: 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61  library is seria
1000: 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74  lized which is t
1010: 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65  he highest.** le
1020: 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66  vel of threadsaf
1030: 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68  ety.  2 means th
1040: 65 20 6c 69 62 61 72 79 20 69 73 20 6d 75 6c 74  e libary is mult
1050: 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74  ithreaded - mult
1060: 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20  iple.** threads 
1070: 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61  can use SQLite a
1080: 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f  s long as no two
1090: 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20   threads try to 
10a0: 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20  use the same.** 
10b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
10c0: 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20  ion at the same 
10d0: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65  time..**.** Olde
10e0: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
10f0: 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74  Lite used an opt
1100: 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45  ional THREADSAFE
1110: 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75   macro..** We su
1120: 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c  pport that for l
1130: 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64  egacy..*/.#if !d
1140: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48  efined(SQLITE_TH
1150: 52 45 41 44 53 41 46 45 29 0a 23 69 66 20 64 65  READSAFE).#if de
1160: 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46 45  fined(THREADSAFE
1170: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1180: 45 5f 54 48 52 45 41 44 53 41 46 45 20 54 48 52  E_THREADSAFE THR
1190: 45 41 44 53 41 46 45 0a 23 65 6c 73 65 0a 23 20  EADSAFE.#else.# 
11a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48  define SQLITE_TH
11b0: 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d  READSAFE 1 /* IM
11c0: 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39  P: R-07272-22309
11d0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69   */.#endif.#endi
11e0: 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61  f../*.** Powersa
11f0: 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20  fe overwrite is 
1200: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  on by default.  
1210: 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65  But can be turne
1220: 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74  d off using.** t
1230: 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45  he -DSQLITE_POWE
1240: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d  RSAFE_OVERWRITE=
1250: 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f  0 command-line o
1260: 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ption..*/.#ifnde
1270: 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  f SQLITE_POWERSA
1280: 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64  FE_OVERWRITE.# d
1290: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57  efine SQLITE_POW
12a0: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
12b0: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
12c0: 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41   The SQLITE_DEFA
12d0: 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 6d 61  ULT_MEMSTATUS ma
12e0: 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69  cro must be defi
12f0: 6e 65 64 20 61 73 20 65 69 74 68 65 72 20 30 20  ned as either 0 
1300: 6f 72 20 31 2e 0a 2a 2a 20 49 74 20 64 65 74 65  or 1..** It dete
1310: 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f  rmines whether o
1320: 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74 75 72  r not the featur
1330: 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 0a 2a  es related to .*
1340: 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  * SQLITE_CONFIG_
1350: 4d 45 4d 53 54 41 54 55 53 20 61 72 65 20 61 76  MEMSTATUS are av
1360: 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75  ailable by defau
1370: 6c 74 20 6f 72 20 6e 6f 74 2e 20 54 68 69 73 20  lt or not. This 
1380: 76 61 6c 75 65 20 63 61 6e 0a 2a 2a 20 62 65 20  value can.** be 
1390: 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20 72 75  overridden at ru
13a0: 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20  ntime using the 
13b0: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 29  sqlite3_config()
13c0: 20 41 50 49 2e 0a 2a 2f 0a 23 69 66 20 21 64 65   API..*/.#if !de
13d0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46  fined(SQLITE_DEF
13e0: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a  AULT_MEMSTATUS).
13f0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1400: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
1410: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
1420: 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66  * Exactly one of
1430: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
1440: 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65  acros must be de
1450: 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74  fined in order t
1460: 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69  o.** specify whi
1470: 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ch memory alloca
1480: 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74  tion subsystem t
1490: 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  o use..**.**    
14a0: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
14b0: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f  ALLOC          /
14c0: 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73  / Use normal sys
14d0: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20  tem malloc().** 
14e0: 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32      SQLITE_WIN32
14f0: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1500: 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e    // Use Win32 n
1510: 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a  ative heap API.*
1520: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52  *     SQLITE_ZER
1530: 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  O_MALLOC        
1540: 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75      // Use a stu
1550: 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74  b allocator that
1560: 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a   always fails.**
1570: 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44       SQLITE_MEMD
1580: 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20 20  EBUG            
1590: 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20     // Debugging 
15a0: 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65  version of syste
15b0: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a  m malloc().**.**
15c0: 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20   On Windows, if 
15d0: 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32  the SQLITE_WIN32
15e0: 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45  _MALLOC_VALIDATE
15f0: 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65   macro is define
1600: 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73  d and the.** ass
1610: 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65  ert() macro is e
1620: 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c  nabled, each cal
1630: 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32  l into the Win32
1640: 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75 62   native heap sub
1650: 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63  system.** will c
1660: 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61 74  ause HeapValidat
1670: 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20  e to be called. 
1680: 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61 74   If heap validat
1690: 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c  ion should fail,
16a0: 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e   an.** assertion
16b0: 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72   will be trigger
16c0: 65 64 2e 0a 2a 2a 0a 2a 2a 20 28 48 69 73 74 6f  ed..**.** (Histo
16d0: 72 69 63 61 6c 20 6e 6f 74 65 3a 20 20 54 68 65  rical note:  The
16e0: 72 65 20 75 73 65 64 20 74 6f 20 62 65 20 73 65  re used to be se
16f0: 76 65 72 61 6c 20 6f 74 68 65 72 20 6f 70 74 69  veral other opti
1700: 6f 6e 73 2c 20 62 75 74 20 77 65 27 76 65 0a 2a  ons, but we've.*
1710: 2a 20 70 61 72 65 64 20 69 74 20 64 6f 77 6e 20  * pared it down 
1720: 74 6f 20 6a 75 73 74 20 74 68 65 73 65 20 74 68  to just these th
1730: 72 65 65 2e 29 0a 2a 2a 0a 2a 2a 20 49 66 20 6e  ree.).**.** If n
1740: 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65  one of the above
1750: 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68   are defined, th
1760: 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59  en set SQLITE_SY
1770: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a  STEM_MALLOC as.*
1780: 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a  * the default..*
1790: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
17a0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
17b0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
17c0: 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  d(SQLITE_WIN32_M
17d0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
17e0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f  ined(SQLITE_ZERO
17f0: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
1800: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45  efined(SQLITE_ME
1810: 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f  MDEBUG)>1.# erro
1820: 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f  r "Two or more o
1830: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1840: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
1850: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
1860: 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64  ns\. are defined
1870: 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65   but at most one
1880: 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53   is allowed:\. S
1890: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
18a0: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33  LOC, SQLITE_WIN3
18b0: 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45  2_MALLOC, SQLITE
18c0: 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c  _MEMDEBUG,\. SQL
18d0: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22  ITE_ZERO_MALLOC"
18e0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
18f0: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
1900: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
1910: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
1920: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
1930: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
1940: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
1950: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
1960: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30  ITE_MEMDEBUG)==0
1970: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1980: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31  _SYSTEM_MALLOC 1
1990: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
19a0: 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  f SQLITE_MALLOC_
19b0: 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f  SOFT_LIMIT is no
19c0: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79  t zero, then try
19d0: 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20   to keep the.** 
19e0: 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  sizes of memory 
19f0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f  allocations belo
1a00: 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65  w this value whe
1a10: 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a  re possible..*/.
1a20: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1a30: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
1a40: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
1a50: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
1a60: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
1a70: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
1a80: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
1a90: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
1aa0: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
1ab0: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
1ac0: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
1ad0: 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74  n most Unix syst
1ae0: 65 6d 73 2e 20 20 42 75 74 20 4d 61 63 20 4f 53  ems.  But Mac OS
1af0: 20 58 20 69 73 20 64 69 66 66 65 72 65 6e 74 2e   X is different.
1b00: 0a 2a 2a 20 54 68 65 20 5f 58 4f 50 45 4e 5f 53  .** The _XOPEN_S
1b10: 4f 55 52 43 45 20 64 65 66 69 6e 65 20 63 61 75  OURCE define cau
1b20: 73 65 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72  ses problems for
1b30: 20 4d 61 63 20 4f 53 20 58 20 77 65 20 61 72 65   Mac OS X we are
1b40: 20 74 6f 6c 64 2c 0a 2a 2a 20 73 6f 20 69 74 20   told,.** so it 
1b50: 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 72 65  is omitted there
1b60: 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20 23 32  .  See ticket #2
1b70: 36 37 33 2e 0a 2a 2a 0a 2a 2a 20 4c 61 74 65 72  673..**.** Later
1b80: 20 77 65 20 6c 65 61 72 6e 20 74 68 61 74 20 5f   we learn that _
1b90: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 69 73 20  XOPEN_SOURCE is 
1ba0: 70 6f 6f 72 6c 79 20 6f 72 20 69 6e 63 6f 72 72  poorly or incorr
1bb0: 65 63 74 6c 79 0a 2a 2a 20 69 6d 70 6c 65 6d 65  ectly.** impleme
1bc0: 6e 74 65 64 20 6f 6e 20 73 6f 6d 65 20 73 79 73  nted on some sys
1bd0: 74 65 6d 73 2e 20 20 53 6f 20 77 65 20 61 76 6f  tems.  So we avo
1be0: 69 64 20 64 65 66 69 6e 69 6e 67 20 69 74 20 61  id defining it a
1bf0: 74 20 61 6c 6c 0a 2a 2a 20 69 66 20 69 74 20 69  t all.** if it i
1c00: 73 20 61 6c 72 65 61 64 79 20 64 65 66 69 6e 65  s already define
1c10: 64 20 6f 72 20 69 66 20 69 74 20 69 73 20 75 6e  d or if it is un
1c20: 6e 65 65 64 65 64 20 62 65 63 61 75 73 65 20 77  needed because w
1c30: 65 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 64 6f 69  e are.** not doi
1c40: 6e 67 20 61 20 74 68 72 65 61 64 73 61 66 65 20  ng a threadsafe 
1c50: 62 75 69 6c 64 2e 20 20 54 69 63 6b 65 74 20 23  build.  Ticket #
1c60: 32 36 38 31 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  2681..**.** See 
1c70: 61 6c 73 6f 20 74 69 63 6b 65 74 20 23 32 37 34  also ticket #274
1c80: 31 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  1..*/.#if !defin
1c90: 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45  ed(_XOPEN_SOURCE
1ca0: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f  ) && !defined(__
1cb0: 44 41 52 57 49 4e 5f 5f 29 20 5c 0a 20 26 26 20  DARWIN__) \. && 
1cc0: 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  !defined(__APPLE
1cd0: 5f 5f 29 20 26 26 20 53 51 4c 49 54 45 5f 54 48  __) && SQLITE_TH
1ce0: 52 45 41 44 53 41 46 45 0a 23 20 20 64 65 66 69  READSAFE.#  defi
1cf0: 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45  ne _XOPEN_SOURCE
1d00: 20 35 30 30 20 20 2f 2a 20 4e 65 65 64 65 64 20   500  /* Needed 
1d10: 74 6f 20 65 6e 61 62 6c 65 20 70 74 68 72 65 61  to enable pthrea
1d20: 64 20 72 65 63 75 72 73 69 76 65 20 6d 75 74 65  d recursive mute
1d30: 78 65 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  xes */.#endif../
1d40: 2a 0a 2a 2a 20 54 68 65 20 54 43 4c 20 68 65 61  *.** The TCL hea
1d50: 64 65 72 73 20 61 72 65 20 6f 6e 6c 79 20 6e 65  ders are only ne
1d60: 65 64 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c  eded when compil
1d70: 69 6e 67 20 74 68 65 20 54 43 4c 20 62 69 6e 64  ing the TCL bind
1d80: 69 6e 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ings..*/.#if def
1d90: 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 43 4c 29  ined(SQLITE_TCL)
1da0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 54 43 4c 53   || defined(TCLS
1db0: 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 74 63  H).# include <tc
1dc0: 6c 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l.h>.#endif../*.
1dd0: 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53 51  ** NDEBUG and SQ
1de0: 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20 6f  LITE_DEBUG are o
1df0: 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73 68  pposites.  It sh
1e00: 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20 74  ould always be t
1e10: 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69  rue that.** defi
1e20: 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64 65  ned(NDEBUG)==!de
1e30: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
1e40: 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69 73  UG).  If this is
1e50: 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 74   not currently t
1e60: 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20  rue,.** make it 
1e70: 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e 67  true by defining
1e80: 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e   or undefining N
1e90: 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74  DEBUG..**.** Set
1ea0: 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b 65  ting NDEBUG make
1eb0: 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c  s the code small
1ec0: 65 72 20 61 6e 64 20 72 75 6e 20 66 61 73 74 65  er and run faste
1ed0: 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74  r by disabling t
1ee0: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 61 73 73  he.** number ass
1ef0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
1f00: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
1f10: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
1f20: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
1f30: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
1f40: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
1f50: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
1f60: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
1f70: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
1f80: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
1f90: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
1fa0: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
1fb0: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
1fc0: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
1fd0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
1fe0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1ff0: 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66  TE_DEBUG) .# def
2000: 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e  ine NDEBUG 1.#en
2010: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2020: 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  NDEBUG) && defin
2030: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2040: 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a  .# undef NDEBUG.
2050: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2060: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
2070: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
2080: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
2090: 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a  sting.  When .**
20a0: 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20   doing coverage 
20b0: 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e  testing, the con
20c0: 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68  dition inside th
20d0: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a  e argument to.**
20e0: 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74   testcase() must
20f0: 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f   be evaluated bo
2100: 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  th true and fals
2110: 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
2120: 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68   get full branch
2130: 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20   coverage.  The 
2140: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
2150: 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20   is inserted.** 
2160: 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61  to help ensure a
2170: 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76  dequate test cov
2180: 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20  erage in places 
2190: 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20  where simple.** 
21a0: 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69  condition/decisi
21b0: 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69  on coverage is i
21c0: 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20  nadequate.  For 
21d0: 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73  example, testcas
21e0: 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  e().** can be us
21f0: 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure 
2200: 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20  boundary values 
2210: 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72  are tested.  For
2220: 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74  .** bitmask test
2230: 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61  s, testcase() ca
2240: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b  n be used to mak
2250: 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a  e sure each bit.
2260: 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e  ** is significan
2270: 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65  t and used at le
2280: 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77  ast once.  On sw
2290: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a  itch statements.
22a0: 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c  ** where multipl
22b0: 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68  e cases go to th
22c0: 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20  e same block of 
22d0: 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29  code, testcase()
22e0: 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74  .** can insure t
22f0: 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72  hat all cases ar
2300: 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a  e evaluated..**.
2310: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2320: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20  _COVERAGE_TEST. 
2330: 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76   void sqlite3Cov
2340: 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65  erage(int);.# de
2350: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
2360: 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74    if( X ){ sqlit
2370: 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e  e3Coverage(__LIN
2380: 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20  E__); }.#else.# 
2390: 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28  define testcase(
23a0: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
23b0: 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61   The TESTONLY ma
23c0: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65  cro is used to e
23d0: 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20  nclose variable 
23e0: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a  declarations or.
23f0: 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66  ** other bits of
2400: 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e   code that are n
2410: 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74  eeded to support
2420: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a   the arguments.*
2430: 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73  * within testcas
2440: 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29  e() and assert()
2450: 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20   macros..*/.#if 
2460: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
2470: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
2480: 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54  TE_COVERAGE_TEST
2490: 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f  ).# define TESTO
24a0: 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a  NLY(X)  X.#else.
24b0: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
24c0: 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Y(X).#endif../*.
24d0: 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20  ** Sometimes we 
24e0: 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f  need a small amo
24f0: 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68  unt of code such
2500: 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69   as a variable i
2510: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
2520: 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20   to setup for a 
2530: 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73  later assert() s
2540: 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f  tatement.  We do
2550: 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63   not want this c
2560: 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72  ode to.** appear
2570: 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69   when assert() i
2580: 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65  s disabled.  The
2590: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
25a0: 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a   is therefore.**
25b0: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e   used to contain
25c0: 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65   that setup code
25d0: 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72  .  The "VVA" acr
25e0: 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a  onym stands for.
25f0: 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e  ** "Verification
2600: 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e  , Validation, an
2610: 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22  d Accreditation"
2620: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
2630: 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77  s, the.** code w
2640: 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29  ithin VVA_ONLY()
2650: 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64   will only run d
2660: 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69  uring verificati
2670: 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f  on processes..*/
2680: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
2690: 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c  # define VVA_ONL
26a0: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
26b0: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
26c0: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
26d0: 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20   The ALWAYS and 
26e0: 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72  NEVER macros sur
26f0: 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78  round boolean ex
2700: 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20  pressions which 
2710: 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64  .** are intended
2720: 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72   to always be tr
2730: 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73  ue or false, res
2740: 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68  pectively.  Such
2750: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20  .** expressions 
2760: 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64  could be omitted
2770: 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63   from the code c
2780: 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20  ompletely.  But 
2790: 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c  they.** are incl
27a0: 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63 61  uded in a few ca
27b0: 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ses in order to 
27c0: 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73 69  enhance the resi
27d0: 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c  lience.** of SQL
27e0: 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65  ite to unexpecte
27f0: 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20  d behavior - to 
2800: 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73  make the code "s
2810: 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20  elf-healing".** 
2820: 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61 74  or "ductile" rat
2830: 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22  her than being "
2840: 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61  brittle" and cra
2850: 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69 72  shing at the fir
2860: 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e  st.** hint of un
2870: 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72  planned behavior
2880: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ..**.** In other
2890: 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61   words, ALWAYS a
28a0: 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64 64  nd NEVER are add
28b0: 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65  ed for defensive
28c0: 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65   code..**.** Whe
28d0: 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  n doing coverage
28e0: 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20   testing ALWAYS 
28f0: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68 61  and NEVER are ha
2900: 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62  rd-coded to.** b
2910: 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  e true and false
2920: 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72   so that the unr
2930: 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68  eachable code th
2940: 65 6e 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a  en specify will.
2950: 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65  ** not be counte
2960: 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f  d as untested co
2970: 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  de..*/.#if defin
2980: 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41  ed(SQLITE_COVERA
2990: 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  GE_TEST).# defin
29a0: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
29b0: 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (1).# define NE
29c0: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29  VER(X)       (0)
29d0: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
29e0: 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65  NDEBUG).# define
29f0: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
2a00: 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30  ((X)?1:(assert(0
2a10: 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e  ),0)).# define N
2a20: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28  EVER(X)       ((
2a30: 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29  X)?(assert(0),1)
2a40: 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  :0).#else.# defi
2a50: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
2a60: 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e    (X).# define N
2a70: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58  EVER(X)       (X
2a80: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
2a90: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
2aa0: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
2ab0: 70 75 74 20 69 73 20 61 20 69 6e 74 65 67 65 72  put is a integer
2ac0: 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72   that is too lar
2ad0: 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20  ge.** to fit in 
2ae0: 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d  32-bits.  This m
2af0: 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
2b00: 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74  ide of various t
2b10: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63  estcase().** mac
2b20: 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74 68  ros to verify th
2b30: 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74 65  at we have teste
2b40: 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72  d SQLite for lar
2b50: 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e  ge-file support.
2b60: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42  .*/.#define IS_B
2b70: 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29  IG_INT(X)  (((X)
2b80: 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66 66  &~(i64)0xfffffff
2b90: 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  f)!=0)../*.** Th
2ba0: 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79  e macro unlikely
2bb0: 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61  () is a hint tha
2bc0: 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f  t surrounds a bo
2bd0: 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73  olean.** express
2be0: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
2bf0: 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72  lly false.  Macr
2c00: 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f  o likely() surro
2c10: 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61  unds.** a boolea
2c20: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  n expression tha
2c30: 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75  t is usually tru
2c40: 65 2e 20 20 47 43 43 20 69 73 20 61 62 6c 65 20  e.  GCC is able 
2c50: 74 6f 0a 2a 2a 20 75 73 65 20 74 68 65 73 65 20  to.** use these 
2c60: 68 69 6e 74 73 20 74 6f 20 67 65 6e 65 72 61 74  hints to generat
2c70: 65 20 62 65 74 74 65 72 20 63 6f 64 65 2c 20 73  e better code, s
2c80: 6f 6d 65 74 69 6d 65 73 2e 0a 2a 2f 0a 23 69 66  ometimes..*/.#if
2c90: 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f   defined(__GNUC_
2ca0: 5f 29 20 26 26 20 30 0a 23 20 64 65 66 69 6e 65  _) && 0.# define
2cb0: 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 5f 5f   likely(X)    __
2cc0: 62 75 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28  builtin_expect((
2cd0: 58 29 2c 31 29 0a 23 20 64 65 66 69 6e 65 20 75  X),1).# define u
2ce0: 6e 6c 69 6b 65 6c 79 28 58 29 20 20 5f 5f 62 75  nlikely(X)  __bu
2cf0: 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28 58 29  iltin_expect((X)
2d00: 2c 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ,0).#else.# defi
2d10: 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20  ne likely(X)    
2d20: 21 21 28 58 29 0a 23 20 64 65 66 69 6e 65 20 75  !!(X).# define u
2d30: 6e 6c 69 6b 65 6c 79 28 58 29 20 20 21 21 28 58  nlikely(X)  !!(X
2d40: 29 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75  ).#endif..#inclu
2d50: 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 23  de "sqlite3.h".#
2d60: 69 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22  include "hash.h"
2d70: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65  .#include "parse
2d80: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h".#include <st
2d90: 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  dio.h>.#include 
2da0: 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c  <stdlib.h>.#incl
2db0: 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23  ude <string.h>.#
2dc0: 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e  include <assert.
2dd0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h>.#include <std
2de0: 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66  def.h>../*.** If
2df0: 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61   compiling for a
2e00: 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20   processor that 
2e10: 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70  lacks floating p
2e20: 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a  oint support,.**
2e30: 20 73 75 62 73 74 69 74 75 74 65 20 69 6e 74 65   substitute inte
2e40: 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67  ger for floating
2e50: 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66  -point.*/.#ifdef
2e60: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
2e70: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65  ATING_POINT.# de
2e80: 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69  fine double sqli
2e90: 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e  te_int64.# defin
2ea0: 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69  e float sqlite_i
2eb0: 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f  nt64.# define LO
2ec0: 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71  NGDOUBLE_TYPE sq
2ed0: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e  lite_int64.# ifn
2ee0: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
2ef0: 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  BL.#   define SQ
2f00: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28  LITE_BIG_DBL (((
2f10: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29  sqlite3_int64)1)
2f20: 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20  <<50).# endif.# 
2f30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d  define SQLITE_OM
2f40: 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43  IT_DATETIME_FUNC
2f50: 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S 1.# define SQL
2f60: 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31  ITE_OMIT_TRACE 1
2f70: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
2f80: 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42  MIXED_ENDIAN_64B
2f90: 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66  IT_FLOAT.# undef
2fa0: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e   SQLITE_HAVE_ISN
2fb0: 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  AN.#endif.#ifnde
2fc0: 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  f SQLITE_BIG_DBL
2fd0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2fe0: 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a  _BIG_DBL (1e99).
2ff0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d  #endif../*.** OM
3000: 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74  IT_TEMPDB is set
3010: 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f   to 1 if SQLITE_
3020: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64  OMIT_TEMPDB is d
3030: 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20  efined, or 0.** 
3040: 61 66 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e  afterward. Havin
3050: 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c  g this macro all
3060: 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73 65 20  ows us to cause 
3070: 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a  the C compiler .
3080: 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20  ** to omit code 
3090: 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61 62  used by TEMP tab
30a0: 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73 73  les without mess
30b0: 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65 6d  y #ifndef statem
30c0: 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ents..*/.#ifdef 
30d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50  SQLITE_OMIT_TEMP
30e0: 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f  DB.#define OMIT_
30f0: 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a 23  TEMPDB 1.#else.#
3100: 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50  define OMIT_TEMP
3110: 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  DB 0.#endif../*.
3120: 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f 72  ** The "file for
3130: 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20 61  mat" number is a
3140: 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 69  n integer that i
3150: 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68  s incremented wh
3160: 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56 44  enever.** the VD
3170: 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f  BE-level file fo
3180: 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20 54  rmat changes.  T
3190: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
31a0: 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a 2a  ros define the.*
31b0: 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 69  * the default fi
31c0: 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65  le format for ne
31d0: 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64 20  w databases and 
31e0: 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65  the maximum file
31f0: 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20   format.** that 
3200: 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e 20  the library can 
3210: 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  read..*/.#define
3220: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45   SQLITE_MAX_FILE
3230: 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64 65  _FORMAT 4.#ifnde
3240: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
3250: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64  _FILE_FORMAT.# d
3260: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
3270: 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  AULT_FILE_FORMAT
3280: 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   4.#endif../*.**
3290: 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   Determine wheth
32a0: 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65 20  er triggers are 
32b0: 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65 66  recursive by def
32c0: 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e 20  ault.  This can 
32d0: 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61 74  be.** changed at
32e0: 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20   run-time using 
32f0: 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66  a pragma..*/.#if
3300: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
3310: 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52  ULT_RECURSIVE_TR
3320: 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65 20  IGGERS.# define 
3330: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52  SQLITE_DEFAULT_R
3340: 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52  ECURSIVE_TRIGGER
3350: 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 0.#endif../*.*
3360: 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66 61  * Provide a defa
3370: 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53 51  ult value for SQ
3380: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20  LITE_TEMP_STORE 
3390: 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e 6f  in case it is no
33a0: 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f  t specified.** o
33b0: 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69  n the command-li
33c0: 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ne.*/.#ifndef SQ
33d0: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a  LITE_TEMP_STORE.
33e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
33f0: 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65 6e  TEMP_STORE 1.#en
3400: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64  dif../*.** GCC d
3410: 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74  oes not define t
3420: 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61  he offsetof() ma
3430: 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76  cro so we'll hav
3440: 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75  e to do it.** ou
3450: 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e  rselves..*/.#ifn
3460: 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65  def offsetof.#de
3470: 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54  fine offsetof(ST
3480: 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28  RUCTURE,FIELD) (
3490: 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28  (int)((char*)&((
34a0: 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46  STRUCTURE*)0)->F
34b0: 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  IELD)).#endif../
34c0: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65  *.** Check to se
34d0: 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e  e if this machin
34e0: 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20 20  e uses EBCDIC.  
34f0: 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74  (Yes, believe it
3500: 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72   or.** not, ther
3510: 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68  e are still mach
3520: 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20 74  ines out there t
3530: 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e 29  hat use EBCDIC.)
3540: 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27  .*/.#if 'A' == '
3550: 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53  \301'.# define S
3560: 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23  QLITE_EBCDIC 1.#
3570: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51  else.# define SQ
3580: 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e  LITE_ASCII 1.#en
3590: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67  dif../*.** Integ
35a0: 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a  ers of known siz
35b0: 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65 64  es.  These typed
35c0: 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65  efs might change
35d0: 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72   for architectur
35e0: 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20  es.** where the 
35f0: 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65  sizes very.  Pre
3600: 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73  processor macros
3610: 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73   are available s
3620: 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79  o that the.** ty
3630: 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65  pes can be conve
3640: 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65  niently redefine
3650: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70  d at compile-typ
3660: 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a  e.  Like this:.*
3670: 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20  *.**         cc 
3680: 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d  '-DUINTPTR_TYPE=
3690: 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e  long long int' .
36a0: 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49  ...*/.#ifndef UI
36b0: 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65  NT32_TYPE.# ifde
36c0: 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a  f HAVE_UINT32_T.
36d0: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32  #  define UINT32
36e0: 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23  _TYPE uint32_t.#
36f0: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
3700: 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69  UINT32_TYPE unsi
3710: 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66  gned int.# endif
3720: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
3730: 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66  UINT16_TYPE.# if
3740: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f  def HAVE_UINT16_
3750: 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  T.#  define UINT
3760: 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74  16_TYPE uint16_t
3770: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
3780: 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e  e UINT16_TYPE un
3790: 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74  signed short int
37a0: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
37b0: 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59  #ifndef INT16_TY
37c0: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
37d0: 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e  INT16_T.#  defin
37e0: 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74  e INT16_TYPE int
37f0: 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  16_t.# else.#  d
3800: 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45  efine INT16_TYPE
3810: 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64   short int.# end
3820: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
3830: 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69  f UINT8_TYPE.# i
3840: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f  fdef HAVE_UINT8_
3850: 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  T.#  define UINT
3860: 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23  8_TYPE uint8_t.#
3870: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
3880: 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67  UINT8_TYPE unsig
3890: 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66  ned char.# endif
38a0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
38b0: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
38c0: 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20  f HAVE_INT8_T.# 
38d0: 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50   define INT8_TYP
38e0: 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a  E int8_t.# else.
38f0: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54  #  define INT8_T
3900: 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a  YPE signed char.
3910: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
3920: 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c  ifndef LONGDOUBL
3930: 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20  E_TYPE.# define 
3940: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
3950: 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64  long double.#end
3960: 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  if.typedef sqlit
3970: 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20  e_int64 i64;    
3980: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
3990: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
39a0: 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65  /.typedef sqlite
39b0: 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20  _uint64 u64;    
39c0: 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75       /* 8-byte u
39d0: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
39e0: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33  */.typedef UINT3
39f0: 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20 20  2_TYPE u32;     
3a00: 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20        /* 4-byte 
3a10: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
3a20: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
3a30: 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20  16_TYPE u16;    
3a40: 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65         /* 2-byte
3a50: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
3a60: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54  r */.typedef INT
3a70: 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20  16_TYPE i16;    
3a80: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
3a90: 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  e signed integer
3aa0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
3ab0: 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20 20  8_TYPE u8;      
3ac0: 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65         /* 1-byte
3ad0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
3ae0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54  r */.typedef INT
3af0: 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20 20  8_TYPE i8;      
3b00: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
3b10: 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  e signed integer
3b20: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54   */../*.** SQLIT
3b30: 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75  E_MAX_U32 is a u
3b40: 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74  64 constant that
3b50: 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   is the maximum 
3b60: 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61  u64 value.** tha
3b70: 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20  t can be stored 
3b80: 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75 74  in a u32 without
3b90: 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20   loss of data.  
3ba0: 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
3bb0: 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66 66  0x00000000ffffff
3bc0: 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73 65  ff.  But because
3bd0: 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f   of quirks of so
3be0: 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65  me compilers, we
3bf0: 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63  .** have to spec
3c00: 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ify the value in
3c10: 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74   the less intuit
3c20: 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e  ive manner shown
3c30: 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  :.*/.#define SQL
3c40: 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28  ITE_MAX_U32  (((
3c50: 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a  (u64)1)<<32)-1).
3c60: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74  ./*.** The datat
3c70: 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ype used to stor
3c80: 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74  e estimates of t
3c90: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
3ca0: 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20  s in a.** table 
3cb0: 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20  or index.  This 
3cc0: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69  is an unsigned i
3cd0: 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f  nteger type.  Fo
3ce0: 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68  r 99.9% of.** th
3cf0: 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69  e world, a 32-bi
3d00: 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75 66  t integer is suf
3d10: 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20  ficient.  But a 
3d20: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a  64-bit integer.*
3d30: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 74  * can be used at
3d40: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66   compile-time if
3d50: 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66   desired..*/.#if
3d60: 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54  def SQLITE_64BIT
3d70: 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66 20  _STATS. typedef 
3d80: 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20  u64 tRowcnt;    
3d90: 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69  /* 64-bit only i
3da0: 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20 63  f requested at c
3db0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23  ompile-time */.#
3dc0: 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75 33  else. typedef u3
3dd0: 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a  2 tRowcnt;    /*
3de0: 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20 64   32-bit is the d
3df0: 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66  efault */.#endif
3e00: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
3e10: 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  o determine whet
3e20: 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20  her the machine 
3e30: 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65  is big or little
3e40: 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 65 76 61 6c   endian,.** eval
3e50: 75 61 74 65 64 20 61 74 20 72 75 6e 74 69 6d 65  uated at runtime
3e60: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
3e70: 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
3e80: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
3e90: 33 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c 73 65 0a  3one = 1;.#else.
3ea0: 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74  extern const int
3eb0: 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e   sqlite3one;.#en
3ec0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
3ed0: 69 33 38 36 29 20 7c 7c 20 64 65 66 69 6e 65 64  i386) || defined
3ee0: 28 5f 5f 69 33 38 36 5f 5f 29 20 7c 7c 20 64 65  (__i386__) || de
3ef0: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 5c 0a  fined(_M_IX86)\.
3f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20               || 
3f20: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34  defined(__x86_64
3f30: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78  ) || defined(__x
3f40: 38 36 5f 36 34 5f 5f 29 0a 23 20 64 65 66 69 6e  86_64__).# defin
3f50: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
3f60: 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65  AN    0.# define
3f70: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
3f80: 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20  DIAN 1.# define 
3f90: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
3fa0: 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  VE  SQLITE_UTF16
3fb0: 4c 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  LE.#else.# defin
3fc0: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
3fd0: 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29  AN    (*(char *)
3fe0: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30  (&sqlite3one)==0
3ff0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
4000: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28  E_LITTLEENDIAN (
4010: 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74  *(char *)(&sqlit
4020: 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66  e3one)==1).# def
4030: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
4040: 4e 41 54 49 56 45 20 28 53 51 4c 49 54 45 5f 42  NATIVE (SQLITE_B
4050: 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f  IGENDIAN?SQLITE_
4060: 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55  UTF16BE:SQLITE_U
4070: 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a  TF16LE).#endif..
4080: 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20  /*.** Constants 
4090: 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74 20  for the largest 
40a0: 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73  and smallest pos
40b0: 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67  sible 64-bit sig
40c0: 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  ned integers..**
40d0: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72   These macros ar
40e0: 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f  e designed to wo
40f0: 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20  rk correctly on 
4100: 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20  both 32-bit and 
4110: 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c  64-bit.** compil
4120: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
4130: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28  LARGEST_INT64  (
4140: 30 78 66 66 66 66 66 66 66 66 7c 28 28 28 69 36  0xffffffff|(((i6
4150: 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
4160: 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c  2)).#define SMAL
4170: 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36  LEST_INT64 (((i6
4180: 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f  4)-1) - LARGEST_
4190: 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52  INT64)../* .** R
41a0: 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72  ound up a number
41b0: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72   to the next lar
41c0: 67 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  ger multiple of 
41d0: 38 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64  8.  This is used
41e0: 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62  .** to force 8-b
41f0: 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e  yte alignment on
4200: 20 36 34 2d 62 69 74 20 61 72 63 68 69 74 65 63   64-bit architec
4210: 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tures..*/.#defin
4220: 65 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20  e ROUND8(x)     
4230: 28 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a  (((x)+7)&~7)../*
4240: 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74  .** Round down t
4250: 6f 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75  o the nearest mu
4260: 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23  ltiple of 8.*/.#
4270: 64 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e  define ROUNDDOWN
4280: 38 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f  8(x) ((x)&~7)../
4290: 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74  *.** Assert that
42a0: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69   the pointer X i
42b0: 73 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20  s aligned to an 
42c0: 38 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e  8-byte boundary.
42d0: 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20    This.** macro 
42e0: 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74  is used only wit
42f0: 68 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20  hin assert() to 
4300: 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
4310: 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c  code gets.** all
4320: 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72   alignment restr
4330: 69 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e  ictions correct.
4340: 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69  .**.** Except, i
4350: 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f  f SQLITE_4_BYTE_
4360: 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69  ALIGNED_MALLOC i
4370: 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20  s defined, then 
4380: 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  the.** underlyin
4390: 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65  g malloc() imple
43a0: 6d 65 6e 74 69 6f 6e 20 6d 69 67 68 74 20 72 65  mention might re
43b0: 74 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20 61  turn us 4-byte a
43c0: 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65  ligned.** pointe
43d0: 72 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73  rs.  In that cas
43e0: 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20 34  e, only verify 4
43f0: 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e  -byte alignment.
4400: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4410: 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44  E_4_BYTE_ALIGNED
4420: 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65  _MALLOC.# define
4430: 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47   EIGHT_BYTE_ALIG
4440: 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63  NMENT(X)   ((((c
4450: 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72  har*)(X) - (char
4460: 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73  *)0)&3)==0).#els
4470: 65 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  e.# define EIGHT
4480: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
4490: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
44a0: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 37  X) - (char*)0)&7
44b0: 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )==0).#endif../*
44c0: 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41 50  .** Disable MMAP
44d0: 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77 68   on platforms wh
44e0: 65 72 65 20 69 74 20 69 73 20 6e 6f 74 20 73 75  ere it is not su
44f0: 70 70 6f 72 74 65 64 0a 2a 2f 0a 23 69 66 20 64  pported.*/.#if d
4500: 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44  efined(__OpenBSD
4510: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  __) || defined(_
4520: 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64  _QNXNTO__).# und
4530: 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ef SQLITE_DISABL
4540: 45 5f 4d 4d 41 50 0a 23 20 64 65 66 69 6e 65 20  E_MMAP.# define 
4550: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4d  SQLITE_DISABLE_M
4560: 4d 41 50 20 31 0a 23 65 6e 64 69 66 0a 0a 0a 2f  MAP 1.#endif.../
4570: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
4580: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
4590: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  g structure is u
45a0: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
45b0: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
45c0: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20   callback for a 
45d0: 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e  given sqlite han
45e0: 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20  dle. .**.** The 
45f0: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
4600: 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  er member of the
4610: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63   sqlite struct c
4620: 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79  ontains the busy
4630: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
4640: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
4650: 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72  ndle. Each pager
4660: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20   opened via the 
4670: 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65  sqlite.** handle
4680: 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69   is passed a poi
4690: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62  nter to sqlite.b
46a0: 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20  usyHandler. The 
46b0: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
46c0: 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72  callback is curr
46d0: 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e  ently invoked on
46e0: 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70  ly from within p
46f0: 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64  ager.c..*/.typed
4700: 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61  ef struct BusyHa
4710: 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65  ndler BusyHandle
4720: 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61  r;.struct BusyHa
4730: 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  ndler {.  int (*
4740: 78 46 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e  xFunc)(void *,in
4750: 74 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79  t);  /* The busy
4760: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
4770: 6f 69 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20  oid *pArg;      
4780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
4790: 73 74 20 61 72 67 20 74 6f 20 62 75 73 79 20 63  st arg to busy c
47a0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74  allback */.  int
47b0: 20 6e 42 75 73 79 3b 20 20 20 20 20 20 20 20 20   nBusy;         
47c0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65          /* Incre
47d0: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
47e0: 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b   busy call */.};
47f0: 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20  ../*.** Name of 
4800: 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  the master datab
4810: 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  ase table.  The 
4820: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
4830: 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70  table.** is a sp
4840: 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74  ecial table that
4850: 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73   holds the names
4860: 20 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20   and attributes 
4870: 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74  of all.** user t
4880: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
4890: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  s..*/.#define MA
48a0: 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20  STER_NAME       
48b0: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a  "sqlite_master".
48c0: 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53  #define TEMP_MAS
48d0: 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74  TER_NAME  "sqlit
48e0: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a  e_temp_master"..
48f0: 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70  /*.** The root-p
4900: 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65  age of the maste
4910: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
4920: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
4930: 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31  TER_ROOT       1
4940: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65  ../*.** The name
4950: 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74   of the schema t
4960: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
4970: 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29   SCHEMA_TABLE(x)
4980: 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42    ((!OMIT_TEMPDB
4990: 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d  )&&(x==1)?TEMP_M
49a0: 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45  ASTER_NAME:MASTE
49b0: 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41  R_NAME)../*.** A
49c0: 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63   convenience mac
49d0: 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ro that returns 
49e0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c  the number of el
49f0: 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20  ements in.** an 
4a00: 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e  array..*/.#defin
4a10: 65 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20  e ArraySize(X)  
4a20: 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
4a30: 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29  X)/sizeof(X[0]))
4a40: 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  )../*.** Determi
4a50: 6e 65 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  ne if the argume
4a60: 6e 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66  nt is a power of
4a70: 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20   two.*/.#define 
4a80: 49 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20  IsPowerOfTwo(X) 
4a90: 28 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d  (((X)&((X)-1))==
4aa0: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  0)../*.** The fo
4ab0: 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73  llowing value as
4ac0: 20 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65   a destructor me
4ad0: 61 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74  ans to use sqlit
4ae0: 65 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54  e3DbFree()..** T
4af0: 68 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  he sqlite3DbFree
4b00: 28 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69  () routine requi
4b10: 72 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65  res two paramete
4b20: 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68  rs instead of th
4b30: 65 20 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65  e .** one parame
4b40: 74 65 72 20 74 68 61 74 20 64 65 73 74 72 75 63  ter that destruc
4b50: 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61  tors normally wa
4b60: 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20  nt.  So we have 
4b70: 74 6f 20 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a  to introduce .**
4b80: 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75   this magic valu
4b90: 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20  e that the code 
4ba0: 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20  knows to handle 
4bb0: 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e  differently.  An
4bc0: 79 20 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69  y .** pointer wi
4bd0: 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20  ll work here as 
4be0: 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69  long as it is di
4bf0: 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49  stinct from SQLI
4c00: 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64  TE_STATIC.** and
4c10: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
4c20: 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  T..*/.#define SQ
4c30: 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28  LITE_DYNAMIC   (
4c40: 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63  (sqlite3_destruc
4c50: 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33  tor_type)sqlite3
4c60: 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a  MallocSize)../*.
4c70: 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f  ** When SQLITE_O
4c80: 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e  MIT_WSD is defin
4c90: 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  ed, it means tha
4ca0: 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61  t the target pla
4cb0: 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f  tform does.** no
4cc0: 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62  t support Writab
4cd0: 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28  le Static Data (
4ce0: 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f  WSD) such as glo
4cf0: 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76  bal and static v
4d00: 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c  ariables..** All
4d10: 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20   variables must 
4d20: 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65  either be on the
4d30: 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69   stack or dynami
4d40: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
4d50: 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70  from.** the heap
4d60: 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75  .  When WSD is u
4d70: 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20  nsupported, the 
4d80: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
4d90: 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a  tions scattered.
4da0: 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68  ** throughout th
4db0: 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75  e SQLite code mu
4dc0: 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61  st become consta
4dd0: 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68  nts instead.  Th
4de0: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20  e SQLITE_WSD.** 
4df0: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
4e00: 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20  r this purpose. 
4e10: 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20   And instead of 
4e20: 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20  referencing the 
4e30: 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65  variable.** dire
4e40: 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73  ctly, we use its
4e50: 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b   constant as a k
4e60: 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65  ey to lookup the
4e70: 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61   run-time alloca
4e80: 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68  ted.** buffer th
4e90: 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61  at holds real va
4ea0: 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e  riable.  The con
4eb0: 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68  stant is also th
4ec0: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a  e initializer.**
4ed0: 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d   for the run-tim
4ee0: 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  e allocated buff
4ef0: 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  er..**.** In the
4f00: 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72   usual case wher
4f10: 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74  e WSD is support
4f20: 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57  ed, the SQLITE_W
4f30: 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a  SD and GLOBAL.**
4f40: 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e   macros become n
4f50: 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a  o-ops and have z
4f60: 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ero performance 
4f70: 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65  impact..*/.#ifde
4f80: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
4f90: 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  D.  #define SQLI
4fa0: 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23  TE_WSD const.  #
4fb0: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
4fc0: 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33  v) (*(t*)sqlite3
4fd0: 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a  _wsd_find((void*
4fe0: 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29  )&(v), sizeof(v)
4ff0: 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  )).  #define sql
5000: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
5010: 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53   GLOBAL(struct S
5020: 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71  qlite3Config, sq
5030: 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69  lite3Config).  i
5040: 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69  nt sqlite3_wsd_i
5050: 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a  nit(int N, int J
5060: 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  );.  void *sqlit
5070: 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64  e3_wsd_find(void
5080: 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c   *K, int L);.#el
5090: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  se.  #define SQL
50a0: 49 54 45 5f 57 53 44 20 0a 20 20 23 64 65 66 69  ITE_WSD .  #defi
50b0: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
50c0: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
50d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
50e0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
50f0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
5100: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
5110: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
5120: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
5130: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
5140: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
5150: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
5160: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
5170: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
5180: 69 62 65 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65  iberately .** le
5190: 66 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e  ft unused within
51a0: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
51b0: 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73  unction. This us
51c0: 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68  ually happens wh
51d0: 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e  en.** a function
51e0: 20 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61   is called via a
51f0: 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
5200: 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74  r. For example t
5210: 68 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74  he .** implement
5220: 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20  ation of an SQL 
5230: 61 67 67 72 65 67 61 74 65 20 73 74 65 70 20 63  aggregate step c
5240: 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20  allback may not 
5250: 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d  use the.** param
5260: 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20  eter indicating 
5270: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
5280: 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74  guments passed t
5290: 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2c  o the aggregate,
52a0: 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20  .** if it knows 
52b0: 74 68 61 74 20 74 68 69 73 20 69 73 20 65 6e 66  that this is enf
52c0: 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e  orced elsewhere.
52d0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75  .**.** When a fu
52e0: 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72  nction parameter
52f0: 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20   is not used at 
5300: 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62  all within the b
5310: 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ody of a functio
5320: 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65  n,.** it is gene
5330: 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74  rally named "Not
5340: 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65  Used" or "NotUse
5350: 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e  d2" to make thin
5360: 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e  gs even clearer.
5370: 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65  .** However, the
5380: 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c  se macros may al
5390: 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73 75  so be used to su
53a0: 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20  ppress warnings 
53b0: 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61  related to.** pa
53c0: 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61  rameters that ma
53d0: 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20  y or may not be 
53e0: 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f  used depending o
53f0: 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70  n compilation op
5400: 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78  tions..** For ex
5410: 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61  ample those para
5420: 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64  meters only used
5430: 20 69 6e 20 61 73 73 65 72 74 28 29 20 73 74 61   in assert() sta
5440: 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73  tements. In thes
5450: 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70  e.** cases the p
5460: 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61  arameters are na
5470: 6d 65 64 20 61 73 20 70 65 72 20 74 68 65 20 75  med as per the u
5480: 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73  sual conventions
5490: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55  ..*/.#define UNU
54a0: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29  SED_PARAMETER(x)
54b0: 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69   (void)(x).#defi
54c0: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
54d0: 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44  TER2(x,y) UNUSED
54e0: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e  _PARAMETER(x),UN
54f0: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79  USED_PARAMETER(y
5500: 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64  )../*.** Forward
5510: 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73   references to s
5520: 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70  tructures.*/.typ
5530: 65 64 65 66 20 73 74 72 75 63 74 20 41 67 67 49  edef struct AggI
5540: 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70  nfo AggInfo;.typ
5550: 65 64 65 66 20 73 74 72 75 63 74 20 41 75 74 68  edef struct Auth
5560: 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74  Context AuthCont
5570: 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ext;.typedef str
5580: 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  uct AutoincInfo 
5590: 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70  AutoincInfo;.typ
55a0: 65 64 65 66 20 73 74 72 75 63 74 20 42 69 74 76  edef struct Bitv
55b0: 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64  ec Bitvec;.typed
55c0: 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  ef struct CollSe
55d0: 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64  q CollSeq;.typed
55e0: 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e  ef struct Column
55f0: 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66   Column;.typedef
5600: 20 73 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74   struct Db Db;.t
5610: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 63  ypedef struct Sc
5620: 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70  hema Schema;.typ
5630: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
5640: 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73   Expr;.typedef s
5650: 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 45  truct ExprList E
5660: 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  xprList;.typedef
5670: 20 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e   struct ExprSpan
5680: 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64   ExprSpan;.typed
5690: 65 66 20 73 74 72 75 63 74 20 46 4b 65 79 20 46  ef struct FKey F
56a0: 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Key;.typedef str
56b0: 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74  uct FuncDestruct
56c0: 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  or FuncDestructo
56d0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
56e0: 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65  t FuncDef FuncDe
56f0: 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  f;.typedef struc
5700: 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 46 75  t FuncDefHash Fu
5710: 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64  ncDefHash;.typed
5720: 65 66 20 73 74 72 75 63 74 20 49 64 4c 69 73 74  ef struct IdList
5730: 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66   IdList;.typedef
5740: 20 73 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e   struct Index In
5750: 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72  dex;.typedef str
5760: 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  uct IndexSample 
5770: 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70  IndexSample;.typ
5780: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 43  edef struct KeyC
5790: 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74  lass KeyClass;.t
57a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
57b0: 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74  yInfo KeyInfo;.t
57c0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
57d0: 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64  okaside Lookasid
57e0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
57f0: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
5800: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74  LookasideSlot;.t
5810: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f  ypedef struct Mo
5820: 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70  dule Module;.typ
5830: 65 64 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65  edef struct Name
5840: 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74  Context NameCont
5850: 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ext;.typedef str
5860: 75 63 74 20 50 61 72 73 65 20 50 61 72 73 65 3b  uct Parse Parse;
5870: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5880: 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74  RowSet RowSet;.t
5890: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 61  ypedef struct Sa
58a0: 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e  vepoint Savepoin
58b0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
58c0: 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b  t Select Select;
58d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
58e0: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
58f0: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
5900: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
5910: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
5920: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
5930: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
5940: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
5950: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
5960: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
5970: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
5980: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
5990: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
59a0: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
59b0: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
59c0: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
59d0: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
59e0: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
59f0: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
5a00: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
5a10: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
5a20: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
5a30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5a40: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
5a50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
5a60: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
5a70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
5a80: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
5a90: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
5aa0: 65 50 6c 61 6e 20 57 68 65 72 65 50 6c 61 6e 3b  ePlan WherePlan;
5ab0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5ac0: 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49  WhereInfo WhereI
5ad0: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
5ae0: 75 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20 57  uct WhereLevel W
5af0: 68 65 72 65 4c 65 76 65 6c 3b 0a 0a 2f 2a 0a 2a  hereLevel;../*.*
5b00: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
5b10: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
5b20: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
5b30: 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a  the "u8" and .**
5b40: 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74   "BusyHandler" t
5b50: 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20  ypedefs. vdbe.h 
5b60: 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20  also requires a 
5b70: 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75  few of the opaqu
5b80: 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70  e.** pointer typ
5b90: 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66  es (i.e. FuncDef
5ba0: 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e  ) defined above.
5bb0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74  .*/.#include "bt
5bc0: 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ree.h".#include 
5bd0: 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64  "vdbe.h".#includ
5be0: 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63  e "pager.h".#inc
5bf0: 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a  lude "pcache.h".
5c00: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
5c10: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78  .#include "mutex
5c20: 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .h".../*.** Each
5c30: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
5c40: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
5c50: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
5c60: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
5c70: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
5c80: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
5c90: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
5ca0: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
5cb0: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
5cc0: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
5cd0: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
5ce0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
5cf0: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
5d00: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
5d10: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
5d20: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
5d30: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
5d40: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
5d50: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
5d60: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
5d70: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
5d80: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
5d90: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
5da0: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
5db0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
5dc0: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
5dd0: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
5de0: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
5df0: 38 20 69 6e 54 72 61 6e 73 3b 20 20 20 20 20 20  8 inTrans;      
5e00: 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 74 20 77 72      /* 0: not wr
5e10: 69 74 61 62 6c 65 2e 20 20 31 3a 20 54 72 61 6e  itable.  1: Tran
5e20: 73 61 63 74 69 6f 6e 2e 20 20 32 3a 20 43 68 65  saction.  2: Che
5e30: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 20 20 75 38 20  ckpoint */.  u8 
5e40: 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20  safety_level;   
5e50: 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73    /* How aggress
5e60: 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64  ive at syncing d
5e70: 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20  ata to disk */. 
5e80: 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
5e90: 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72  ;     /* Pointer
5ea0: 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68   to database sch
5eb0: 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68  ema (possibly sh
5ec0: 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ared) */.};../*.
5ed0: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
5ee0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
5ef0: 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73  structure stores
5f00: 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65   a database sche
5f10: 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53  ma..**.** Most S
5f20: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72  chema objects ar
5f30: 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
5f40: 68 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20  h a Btree.  The 
5f50: 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20  exception is.** 
5f60: 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74  the Schema for t
5f70: 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73  he TEMP databaes
5f80: 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d   (sqlite3.aDb[1]
5f90: 29 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d  ) which is free-
5fa0: 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20  standing..** In 
5fb0: 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64  shared cache mod
5fc0: 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65  e, a single Sche
5fd0: 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65  ma object can be
5fe0: 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69   shared by multi
5ff0: 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68  ple.** Btrees th
6000: 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  at refer to the 
6010: 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20  same underlying 
6020: 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e  BtShared object.
6030: 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f  .** .** Schema o
6040: 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d  bjects are autom
6050: 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63  atically dealloc
6060: 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61  ated when the la
6070: 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a  st Btree that.**
6080: 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d   references them
6090: 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20   is destroyed.  
60a0: 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61   The TEMP Schema
60b0: 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65   is manually fre
60c0: 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
60d0: 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41  _close()..*.** A
60e0: 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20   thread must be 
60f0: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
6100: 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
6110: 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72  ding Btree in or
6120: 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73  der.** to access
6130: 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e   Schema content.
6140: 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74    This implies t
6150: 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d  hat the thread m
6160: 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68  ust also be.** h
6170: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
6180: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f  n the sqlite3 co
6190: 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  nnection pointer
61a0: 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42   that owns the B
61b0: 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54  tree..** For a T
61c0: 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79  EMP Schema, only
61d0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
61e0: 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65  mutex is require
61f0: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68  d..*/.struct Sch
6200: 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65  ema {.  int sche
6210: 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20  ma_cookie;   /* 
6220: 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  Database schema 
6230: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
6240: 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  or this file */.
6250: 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f    int iGeneratio
6260: 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61  n;     /* Genera
6270: 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49  tion counter.  I
6280: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
6290: 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20  each change */. 
62a0: 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20   Hash tblHash;  
62b0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62        /* All tab
62c0: 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  les indexed by n
62d0: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64  ame */.  Hash id
62e0: 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  xHash;        /*
62f0: 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64   All (named) ind
6300: 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  ices indexed by 
6310: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74  name */.  Hash t
6320: 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f  rigHash;       /
6330: 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69  * All triggers i
6340: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
6350: 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73  /.  Hash fkeyHas
6360: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
6370: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20  foreign keys by 
6380: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
6390: 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65   name */.  Table
63a0: 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20   *pSeqTab;      
63b0: 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65  /* The sqlite_se
63c0: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65  quence table use
63d0: 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45  d by AUTOINCREME
63e0: 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f  NT */.  u8 file_
63f0: 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20  format;      /* 
6400: 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65  Schema format ve
6410: 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66  rsion for this f
6420: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ile */.  u8 enc;
6430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6440: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75   Text encoding u
6450: 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61  sed by this data
6460: 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c  base */.  u16 fl
6470: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ags;           /
6480: 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74  * Flags associat
6490: 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68  ed with this sch
64a0: 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63  ema */.  int cac
64b0: 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a  he_size;      /*
64c0: 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
64d0: 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63   to use in the c
64e0: 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ache */.};../*.*
64f0: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
6500: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
6510: 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
6520: 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a  r bits in the .*
6530: 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  * Db.pSchema->fl
6540: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
6550: 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65  efine DbHasPrope
6560: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
6570: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
6580: 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29  hema->flags&(P))
6590: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
65a0: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
65b0: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
65c0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66  Db[I].pSchema->f
65d0: 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
65e0: 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65  efine DbSetPrope
65f0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
6600: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
6610: 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  ma->flags|=(P).#
6620: 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72  define DbClearPr
6630: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
6640: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
6650: 65 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  ema->flags&=~(P)
6660: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
6670: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44  values for the D
6680: 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  B.pSchema->flags
6690: 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68   field..**.** Th
66a0: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
66b0: 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61 66  d flag is set af
66c0: 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ter the database
66d0: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
66e0: 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e  .** read into in
66f0: 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c  ternal hash tabl
6700: 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72  es..**.** DB_Unr
6710: 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20  esetViews means 
6720: 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  that one or more
6730: 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75   views have colu
6740: 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a  mn names that.**
6750: 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65   have been fille
6760: 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73  d out.  If the s
6770: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74  chema changes, t
6780: 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  hese column name
6790: 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67  s might.** chang
67a0: 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69  es and so the vi
67b0: 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20  ew will need to 
67c0: 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65  be reset..*/.#de
67d0: 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f  fine DB_SchemaLo
67e0: 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20 20  aded    0x0001  
67f0: 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68 61  /* The schema ha
6800: 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f  s been loaded */
6810: 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65  .#define DB_Unre
6820: 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30 30  setViews    0x00
6830: 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77  02  /* Some view
6840: 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20 63  s have defined c
6850: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23  olumn names */.#
6860: 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20  define DB_Empty 
6870: 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34            0x0004
6880: 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73    /* The file is
6890: 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30   empty (length 0
68a0: 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a   bytes) */../*.*
68b0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
68c0: 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20  different kinds 
68d0: 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63  of things that c
68e0: 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a  an be limited.**
68f0: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
6900: 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72  e3_limit() inter
6910: 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  face..*/.#define
6920: 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20   SQLITE_N_LIMIT 
6930: 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52  (SQLITE_LIMIT_TR
6940: 49 47 47 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a  IGGER_DEPTH+1)..
6950: 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  /*.** Lookaside 
6960: 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20  malloc is a set 
6970: 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75  of fixed-size bu
6980: 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62  ffers that can b
6990: 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74  e used.** to sat
69a0: 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73  isfy small trans
69b0: 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ient memory allo
69c0: 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20  cation requests 
69d0: 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61  for objects.** a
69e0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
69f0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
6a00: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
6a10: 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20    The use of.** 
6a20: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
6a30: 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e   provides a sign
6a40: 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61  ificant performa
6a50: 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a  nce enhancement.
6a60: 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20  ** (approx 10%) 
6a70: 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65  by avoiding nume
6a80: 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65  rous malloc/free
6a90: 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20   requests while 
6aa0: 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73  parsing.** SQL s
6ab0: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
6ac0: 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73   The Lookaside s
6ad0: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63  tructure holds c
6ae0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66  onfiguration inf
6af0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
6b00: 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  he.** lookaside 
6b10: 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d  malloc subsystem
6b20: 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c  .  Each availabl
6b30: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
6b40: 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f  ion in.** the lo
6b50: 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65  okaside subsyste
6b60: 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61  m is stored on a
6b70: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
6b80: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a  LookasideSlot.**
6b90: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20   objects..**.** 
6ba0: 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  Lookaside alloca
6bb0: 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61  tions are only a
6bc0: 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63  llowed for objec
6bd0: 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f  ts that are asso
6be0: 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61  ciated.** with a
6bf0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
6c00: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
6c10: 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20    Hence, schema 
6c20: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e  information cann
6c30: 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20  ot.** be stored 
6c40: 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63  in lookaside bec
6c50: 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63  ause in shared c
6c60: 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63  ache mode the sc
6c70: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
6c80: 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79  .** is shared by
6c90: 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
6ca0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20  se connections. 
6cb0: 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c   Therefore, whil
6cc0: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68  e parsing.** sch
6cd0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ema information,
6ce0: 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62   the Lookaside.b
6cf0: 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20  Enabled flag is 
6d00: 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a  cleared so that.
6d10: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** lookaside all
6d20: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74  ocations are not
6d30: 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75   used to constru
6d40: 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62  ct the schema ob
6d50: 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  jects..*/.struct
6d60: 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75   Lookaside {.  u
6d70: 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20  16 sz;          
6d80: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
6d90: 66 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e  f each buffer in
6da0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62   bytes */.  u8 b
6db0: 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20  Enabled;        
6dc0: 20 20 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20      /* False to 
6dd0: 64 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b  disable new look
6de0: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
6df0: 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f  s */.  u8 bMallo
6e00: 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ced;           /
6e10: 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74  * True if pStart
6e20: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
6e30: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
6e40: 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20  */.  int nOut;  
6e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6e60: 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72  Number of buffer
6e70: 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63  s currently chec
6e80: 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74  ked out */.  int
6e90: 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20   mxOut;         
6ea0: 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65       /* Highwate
6eb0: 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20  r mark for nOut 
6ec0: 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b  */.  int anStat[
6ed0: 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  3];          /* 
6ee0: 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a  0: hits.  1: siz
6ef0: 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75  e misses.  2: fu
6f00: 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c  ll misses */.  L
6f10: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46  ookasideSlot *pF
6f20: 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ree;   /* List o
6f30: 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66  f available buff
6f40: 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
6f50: 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  Start;          
6f60: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f   /* First byte o
6f70: 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  f available memo
6f80: 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f  ry space */.  vo
6f90: 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  id *pEnd;       
6fa0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
6fb0: 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20  yte past end of 
6fc0: 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20  available space 
6fd0: 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f  */.};.struct Loo
6fe0: 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c  kasideSlot {.  L
6ff0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e  ookasideSlot *pN
7000: 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  ext;    /* Next 
7010: 62 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69  buffer in the li
7020: 73 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65  st of free buffe
7030: 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  rs */.};../*.** 
7040: 41 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72  A hash table for
7050: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
7060: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73  tions..**.** Has
7070: 68 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73  h each FuncDef s
7080: 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e  tructure into on
7090: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
70a0: 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a  Hash.a[] slots..
70b0: 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72  ** Collisions ar
70c0: 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66  e on the FuncDef
70d0: 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f  .pHash chain..*/
70e0: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48  .struct FuncDefH
70f0: 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20  ash {.  FuncDef 
7100: 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a  *a[23];       /*
7110: 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   Hash table for 
7120: 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a  functions */.};.
7130: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
7140: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
7150: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
7160: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
7170: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
7180: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
7190: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
71a0: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
71b0: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
71c0: 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20  /.  struct Vdbe 
71d0: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
71e0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
71f0: 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  ive virtual mach
7200: 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  ines */.  CollSe
7210: 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20  q *pDfltColl;   
7220: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
7230: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
7240: 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52   sequence (BINAR
7250: 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  Y) */.  sqlite3_
7260: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
7270: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
7280: 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44  ion mutex */.  D
7290: 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20  b *aDb;         
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
72b0: 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  All backends */.
72c0: 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20    int nDb;      
72d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72e0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63  /* Number of bac
72f0: 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20  kends currently 
7300: 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  in use */.  int 
7310: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
7320: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73            /* Mis
7330: 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73  cellaneous flags
7340: 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  . See below */. 
7350: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20   i64 lastRowid; 
7360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7370: 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20  * ROWID of most 
7380: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73  recent insert (s
7390: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69  ee above) */.  i
73a0: 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20  64 mxMmap;      
73b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
73c0: 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 6c 69 6d  Default mmap_lim
73d0: 69 74 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20  it setting */.  
73e0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65  unsigned int ope
73f0: 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  nFlags;       /*
7400: 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
7410: 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70   sqlite3_vfs.xOp
7420: 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  en() */.  int er
7430: 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  rCode;          
7440: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
7450: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64  recent error cod
7460: 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a  e (SQLITE_*) */.
7470: 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20    int errMask;  
7480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7490: 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65  /* & result code
74a0: 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f  s with this befo
74b0: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a  re returning */.
74c0: 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73    u16 dbOptFlags
74d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
74e0: 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62  /* Flags to enab
74f0: 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d  le/disable optim
7500: 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38  izations */.  u8
7510: 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20   autoCommit;    
7520: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
7530: 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  he auto-commit f
7540: 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d  lag. */.  u8 tem
7550: 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20  p_store;        
7560: 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69          /* 1: fi
7570: 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20  le 2: memory 0: 
7580: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
7590: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
75a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
75b0: 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65  ue if we have se
75c0: 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  en a malloc fail
75d0: 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74  ure */.  u8 dflt
75e0: 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20  LockMode;       
75f0: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
7600: 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66  t locking-mode f
7610: 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20  or attached dbs 
7620: 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72  */.  signed char
7630: 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20   nextAutovac;   
7640: 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65     /* Autovac se
7650: 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55  tting after VACU
7660: 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75  UM if >=0 */.  u
7670: 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20  8 suppressErr;  
7680: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7690: 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72  Do not issue err
76a0: 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74  or messages if t
76b0: 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62  rue */.  u8 vtab
76c0: 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20  OnConflict;     
76d0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
76e0: 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33  to return for s3
76f0: 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63  _vtab_on_conflic
7700: 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72  t() */.  u8 isTr
7710: 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
7720: 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  nt;    /* True i
7730: 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20  f the outermost 
7740: 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54  savepoint is a T
7750: 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50  S */.  int nextP
7760: 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20  agesize;        
7770: 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65       /* Pagesize
7780: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
7790: 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67   >0 */.  u32 mag
77a0: 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ic;             
77b0: 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20         /* Magic 
77c0: 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63  number for detec
77d0: 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65  t library misuse
77e0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67   */.  int nChang
77f0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
7800: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
7810: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
7820: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
7830: 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65  int nTotalChange
7840: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
7850: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
7860: 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  by sqlite3_total
7870: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
7880: 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54  int aLimit[SQLIT
7890: 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a  E_N_LIMIT];   /*
78a0: 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 73 74 72   Limits */.  str
78b0: 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49  uct sqlite3InitI
78c0: 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e  nfo {      /* In
78d0: 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64  formation used d
78e0: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
78f0: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
7900: 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20  newTnum;        
7910: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70          /* Rootp
7920: 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69  age of table bei
7930: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
7940: 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20  /.    u8 iDb;   
7950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7960: 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69    /* Which db fi
7970: 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74  le is being init
7980: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
7990: 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20  8 busy;         
79a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52             /* TR
79b0: 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  UE if currently 
79c0: 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a  initializing */.
79d0: 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69      u8 orphanTri
79e0: 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  gger;           
79f0: 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e  /* Last statemen
7a00: 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45  t is orphaned TE
7a10: 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  MP trigger */.  
7a20: 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 61 63  } init;.  int ac
7a30: 74 69 76 65 56 64 62 65 43 6e 74 3b 20 20 20 20  tiveVdbeCnt;    
7a40: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
7a50: 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65  r of VDBEs curre
7a60: 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 2a  ntly executing *
7a70: 2f 0a 20 20 69 6e 74 20 77 72 69 74 65 56 64 62  /.  int writeVdb
7a80: 65 43 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  eCnt;           
7a90: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
7aa0: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
7ab0: 20 61 72 65 20 77 72 69 74 69 6e 67 20 2a 2f 0a   are writing */.
7ac0: 20 20 69 6e 74 20 76 64 62 65 45 78 65 63 43 6e    int vdbeExecCn
7ad0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
7ae0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
7af0: 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62  ted calls to Vdb
7b00: 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74  eExec() */.  int
7b10: 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20   nExtension;    
7b20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
7b30: 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65  mber of loaded e
7b40: 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76  xtensions */.  v
7b50: 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e  oid **aExtension
7b60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
7b70: 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20  Array of shared 
7b80: 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20  library handles 
7b90: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61  */.  void (*xTra
7ba0: 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  ce)(void*,const 
7bb0: 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f  char*);        /
7bc0: 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  * Trace function
7bd0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61   */.  void *pTra
7be0: 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ceArg;          
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c00: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
7c10: 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f  he trace functio
7c20: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50  n */.  void (*xP
7c30: 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f  rofile)(void*,co
7c40: 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20  nst char*,u64); 
7c50: 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75   /* Profiling fu
7c60: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
7c70: 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20   *pProfileArg;  
7c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c90: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
7ca0: 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e  t to profile fun
7cb0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
7cc0: 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20  *pCommitArg;    
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7ce0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d  Argument to xCom
7cf0: 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  mitCallback() */
7d00: 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d     .  int (*xCom
7d10: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
7d20: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
7d30: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
7d40: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
7d50: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
7d60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
7d70: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
7d80: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
7d90: 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f     .  void (*xRo
7da0: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28  llbackCallback)(
7db0: 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b  void*); /* Invok
7dc0: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
7dd0: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
7de0: 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69  UpdateArg;.  voi
7df0: 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62  d (*xUpdateCallb
7e00: 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  ack)(void*,int, 
7e10: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
7e20: 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69  t char*,sqlite_i
7e30: 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53  nt64);.#ifndef S
7e40: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
7e50: 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62   int (*xWalCallb
7e60: 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c  ack)(void *, sql
7e70: 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
7e80: 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ar *, int);.  vo
7e90: 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e  id *pWalArg;.#en
7ea0: 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  dif.  void(*xCol
7eb0: 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73  lNeeded)(void*,s
7ec0: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
7ed0: 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a  tRep,const char*
7ee0: 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  );.  void(*xColl
7ef0: 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c  Needed16)(void*,
7f00: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
7f10: 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64  xtRep,const void
7f20: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c  *);.  void *pCol
7f30: 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71  lNeededArg;.  sq
7f40: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72  lite3_value *pEr
7f50: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  r;          /* M
7f60: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
7f70: 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 63 68   message */.  ch
7f80: 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
7f90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
7fa0: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
7fb0: 20 6d 65 73 73 61 67 65 20 28 55 54 46 2d 38 20   message (UTF-8 
7fc0: 65 6e 63 6f 64 65 64 29 20 2a 2f 0a 20 20 63 68  encoded) */.  ch
7fd0: 61 72 20 2a 7a 45 72 72 4d 73 67 31 36 3b 20 20  ar *zErrMsg16;  
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
7ff0: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
8000: 20 6d 65 73 73 61 67 65 20 28 55 54 46 2d 31 36   message (UTF-16
8010: 20 65 6e 63 6f 64 65 64 29 20 2a 2f 0a 20 20 75   encoded) */.  u
8020: 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74  nion {.    volat
8030: 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72  ile int isInterr
8040: 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69  upted; /* True i
8050: 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  f sqlite3_interr
8060: 75 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c  upt has been cal
8070: 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c  led */.    doubl
8080: 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20  e notUsed1;     
8090: 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72         /* Spacer
80a0: 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f   */.  } u1;.  Lo
80b0: 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64  okaside lookasid
80c0: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  e;          /* L
80d0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
80e0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f  configuration */
80f0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
8100: 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
8110: 4f 4e 0a 20 20 69 6e 74 20 28 2a 78 41 75 74 68  ON.  int (*xAuth
8120: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
8130: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
8140: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
8150: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
8160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8180: 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a   Access authoriz
8190: 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a  ation function *
81a0: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41  /.  void *pAuthA
81b0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
81c0: 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e    /* 1st argumen
81d0: 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20  t to the access 
81e0: 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  auth function */
81f0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
8200: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
8210: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
8220: 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29  int (*xProgress)
8230: 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a  (void *);     /*
8240: 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   The progress ca
8250: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
8260: 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20   *pProgressArg; 
8270: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
8280: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f  ument to the pro
8290: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
82a0: 2f 0a 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73  /.  int nProgres
82b0: 73 4f 70 73 3b 20 20 20 20 20 20 20 20 20 20 20  sOps;           
82c0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f    /* Number of o
82d0: 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72  pcodes for progr
82e0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
82f0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
8300: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
8310: 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56  ALTABLE.  int nV
8320: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
8330: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63          /* Alloc
8340: 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54  ated size of aVT
8350: 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  rans */.  Hash a
8360: 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20  Module;         
8370: 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c          /* popul
8380: 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  ated by sqlite3_
8390: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
83a0: 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56  */.  VtabCtx *pV
83b0: 74 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20  tabCtx;         
83c0: 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f     /* Context fo
83d0: 72 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f  r active vtab co
83e0: 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a  nnect/create */.
83f0: 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61    VTable **aVTra
8400: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
8410: 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65  /* Virtual table
8420: 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e  s with open tran
8430: 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54  sactions */.  VT
8440: 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63  able *pDisconnec
8450: 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e  t;    /* Disconn
8460: 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78  ect these in nex
8470: 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  t sqlite3_prepar
8480: 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  e() */.#endif.  
8490: 46 75 6e 63 44 65 66 48 61 73 68 20 61 46 75 6e  FuncDefHash aFun
84a0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  c;            /*
84b0: 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63   Hash table of c
84c0: 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69  onnection functi
84d0: 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43  ons */.  Hash aC
84e0: 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20  ollSeq;         
84f0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f         /* All co
8500: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
8510: 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c  s */.  BusyHandl
8520: 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20  er busyHandler; 
8530: 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c       /* Busy cal
8540: 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44  lback */.  Db aD
8550: 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20  bStatic[2];     
8560: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74           /* Stat
8570: 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68 65  ic space for the
8580: 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65   2 default backe
8590: 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69  nds */.  Savepoi
85a0: 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20  nt *pSavepoint; 
85b0: 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
85c0: 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f 69  f active savepoi
85d0: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73  nts */.  int bus
85e0: 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20  yTimeout;       
85f0: 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68         /* Busy h
8600: 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20  andler timeout, 
8610: 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74  in msec */.  int
8620: 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20   nSavepoint;    
8630: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
8640: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
8650: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
8660: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61  ts */.  int nSta
8670: 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20  tement;         
8680: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
8690: 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d  of nested statem
86a0: 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent-transactions
86b0: 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65    */.  i64 nDefe
86c0: 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20  rredCons;       
86d0: 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65       /* Net defe
86e0: 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73  rred constraints
86f0: 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f   this transactio
8700: 6e 2e 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42  n. */.  int *pnB
8710: 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20  ytesFreed;      
8720: 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
8730: 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20  NULL, increment 
8740: 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29  this in DbFree()
8750: 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   */..#ifdef SQLI
8760: 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
8770: 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65  _NOTIFY.  /* The
8780: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61   following varia
8790: 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f  bles are all pro
87a0: 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54  tected by the ST
87b0: 41 54 49 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a  ATIC_MASTER .  *
87c0: 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20  * mutex, not by 
87d0: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54  sqlite3.mutex. T
87e0: 68 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20  hey are used by 
87f0: 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63  code in notify.c
8800: 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65  . .  **.  ** Whe
8810: 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  n X.pUnlockConne
8820: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
8830: 65 61 6e 73 20 74 68 61 74 20 58 20 69 73 20 77  eans that X is w
8840: 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a  aiting for Y to.
8850: 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74    ** unlock so t
8860: 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65  hat it can proce
8870: 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68  ed..  **.  ** Wh
8880: 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f  en X.pBlockingCo
8890: 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61  nnection==Y, tha
88a0: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d  t means that som
88b0: 65 74 68 69 6e 67 20 74 68 61 74 20 58 20 74 72  ething that X tr
88c0: 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74  ied.  ** tried t
88d0: 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61  o do recently fa
88e0: 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c  iled with an SQL
88f0: 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72  ITE_LOCKED error
8900: 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20   due to locks.  
8910: 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20  ** held by Y..  
8920: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42  */.  sqlite3 *pB
8930: 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f  lockingConnectio
8940: 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e  n; /* Connection
8950: 20 74 68 61 74 20 63 61 75 73 65 64 20 53 51 4c   that caused SQL
8960: 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20  ITE_LOCKED */.  
8970: 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b  sqlite3 *pUnlock
8980: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20  Connection;     
8990: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
89a0: 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72  ion to watch for
89b0: 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69   unlock */.  voi
89c0: 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20  d *pUnlockArg;  
89d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
89e0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
89f0: 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20  o xUnlockNotify 
8a00: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c  */.  void (*xUnl
8a10: 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20  ockNotify)(void 
8a20: 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e  **, int);  /* Un
8a30: 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c  lock notify call
8a40: 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65  back */.  sqlite
8a50: 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b  3 *pNextBlocked;
8a60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
8a70: 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62  in list of all b
8a80: 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f  locked connectio
8a90: 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ns */.#endif.};.
8aa0: 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74  ./*.** A macro t
8ab0: 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65 20 65  o discover the e
8ac0: 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74  ncoding of a dat
8ad0: 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  abase..*/.#defin
8ae0: 65 20 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d  e ENC(db) ((db)-
8af0: 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[0].pSchema-
8b00: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
8b10: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
8b20: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
8b30: 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  gs..*/.#define S
8b40: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
8b50: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20       0x00000001 
8b60: 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63   /* True to trac
8b70: 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e  e VDBE execution
8b80: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
8b90: 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
8ba0: 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a    0x00000002  /*
8bb0: 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73   Uncommitted Has
8bc0: 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20  h table changes 
8bd0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8be0: 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20  E_FullColNames  
8bf0: 20 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20   0x00000004  /* 
8c00: 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e  Show full column
8c10: 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54   names on SELECT
8c20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
8c30: 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73  TE_ShortColNames
8c40: 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a    0x00000008  /*
8c50: 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75   Show short colu
8c60: 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  mns names */.#de
8c70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
8c80: 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30  tRows      0x000
8c90: 30 30 30 31 30 20 20 2f 2a 20 43 6f 75 6e 74 20  00010  /* Count 
8ca0: 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20  rows changed by 
8cb0: 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20  INSERT, */.     
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ce0: 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45       /*   DELETE
8cf0: 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20  , or UPDATE and 
8d00: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20  return */.      
8d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d30: 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75      /*   the cou
8d40: 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62  nt using a callb
8d50: 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ack. */.#define 
8d60: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
8d70: 61 63 6b 20 20 20 30 78 30 30 30 30 30 30 32 30  ack   0x00000020
8d80: 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
8d90: 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66  callback once if
8da0: 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20   the */.        
8db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8dd0: 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65    /*   result se
8de0: 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64  t is empty */.#d
8df0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c  efine SQLITE_Sql
8e00: 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30 30  Trace       0x00
8e10: 30 30 30 30 34 30 20 20 2f 2a 20 44 65 62 75 67  000040  /* Debug
8e20: 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74   print SQL as it
8e30: 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65   executes */.#de
8e40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
8e50: 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30 30 30  Listing    0x000
8e60: 30 30 30 38 30 20 20 2f 2a 20 44 65 62 75 67 20  00080  /* Debug 
8e70: 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45  listings of VDBE
8e80: 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65   programs */.#de
8e90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74  fine SQLITE_Writ
8ea0: 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30  eSchema    0x000
8eb0: 30 30 31 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00100  /* OK to 
8ec0: 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41  update SQLITE_MA
8ed0: 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20  STER */.#define 
8ee0: 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70  SQLITE_VdbeAddop
8ef0: 54 72 61 63 65 20 30 78 30 30 30 30 30 32 30 30  Trace 0x00000200
8f00: 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74    /* Trace sqlit
8f10: 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61  e3VdbeAddOp() ca
8f20: 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lls */.#define S
8f30: 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63  QLITE_IgnoreChec
8f40: 6b 73 20 20 20 30 78 30 30 30 30 30 34 30 30 20  ks   0x00000400 
8f50: 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72   /* Do not enfor
8f60: 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ce check constra
8f70: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
8f80: 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
8f90: 6d 69 74 74 65 64 20 30 78 30 30 30 30 38 30 30  mitted 0x0000800
8fa0: 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d    /* For shared-
8fb0: 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64  cache mode */.#d
8fc0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67  efine SQLITE_Leg
8fd0: 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30  acyFileFmt  0x00
8fe0: 30 30 31 30 30 30 20 20 2f 2a 20 43 72 65 61 74  001000  /* Creat
8ff0: 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  e new databases 
9000: 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23  in format 1 */.#
9010: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
9020: 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30  llFSync      0x0
9030: 30 30 30 32 30 30 30 20 20 2f 2a 20 55 73 65 20  0002000  /* Use 
9040: 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68  full fsync on th
9050: 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65  e backend */.#de
9060: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74  fine SQLITE_Ckpt
9070: 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30  FullFSync  0x000
9080: 30 34 30 30 30 20 20 2f 2a 20 55 73 65 20 66 75  04000  /* Use fu
9090: 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65  ll fsync for che
90a0: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69  ckpoint */.#defi
90b0: 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65  ne SQLITE_Recove
90c0: 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30 30 38  ryMode   0x00008
90d0: 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73  000  /* Ignore s
90e0: 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a  chema errors */.
90f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
9100: 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78  everseOrder   0x
9110: 30 30 30 31 30 30 30 30 20 20 2f 2a 20 52 65 76  00010000  /* Rev
9120: 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53  erse unordered S
9130: 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e  ELECTs */.#defin
9140: 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67  e SQLITE_RecTrig
9150: 67 65 72 73 20 20 20 20 30 78 30 30 30 32 30 30  gers    0x000200
9160: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65  00  /* Enable re
9170: 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
9180: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9190: 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20  TE_ForeignKeys  
91a0: 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a    0x00040000  /*
91b0: 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e   Enforce foreign
91c0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
91d0: 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c    */.#define SQL
91e0: 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20  ITE_AutoIndex   
91f0: 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f     0x00080000  /
9200: 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74  * Enable automat
9210: 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ic indexes */.#d
9220: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65  efine SQLITE_Pre
9230: 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30  ferBuiltin  0x00
9240: 31 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65  100000  /* Prefe
9250: 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69  rence to built-i
9260: 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69  n funcs */.#defi
9270: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
9280: 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 32 30 30  tension  0x00200
9290: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
92a0: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f  oad_extension */
92b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
92c0: 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30  EnableTrigger  0
92d0: 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 54 72  x00400000  /* Tr
92e0: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69  ue to enable tri
92f0: 67 67 65 72 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ggers */../*.** 
9300: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
9310: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
9320: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
9330: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
9340: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
9350: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
9360: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
9370: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
9380: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
9390: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
93a0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
93b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
93c0: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
93d0: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
93e0: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
93f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9400: 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30  ColumnCache    0
9410: 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0002   /* Colum
9420: 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  n cache */.#defi
9430: 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42  ne SQLITE_GroupB
9440: 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20  yOrder   0x0004 
9450: 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76    /* GROUPBY cov
9460: 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f  er of ORDERBY */
9470: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9480: 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30  FactorOutConst 0
9490: 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74  x0008   /* Const
94a0: 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f  ant factoring */
94b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
94c0: 49 64 78 52 65 61 6c 41 73 49 6e 74 20 20 20 30  IdxRealAsInt   0
94d0: 78 30 30 31 30 20 20 20 2f 2a 20 53 74 6f 72 65  x0010   /* Store
94e0: 20 52 45 41 4c 20 61 73 20 49 4e 54 20 69 6e 20   REAL as INT in 
94f0: 69 6e 64 69 63 65 73 20 2a 2f 0a 23 64 65 66 69  indices */.#defi
9500: 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e  ne SQLITE_Distin
9510: 63 74 4f 70 74 20 20 20 20 30 78 30 30 32 30 20  ctOpt    0x0020 
9520: 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73    /* DISTINCT us
9530: 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  ing indexes */.#
9540: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
9550: 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30  verIdxScan   0x0
9560: 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e  040   /* Coverin
9570: 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f  g index scans */
9580: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9590: 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30  OrderByIdxJoin 0
95a0: 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52  x0080   /* ORDER
95b0: 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61   BY of joins via
95c0: 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
95d0: 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72  e SQLITE_SubqCor
95e0: 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30 20 20  outine  0x0100  
95f0: 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62   /* Evaluate sub
9600: 71 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75  queries as corou
9610: 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tines */.#define
9620: 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69   SQLITE_Transiti
9630: 76 65 20 20 20 20 20 30 78 30 32 30 30 20 20 20  ve     0x0200   
9640: 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f  /* Transitive co
9650: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
9660: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f  fine SQLITE_AllO
9670: 70 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66  pts        0xfff
9680: 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d  f   /* All optim
9690: 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a  izations */../*.
96a0: 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65  ** Macros for te
96b0: 73 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  sting whether or
96c0: 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f   not optimizatio
96d0: 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f  ns are enabled o
96e0: 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  r disabled..*/.#
96f0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9700: 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
9710: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
9720: 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c  tionDisabled(db,
9730: 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e   mask)  (((db)->
9740: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
9750: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f  ))!=0).#define O
9760: 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c  ptimizationEnabl
9770: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28  ed(db, mask)   (
9780: 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67  ((db)->dbOptFlag
9790: 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65  s&(mask))==0).#e
97a0: 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  lse.#define Opti
97b0: 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64  mizationDisabled
97c0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64  (db, mask)  0.#d
97d0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
97e0: 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61  onEnabled(db, ma
97f0: 73 6b 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a  sk)   1.#endif..
9800: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
9810: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
9820: 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64  lite.magic field
9830: 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73  ..** The numbers
9840: 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74   are obtained at
9850: 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65   random and have
9860: 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e   no special mean
9870: 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68  ing, other.** th
9880: 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63  an being distinc
9890: 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68  t from one anoth
98a0: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
98b0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
98c0: 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37 20       0xa029a697 
98d0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
98e0: 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
98f0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
9900: 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33 33  SED   0x9f3c2d33
9910: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
9920: 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69   closed */.#defi
9930: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
9940: 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37 31  SICK     0x4b771
9950: 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e  290  /* Error an
9960: 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65  d awaiting close
9970: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9980: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20  TE_MAGIC_BUSY   
9990: 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a    0xf03b7906  /*
99a0: 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65 6e   Database curren
99b0: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64  tly in use */.#d
99c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
99d0: 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35  IC_ERROR    0xb5
99e0: 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51  357930  /* An SQ
99f0: 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f  LITE_MISUSE erro
9a00: 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64  r occurred */.#d
9a10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
9a20: 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34  IC_ZOMBIE   0x64
9a30: 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65  cffc7f  /* Close
9a40: 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74 65   with last state
9a50: 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f  ment close */../
9a60: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75  *.** Each SQL fu
9a70: 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  nction is define
9a80: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
9a90: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
9aa0: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
9ab0: 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
9ac0: 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
9ad0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
9ae0: 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61  lite.aFunc.** ha
9af0: 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20  sh table.  When 
9b00: 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f  multiple functio
9b10: 6e 73 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ns have the same
9b20: 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20   name, the hash 
9b30: 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20  table.** points 
9b40: 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  to a linked list
9b50: 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74   of these struct
9b60: 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ures..*/.struct 
9b70: 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20  FuncDef {.  i16 
9b80: 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
9b90: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
9ba0: 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61  guments.  -1 mea
9bb0: 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a  ns unlimited */.
9bc0: 20 20 75 38 20 69 50 72 65 66 45 6e 63 3b 20 20    u8 iPrefEnc;  
9bd0: 20 20 20 20 20 20 20 2f 2a 20 50 72 65 66 65 72         /* Prefer
9be0: 72 65 64 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  red text encodin
9bf0: 67 20 28 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  g (SQLITE_UTF8, 
9c00: 31 36 4c 45 2c 20 31 36 42 45 29 20 2a 2f 0a 20  16LE, 16BE) */. 
9c10: 20 75 38 20 66 6c 61 67 73 3b 20 20 20 20 20 20   u8 flags;      
9c20: 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f        /* Some co
9c30: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c  mbination of SQL
9c40: 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20  ITE_FUNC_* */.  
9c50: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
9c60: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74       /* User dat
9c70: 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20  a parameter */. 
9c80: 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b   FuncDef *pNext;
9c90: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75        /* Next fu
9ca0: 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65  nction with same
9cb0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20   name */.  void 
9cc0: 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33  (*xFunc)(sqlite3
9cd0: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
9ce0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
9cf0: 2f 2a 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74  /* Regular funct
9d00: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ion */.  void (*
9d10: 78 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63  xStep)(sqlite3_c
9d20: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
9d30: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
9d40: 20 41 67 67 72 65 67 61 74 65 20 73 74 65 70 20   Aggregate step 
9d50: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  */.  void (*xFin
9d60: 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63  alize)(sqlite3_c
9d70: 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20  ontext*);       
9d80: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72           /* Aggr
9d90: 65 67 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20  egate finalizer 
9da0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  */.  char *zName
9db0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  ;         /* SQL
9dc0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
9dd0: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63  ction. */.  Func
9de0: 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20  Def *pHash;     
9df0: 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20   /* Next with a 
9e00: 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62  different name b
9e10: 75 74 20 74 68 65 20 73 61 6d 65 20 68 61 73 68  ut the same hash
9e20: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75   */.  FuncDestru
9e30: 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
9e40: 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63  r;   /* Referenc
9e50: 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75  e counted destru
9e60: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
9e70: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
9e80: 73 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73  structure encaps
9e90: 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75  ulates a user-fu
9ea0: 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f  nction destructo
9eb0: 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a  r callback (as.*
9ec0: 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69  * configured usi
9ed0: 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69  ng create_functi
9ee0: 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72  on_v2()) and a r
9ef0: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72  eference counter
9f00: 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65  . When.** create
9f10: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69  _function_v2() i
9f20: 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61  s called to crea
9f30: 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69  te a function wi
9f40: 74 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c  th a destructor,
9f50: 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a  .** a single obj
9f60: 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65  ect of this type
9f70: 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46   is allocated. F
9f80: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52  uncDestructor.nR
9f90: 65 66 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a  ef is set to .**
9fa0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46   the number of F
9fb0: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63  uncDef objects c
9fc0: 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31  reated (either 1
9fd0: 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67   or 3, depending
9fe0: 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f   on whether.** o
9ff0: 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66  r not the specif
a000: 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20  ied encoding is 
a010: 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65  SQLITE_ANY). The
a020: 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75   FuncDef.pDestru
a030: 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f  ctor.** member o
a040: 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65  f each of the ne
a050: 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  w FuncDef object
a060: 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e  s is set to poin
a070: 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74  t to the allocat
a080: 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75  ed.** FuncDestru
a090: 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  ctor..**.** Ther
a0a0: 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65  eafter, when one
a0b0: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20   of the FuncDef 
a0c0: 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74  objects is delet
a0d0: 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63  ed, the referenc
a0e0: 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68  e.** count on th
a0f0: 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63  is object is dec
a100: 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69  remented. When i
a110: 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65  t reaches 0, the
a120: 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69   destructor.** i
a130: 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68  s invoked and th
a140: 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  e FuncDestructor
a150: 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64   structure freed
a160: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
a170: 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69  Destructor {.  i
a180: 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20  nt nRef;.  void 
a190: 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64  (*xDestroy)(void
a1a0: 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73   *);.  void *pUs
a1b0: 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  erData;.};../*.*
a1c0: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
a1d0: 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c  s for FuncDef.fl
a1e0: 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20  ags.  Note that 
a1f0: 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20  the _LENGTH and 
a200: 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65  _TYPEOF.** value
a210: 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e  s must correspon
a220: 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  d to OPFLAG_LENG
a230: 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47  THARG and OPFLAG
a240: 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 54 68 65  _TYPEOFARG.  The
a250: 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74  re.** are assert
a260: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  () statements in
a270: 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72   the code to ver
a280: 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65  ify this..*/.#de
a290: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
a2a0: 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 31 20 2f  _LIKE     0x01 /
a2b0: 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20  * Candidate for 
a2c0: 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a  the LIKE optimiz
a2d0: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
a2e0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53   SQLITE_FUNC_CAS
a2f0: 45 20 20 20 20 20 30 78 30 32 20 2f 2a 20 43 61  E     0x02 /* Ca
a300: 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b  se-sensitive LIK
a310: 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20  E-type function 
a320: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a330: 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20  E_FUNC_EPHEM    
a340: 30 78 30 34 20 2f 2a 20 45 70 68 65 6d 65 72 61  0x04 /* Ephemera
a350: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
a360: 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  VDBE */.#define 
a370: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
a380: 43 4f 4c 4c 20 30 78 30 38 20 2f 2a 20 73 71 6c  COLL 0x08 /* sql
a390: 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53  ite3GetFuncCollS
a3a0: 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63 61  eq() might be ca
a3b0: 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lled */.#define 
a3c0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e  SQLITE_FUNC_COUN
a3d0: 54 20 20 20 20 30 78 31 30 20 2f 2a 20 42 75 69  T    0x10 /* Bui
a3e0: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
a3f0: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
a400: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
a410: 43 4f 41 4c 45 53 43 45 20 30 78 32 30 20 2f 2a  COALESCE 0x20 /*
a420: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73   Built-in coales
a430: 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29  ce() or ifnull()
a440: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
a450: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
a460: 5f 4c 45 4e 47 54 48 20 20 20 30 78 34 30 20 2f  _LENGTH   0x40 /
a470: 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74  * Built-in lengt
a480: 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  h() function */.
a490: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a4a0: 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 38  UNC_TYPEOF   0x8
a4b0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79  0 /* Built-in ty
a4c0: 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
a4d0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  */../*.** The fo
a4e0: 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61  llowing three ma
a4f0: 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29  cros, FUNCTION()
a500: 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64  , LIKEFUNC() and
a510: 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65   AGGREGATE() are
a520: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61  .** used to crea
a530: 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  te the initializ
a540: 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63  ers for the Func
a550: 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a  Def structures..
a560: 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e  **.**   FUNCTION
a570: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
a580: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
a590: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
a5a0: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
a5b0: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
a5c0: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
a5d0: 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69   zName .**     i
a5e0: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20  mplemented by C 
a5f0: 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74  function xFunc t
a600: 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
a610: 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a   arguments. The.
a620: 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73  **     value pas
a630: 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63  sed as iArg is c
a640: 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29  ast to a (void*)
a650: 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61   and made availa
a660: 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68  ble.**     as th
a670: 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  e user-data (sql
a680: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
a690: 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69  ) for the functi
a6a0: 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61  on. If .**     a
a6b0: 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74  rgument bNC is t
a6c0: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51  rue, then the SQ
a6d0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
a6e0: 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a  LL flag is set..
a6f0: 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54  **.**   AGGREGAT
a700: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  E(zName, nArg, i
a710: 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c  Arg, bNC, xStep,
a720: 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20   xFinal).**     
a730: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
a740: 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
a750: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
a760: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a  implemented by.*
a770: 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63  *     the C func
a780: 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20  tions xStep and 
a790: 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73  xFinal. The firs
a7a0: 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72  t four parameter
a7b0: 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74  s.**     are int
a7c0: 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20  erpreted in the 
a7d0: 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20  same way as the 
a7e0: 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65  first 4 paramete
a7f0: 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e  rs to.**     FUN
a800: 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20  CTION()..**.**  
a810: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
a820: 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61   nArg, pArg, fla
a830: 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  gs).**     Used 
a840: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
a850: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
a860: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
a870: 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20  tion zName .**  
a880: 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20     that accepts 
a890: 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61  nArg arguments a
a8a0: 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  nd is implemente
a8b0: 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43  d by a call to C
a8c0: 20 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f   .**     functio
a8d0: 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75  n likeFunc. Argu
a8e0: 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73  ment pArg is cas
a8f0: 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20  t to a (void *) 
a900: 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20  and made.**     
a910: 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65  available as the
a920: 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64   function user-d
a930: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
a940: 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a  r_data()). The.*
a950: 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c  *     FuncDef.fl
a960: 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20  ags variable is 
a970: 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
a980: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
a990: 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61  lags.**     para
a9a0: 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  meter..*/.#defin
a9b0: 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  e FUNCTION(zName
a9c0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
a9d0: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
a9e0: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
a9f0: 2c 20 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  , (bNC*SQLITE_FU
aa00: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
aa10: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
aa20: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
aa30: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
aa40: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
aa50: 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d  e FUNCTION2(zNam
aa60: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
aa70: 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61  NC, xFunc, extra
aa80: 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
aa90: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 28  , SQLITE_UTF8, (
aaa0: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
aab0: 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46  NEEDCOLL)|extraF
aac0: 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54  lags, \.   SQLIT
aad0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
aae0: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
aaf0: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
ab00: 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55  }.#define STR_FU
ab10: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
ab20: 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78  rg, pArg, bNC, x
ab30: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
ab40: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 62 4e   SQLITE_UTF8, bN
ab50: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
ab60: 45 44 43 4f 4c 4c 2c 20 5c 0a 20 20 20 70 41 72  EDCOLL, \.   pAr
ab70: 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
ab80: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
ab90: 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e  .#define LIKEFUN
aba0: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  C(zName, nArg, a
abb0: 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b  rg, flags) \.  {
abc0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
abd0: 38 2c 20 66 6c 61 67 73 2c 20 28 76 6f 69 64 20  8, flags, (void 
abe0: 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75  *)arg, 0, likeFu
abf0: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
ac00: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
ac10: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
ac20: 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
ac30: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c  xStep, xFinal) \
ac40: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
ac50: 5f 55 54 46 38 2c 20 6e 63 2a 53 51 4c 49 54 45  _UTF8, nc*SQLITE
ac60: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 2c 20  _FUNC_NEEDCOLL, 
ac70: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
ac80: 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
ac90: 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
aca0: 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a  #zName,0,0}../*.
acb0: 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73  ** All current s
acc0: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74  avepoints are st
acd0: 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
ace0: 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61   list starting a
acf0: 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61  t.** sqlite3.pSa
ad00: 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72  vepoint. The fir
ad10: 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68  st element in th
ad20: 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f  e list is the mo
ad30: 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f  st recently.** o
ad40: 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  pened savepoint.
ad50: 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   Savepoints are 
ad60: 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73  added to the lis
ad70: 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a  t by the vdbe.**
ad80: 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
ad90: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  struction..*/.st
ada0: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b  ruct Savepoint {
adb0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
add0: 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f         /* Savepo
ade0: 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65  int name (nul-te
adf0: 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69  rminated) */.  i
ae00: 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
ae10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ae20: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
ae30: 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c  deferred fk viol
ae40: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 53 61 76 65  ations */.  Save
ae50: 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20  point *pNext;   
ae60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae70: 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f  /* Parent savepo
ae80: 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a  int (if any) */.
ae90: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
aea0: 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64  llowing are used
aeb0: 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70   as the second p
aec0: 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
aed0: 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a  te3Savepoint(),.
aee0: 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31  ** and as the P1
aef0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
af00: 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
af10: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64  struction..*/.#d
af20: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
af30: 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65  BEGIN      0.#de
af40: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
af50: 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66  ELEASE    1.#def
af60: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f  ine SAVEPOINT_RO
af70: 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a  LLBACK   2.../*.
af80: 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d  ** Each SQLite m
af90: 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74  odule (virtual t
afa0: 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29  able definition)
afb0: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
afc0: 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
afd0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
afe0: 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64  tructure, stored
aff0: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e   in the sqlite3.
b000: 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20  aModule.** hash 
b010: 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  table..*/.struct
b020: 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73   Module {.  cons
b030: 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
b040: 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20   *pModule;      
b050: 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69   /* Callback poi
b060: 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  nters */.  const
b070: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
b080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b090: 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74  /* Name passed t
b0a0: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
b0b0: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  ) */.  void *pAu
b0c0: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
b0d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
b0e0: 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72  Aux passed to cr
b0f0: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
b100: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
b110: 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  oy)(void *);    
b120: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c          /* Modul
b130: 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  e destructor fun
b140: 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ction */.};../*.
b150: 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
b160: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
b170: 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   of an SQL table
b180: 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69   is held in an i
b190: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
b1a0: 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  is structure..*/
b1b0: 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b  .struct Column {
b1c0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
b1d0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
b1e0: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
b1f0: 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20  Expr *pDflt;    
b200: 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75   /* Default valu
b210: 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
b220: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c   */.  char *zDfl
b230: 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e  t;     /* Origin
b240: 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 64  al text of the d
b250: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a  efault value */.
b260: 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20    char *zType;  
b270: 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20     /* Data type 
b280: 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20  for this column 
b290: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  */.  char *zColl
b2a0: 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  ;     /* Collati
b2b0: 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66  ng sequence.  If
b2c0: 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64   NULL, use the d
b2d0: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e  efault */.  u8 n
b2e0: 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20  otNull;      /* 
b2f0: 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20  An OE_ code for 
b300: 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e  handling a NOT N
b310: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
b320: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
b330: 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74  y;   /* One of t
b340: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e  he SQLITE_AFF_..
b350: 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  . values */.  u1
b360: 36 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 2f  6 colFlags;    /
b370: 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72  * Boolean proper
b380: 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c  ties.  See COLFL
b390: 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f  AG_ defines belo
b3a0: 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  w */.};../* Allo
b3b0: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43  wed values for C
b3c0: 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a  olumn.colFlags:.
b3d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
b3e0: 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30  AG_PRIMKEY  0x00
b3f0: 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  01    /* Column 
b400: 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  is part of the p
b410: 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
b420: 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49  efine COLFLAG_HI
b430: 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20  DDEN   0x0002   
b440: 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c   /* A hidden col
b450: 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c  umn in a virtual
b460: 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   table */../*.**
b470: 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65   A "Collating Se
b480: 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e  quence" is defin
b490: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
b4a0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
b4b0: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
b4c0: 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61   Conceptually, a
b4d0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
b4e0: 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  nce consists of 
b4f0: 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20  a name and.** a 
b500: 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69  comparison routi
b510: 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ne that defines 
b520: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61  the order of tha
b530: 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a  t sequence..**.*
b540: 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d  * If CollSeq.xCm
b550: 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65  p is NULL, it me
b560: 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ans that the.** 
b570: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
b580: 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  ce is undefined.
b590: 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20    Indices built 
b5a0: 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a  on an undefined.
b5b0: 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
b5c0: 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65  uence may not be
b5d0: 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e   read or written
b5e0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c  ..*/.struct Coll
b5f0: 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  Seq {.  char *zN
b600: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
b610: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c   Name of the col
b620: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c  lating sequence,
b630: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a   UTF-8 encoded *
b640: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
b650: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
b660: 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c  t encoding handl
b670: 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a  ed by xCmp() */.
b680: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20    void *pUser;  
b690: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
b6a0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d   argument to xCm
b6b0: 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  p() */.  int (*x
b6c0: 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  Cmp)(void*,int, 
b6d0: 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
b6e0: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  , const void*);.
b6f0: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
b700: 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72  oid*);  /* Destr
b710: 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20  uctor for pUser 
b720: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73  */.};../*.** A s
b730: 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65  ort order can be
b740: 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44   either ASC or D
b750: 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ESC..*/.#define 
b760: 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20  SQLITE_SO_ASC   
b770: 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69      0  /* Sort i
b780: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
b790: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
b7a0: 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20  ITE_SO_DESC     
b7b0: 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   1  /* Sort in a
b7c0: 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
b7d0: 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
b7e0: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
b7f0: 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
b800: 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
b810: 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
b820: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
b830: 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
b840: 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
b850: 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
b860: 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
b870: 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
b880: 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
b890: 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
b8a0: 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
b8b0: 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20   consecutively. 
b8c0: 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68   .**.** But rath
b8d0: 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69  er than start wi
b8e0: 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65  th 0 or 1, we be
b8f0: 67 69 6e 20 77 69 74 68 20 27 61 27 2e 20 20 54  gin with 'a'.  T
b900: 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e  hat way,.** when
b910: 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69   multiple affini
b920: 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e  ty types are con
b930: 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61  catenated into a
b940: 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75   string and.** u
b950: 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70  sed as the P4 op
b960: 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c  erand, they will
b970: 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c   be more readabl
b980: 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c  e..**.** Note al
b990: 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65  so that the nume
b9a0: 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72  ric types are gr
b9b0: 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73  ouped together s
b9c0: 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a  o that testing.*
b9d0: 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20  * for a numeric 
b9e0: 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65  type is a single
b9f0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a   comparison..*/.
ba00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
ba10: 46 46 5f 54 45 58 54 20 20 20 20 20 27 61 27 0a  FF_TEXT     'a'.
ba20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
ba30: 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a  FF_NONE     'b'.
ba40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
ba50: 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 63 27 0a  FF_NUMERIC  'c'.
ba60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
ba70: 46 46 5f 49 4e 54 45 47 45 52 20 20 27 64 27 0a  FF_INTEGER  'd'.
ba80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
ba90: 46 46 5f 52 45 41 4c 20 20 20 20 20 27 65 27 0a  FF_REAL     'e'.
baa0: 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
bab0: 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  IsNumericAffinit
bac0: 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49  y(X)  ((X)>=SQLI
bad0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a  TE_AFF_NUMERIC).
bae0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
baf0: 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65  E_AFF_MASK value
bb00: 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20  s masks off the 
bb10: 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73  significant bits
bb20: 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69   of an.** affini
bb30: 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64  ty value. .*/.#d
bb40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
bb50: 5f 4d 41 53 4b 20 20 20 20 20 30 78 36 37 0a 0a  _MASK     0x67..
bb60: 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c  /*.** Additional
bb70: 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74   bit values that
bb80: 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74   can be ORed wit
bb90: 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69  h an affinity wi
bba0: 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e  thout.** changin
bbb0: 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a  g the affinity..
bbc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bbd0: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30  E_JUMPIFNULL   0
bbe0: 78 30 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66  x08  /* jumps if
bbf0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
bc00: 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  is NULL */.#defi
bc10: 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  ne SQLITE_STOREP
bc20: 32 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20  2      0x10  /* 
bc30: 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
bc40: 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74  reg[P2] rather t
bc50: 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66  han jump */.#def
bc60: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  ine SQLITE_NULLE
bc70: 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a  Q       0x80  /*
bc80: 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f   NULL=NULL */../
bc90: 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
bca0: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
bcb0: 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
bcc0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
bcd0: 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
bce0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
bcf0: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64   .**.** If the d
bd00: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
bd10: 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74  s shared, then t
bd20: 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74  here is one inst
bd30: 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ance of this.** 
bd40: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61  structure for ea
bd50: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
bd60: 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a  ection (sqlite3*
bd70: 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20  ) that uses the 
bd80: 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61  shared.** schema
bd90: 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
bda0: 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  e each database 
bdb0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69  connection requi
bdc0: 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71  res its own uniq
bdd0: 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  ue.** instance o
bde0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  f the sqlite3_vt
bdf0: 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20  ab* handle used 
be00: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
be10: 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20  rtual table .** 
be20: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
be30: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
be40: 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65  ndles can not be
be50: 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 20   shared between 
be60: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
be70: 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77  nections, even w
be80: 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20  hen the rest of 
be90: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
bea0: 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d  tabase .** schem
beb0: 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20  a is shared, as 
bec0: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
bed0: 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20  on often stores 
bee0: 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
bef0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
bf00: 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76  e passed to it v
bf10: 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28  ia the xConnect(
bf20: 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d  ) or xCreate() m
bf30: 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20  ethod.** during 
bf40: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
bf50: 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20  nternally. This 
bf60: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
bf70: 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a  ion handle may.*
bf80: 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62  * then be used b
bf90: 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  y the virtual ta
bfa0: 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
bfb0: 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61  on to access rea
bfc0: 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74  l tables .** wit
bfd0: 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hin the database
bfe0: 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61  . So that they a
bff0: 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66  ppear as part of
c000: 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a   the callers .**
c010: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
c020: 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65  ese accesses nee
c030: 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61  d to be made via
c040: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
c050: 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  se .** connectio
c060: 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
c070: 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
c080: 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
c090: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
c0a0: 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
c0b0: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
c0c0: 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
c0d0: 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
c0e0: 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
c0f0: 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
c100: 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
c110: 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
c120: 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
c130: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
c140: 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
c150: 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
c160: 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
c170: 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
c180: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
c190: 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
c1a0: 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
c1b0: 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
c1c0: 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
c1d0: 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
c1e0: 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
c1f0: 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
c200: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
c210: 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
c220: 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
c230: 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
c240: 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
c250: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
c260: 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
c270: 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
c280: 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
c290: 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
c2a0: 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
c2b0: 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
c2c0: 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
c2d0: 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
c2e0: 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
c2f0: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
c300: 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65  e not .** delete
c310: 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
c320: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
c330: 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e  are not xDisconn
c340: 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65  ect()ed .** imme
c350: 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64  diately. Instead
c360: 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64  , they are moved
c370: 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e   from the Table.
c380: 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a  pVTable list to.
c390: 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65  ** another linke
c3a0: 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79  d list headed by
c3b0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69   the sqlite3.pDi
c3c0: 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20  sconnect member 
c3d0: 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  of the.** corres
c3e0: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20  ponding sqlite3 
c3f0: 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20  structure. They 
c400: 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64  are then deleted
c410: 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a  /xDisconnected .
c420: 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73  ** next time a s
c430: 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70  tatement is prep
c440: 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20  ared using said 
c450: 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69  sqlite3*. This i
c460: 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f  s done.** to avo
c470: 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75  id deadlock issu
c480: 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c  es involving mul
c490: 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75  tiple sqlite3.mu
c4a0: 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20  tex mutexes..** 
c4b0: 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74  Refer to comment
c4c0: 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e  s above function
c4d0: 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
c4e0: 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a  ckList() for an.
c4f0: 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61  ** explanation a
c500: 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73  s to why it is s
c510: 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e  afe to add an en
c520: 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  try to an sqlite
c530: 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a  3.pDisconnect.**
c540: 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f   list without ho
c550: 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73  lding the corres
c560: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e  ponding sqlite3.
c570: 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a  mutex mutex..**.
c580: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f  ** The memory fo
c590: 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69  r objects of thi
c5a0: 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73  s type is always
c5b0: 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a   allocated by .*
c5c0: 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
c5d0: 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
c5e0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
c5f0: 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
c600: 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20  e.db as .** the 
c610: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
c620: 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65  */.struct VTable
c630: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
c640: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
c650: 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * Database conne
c660: 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ction associated
c670: 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65   with this table
c680: 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d   */.  Module *pM
c690: 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  od;             
c6a0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f  /* Pointer to mo
c6b0: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
c6c0: 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ion */.  sqlite3
c6d0: 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20  _vtab *pVtab;   
c6e0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
c6f0: 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a   vtab instance *
c700: 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
c710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c720: 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
c730: 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75  ers to this stru
c740: 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43  cture */.  u8 bC
c750: 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20  onstraint;      
c760: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
c770: 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
c780: 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69  supported */.  i
c790: 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt iSavepoint;  
c7a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74           /* Dept
c7b0: 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49  h of the SAVEPOI
c7c0: 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54  NT stack */.  VT
c7d0: 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20  able *pNext;    
c7e0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
c7f0: 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  in linked list (
c800: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b  see above) */.};
c810: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
c820: 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73   table is repres
c830: 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
c840: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
c850: 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69  f the.** followi
c860: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
c870: 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20  .** Table.zName 
c880: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
c890: 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63  he table.  The c
c8a0: 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69  ase of the origi
c8b0: 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41  nal.** CREATE TA
c8c0: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  BLE statement is
c8d0: 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73   stored, but cas
c8e0: 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69  e is not signifi
c8f0: 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70  cant for.** comp
c900: 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54  arisons..**.** T
c910: 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65  able.nCol is the
c920: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
c930: 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ns in this table
c940: 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73  .  Table.aCol is
c950: 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
c960: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c   an array of Col
c970: 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20  umn structures, 
c980: 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  one for each col
c990: 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  umn..**.** If th
c9a0: 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49  e table has an I
c9b0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
c9c0: 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69  EY, then Table.i
c9d0: 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64 65  PKey is the inde
c9e0: 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75  x of.** the colu
c9f0: 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61 74 20  mn that is that 
ca00: 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65  key.   Otherwise
ca10: 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20   Table.iPKey is 
ca20: 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a  negative.  Note.
ca30: 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61  ** that the data
ca40: 74 79 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d  type of the PRIM
ca50: 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20  ARY KEY must be 
ca60: 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69 73  INTEGER for this
ca70: 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20   field to.** be 
ca80: 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52  set.  An INTEGER
ca90: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
caa0: 75 73 65 64 20 61 73 20 74 68 65 20 72 6f 77 69  used as the rowi
cab0: 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
cac0: 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20  f.** the table. 
cad0: 20 49 66 20 61 20 74 61 62 6c 65 20 68 61 73 20   If a table has 
cae0: 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  no INTEGER PRIMA
caf0: 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72  RY KEY, then a r
cb00: 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69  andom rowid.** i
cb10: 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20  s generated for 
cb20: 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20  each row of the 
cb30: 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72  table.  TF_HasPr
cb40: 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74 20  imaryKey is set 
cb50: 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  if.** the table 
cb60: 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20  has any PRIMARY 
cb70: 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20  KEY, INTEGER or 
cb80: 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a  otherwise..**.**
cb90: 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74   Table.tnum is t
cba0: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  he page number f
cbb0: 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65  or the root BTre
cbc0: 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  e page of the ta
cbd0: 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61  ble in the.** da
cbe0: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66  tabase file.  If
cbf0: 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68   Table.iDb is th
cc00: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
cc10: 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 62 61  atabase table ba
cc20: 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69  ckend.** in sqli
cc30: 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20  te.aDb[].  0 is 
cc40: 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
cc50: 61 62 61 73 65 20 61 6e 64 20 31 20 69 73 20 66  abase and 1 is f
cc60: 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68 61 74  or the file that
cc70: 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72  .** holds tempor
cc80: 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69  ary tables and i
cc90: 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45  ndices.  If TF_E
cca0: 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a  phemeral is set.
ccb0: 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  ** then the tabl
ccc0: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  e is stored in a
ccd0: 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 61 75   file that is au
cce0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65  tomatically dele
ccf0: 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20  ted.** when the 
cd00: 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74  VDBE cursor to t
cd10: 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73  he table is clos
cd20: 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ed.  In this cas
cd30: 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a  e Table.tnum .**
cd40: 20 72 65 66 65 72 73 20 56 44 42 45 20 63 75 72   refers VDBE cur
cd50: 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20  sor number that 
cd60: 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20  holds the table 
cd70: 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65  open, not to the
cd80: 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75   root.** page nu
cd90: 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74  mber.  Transient
cda0: 20 74 61 62 6c 65 73 20 61 72 65 20 75 73 65 64   tables are used
cdb0: 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73   to hold the res
cdc0: 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62  ults of a.** sub
cdd0: 2d 71 75 65 72 79 20 74 68 61 74 20 61 70 70 65  -query that appe
cde0: 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61  ars instead of a
cdf0: 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65   real table name
ce00: 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
ce10: 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c  use .** of a SEL
ce20: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
ce30: 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b  /.struct Table {
ce40: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
ce50: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
ce60: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  of the table or 
ce70: 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e  view */.  Column
ce80: 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f   *aCol;        /
ce90: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
cea0: 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
ceb0: 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  */.  Index *pInd
cec0: 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  ex;       /* Lis
ced0: 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73  t of SQL indexes
cee0: 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   on this table. 
cef0: 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
cf00: 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c  lect;     /* NUL
cf10: 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50  L for tables.  P
cf20: 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74  oints to definit
cf30: 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a  ion if a view. *
cf40: 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b  /.  FKey *pFKey;
cf50: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b           /* Link
cf60: 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66  ed list of all f
cf70: 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74  oreign keys in t
cf80: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63  his table */.  c
cf90: 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
cfa0: 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
cfb0: 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
cfc0: 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
cfd0: 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  mn */.#ifndef SQ
cfe0: 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a  LITE_OMIT_CHECK.
cff0: 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65    ExprList *pChe
d000: 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48  ck;    /* All CH
d010: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ECK constraints 
d020: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 74 52 6f 77  */.#endif.  tRow
d030: 63 6e 74 20 6e 52 6f 77 45 73 74 3b 20 20 20 20  cnt nRowEst;    
d040: 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f   /* Estimated ro
d050: 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72  ws in table - fr
d060: 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  om sqlite_stat1 
d070: 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74  table */.  int t
d080: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
d090: 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f  /* Root BTree no
d0a0: 64 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c  de for this tabl
d0b0: 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76  e (see note abov
d0c0: 65 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65  e) */.  i16 iPKe
d0d0: 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  y;           /* 
d0e0: 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c  If not negative,
d0f0: 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d   use aCol[iPKey]
d100: 20 61 73 20 74 68 65 20 70 72 69 6d 61 72 79 20   as the primary 
d110: 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f  key */.  i16 nCo
d120: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  l;            /*
d130: 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
d140: 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ns in this table
d150: 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20   */.  u16 nRef; 
d160: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
d170: 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
d180: 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a   to this Table *
d190: 2f 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b  /.  u8 tabFlags;
d1a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
d1b0: 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20   of TF_* values 
d1c0: 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b  */.  u8 keyConf;
d1d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61            /* Wha
d1e0: 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20  t to do in case 
d1f0: 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f  of uniqueness co
d200: 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20  nflict on iPKey 
d210: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
d220: 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
d230: 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66  E.  int addColOf
d240: 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73  fset;    /* Offs
d250: 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42  et in CREATE TAB
d260: 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61  LE stmt to add a
d270: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   new column */.#
d280: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
d290: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
d2a0: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f  LTABLE.  int nMo
d2b0: 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a  duleArg;      /*
d2c0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
d2d0: 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75  ents to the modu
d2e0: 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  le */.  char **a
d2f0: 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20  zModuleArg;  /* 
d300: 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75  Text of all modu
d310: 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20  le args. [0] is 
d320: 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20  module name */. 
d330: 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65   VTable *pVTable
d340: 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ;     /* List of
d350: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e   VTable objects.
d360: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69   */.#endif.  Tri
d370: 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
d380: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69    /* List of tri
d390: 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20  ggers stored in 
d3a0: 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68  pSchema */.  Sch
d3b0: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
d3c0: 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74    /* Schema that
d3d0: 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74   contains this t
d3e0: 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  able */.  Table 
d3f0: 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f  *pNextZombie;  /
d400: 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61  * Next on the Pa
d410: 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c  rse.pZombieTab l
d420: 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
d430: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
d440: 66 6f 72 20 54 61 62 65 2e 74 61 62 46 6c 61 67  for Tabe.tabFlag
d450: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  s..*/.#define TF
d460: 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20  _Readonly       
d470: 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64   0x01    /* Read
d480: 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62  -only system tab
d490: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
d4a0: 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20  _Ephemeral      
d4b0: 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65   0x02    /* An e
d4c0: 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
d4d0: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
d4e0: 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30  PrimaryKey   0x0
d4f0: 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61  4    /* Table ha
d500: 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20  s a primary key 
d510: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75  */.#define TF_Au
d520: 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78  toincrement   0x
d530: 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
d540: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
d550: 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
d560: 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74  .#define TF_Virt
d570: 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31 30  ual         0x10
d580: 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74      /* Is a virt
d590: 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 0a 2f  ual table */.../
d5a0: 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
d5b0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
d5c0: 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72  a table is a vir
d5d0: 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69  tual table.  Thi
d5e0: 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20  s is.** done as 
d5f0: 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20  a macro so that 
d600: 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d  it will be optim
d610: 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69  ized out when vi
d620: 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73  rtual.** table s
d630: 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65  upport is omitte
d640: 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64  d from the build
d650: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
d660: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
d670: 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
d680: 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
d690: 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67    (((X)->tabFlag
d6a0: 73 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21  s & TF_Virtual)!
d6b0: 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  =0).#  define Is
d6c0: 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
d6d0: 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
d6e0: 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
d6f0: 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64  )!=0).#else.#  d
d700: 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
d710: 58 29 20 20 20 20 20 20 30 0a 23 20 20 64 65 66  X)      0.#  def
d720: 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
d730: 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  mn(X) 0.#endif..
d740: 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69  /*.** Each forei
d750: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
d760: 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  t is an instance
d770: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
d780: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
d790: 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79  ** A foreign key
d7a0: 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77   is associated w
d7b0: 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20  ith two tables. 
d7c0: 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c   The "from" tabl
d7d0: 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c  e is.** the tabl
d7e0: 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
d7f0: 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
d800: 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74  lause that creat
d810: 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  es the foreign.*
d820: 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22  * key.  The "to"
d830: 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61   table is the ta
d840: 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65  ble that is name
d850: 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e  d in the REFEREN
d860: 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43  CES clause..** C
d870: 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61  onsider this exa
d880: 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mple:.**.**     
d890: 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31  CREATE TABLE ex1
d8a0: 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54  (.**       a INT
d8b0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
d8c0: 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54  ,.**       b INT
d8d0: 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20  EGER CONSTRAINT 
d8e0: 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65  fk1 REFERENCES e
d8f0: 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a  x2(x).**     );.
d900: 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67  **.** For foreig
d910: 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65  n key "fk1", the
d920: 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22   from-table is "
d930: 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d  ex1" and the to-
d940: 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a  table is "ex2"..
d950: 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52  **.** Each REFER
d960: 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e  ENCES clause gen
d970: 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e  erates an instan
d980: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
d990: 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
d9a0: 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68   which is attach
d9b0: 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74  ed to the from-t
d9c0: 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61  able.  The to-ta
d9d0: 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69  ble need not exi
d9e0: 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66  st when.** the f
d9f0: 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65  rom-table is cre
da00: 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74  ated.  The exist
da10: 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74  ence of the to-t
da20: 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63  able is not chec
da30: 6b 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ked..*/.struct F
da40: 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70  Key {.  Table *p
da50: 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62  From;     /* Tab
da60: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
da70: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
da80: 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29  use (aka: Child)
da90: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
daa0: 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20  tFrom;  /* Next 
dab0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e 20 70  foreign key in p
dac0: 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a  From */.  char *
dad0: 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  zTo;        /* N
dae0: 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61  ame of table tha
daf0: 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73  t the key points
db00: 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74   to (aka: Parent
db10: 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
db20: 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74  xtTo;    /* Next
db30: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20   foreign key on 
db40: 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20  table named zTo 
db50: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76  */.  FKey *pPrev
db60: 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f  To;    /* Previo
db70: 75 73 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f  us foreign key o
db80: 6e 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54  n table named zT
db90: 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b  o */.  int nCol;
dba0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
dbb0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
dbc0: 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f   this key */.  /
dbd0: 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31  * EV: R-30323-21
dbe0: 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65  917 */.  u8 isDe
dbf0: 66 65 72 72 65 64 3b 20 20 20 20 2f 2a 20 54 72  ferred;    /* Tr
dc00: 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74  ue if constraint
dc10: 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66   checking is def
dc20: 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49  erred till COMMI
dc30: 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f  T */.  u8 aActio
dc40: 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 2f  n[2];          /
dc50: 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20  * ON DELETE and 
dc60: 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e  ON UPDATE action
dc70: 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  s, respectively 
dc80: 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70  */.  Trigger *ap
dc90: 54 72 69 67 67 65 72 5b 32 5d 3b 20 20 2f 2a 20  Trigger[2];  /* 
dca0: 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63  Triggers for aAc
dcb0: 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a  tion[] actions *
dcc0: 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d  /.  struct sColM
dcd0: 61 70 20 7b 20 20 2f 2a 20 4d 61 70 70 69 6e 67  ap {  /* Mapping
dce0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70   of columns in p
dcf0: 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  From to columns 
dd00: 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e  in zTo */.    in
dd10: 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20  t iFrom;        
dd20: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c   /* Index of col
dd30: 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a  umn in pFrom */.
dd40: 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20      char *zCol; 
dd50: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
dd60: 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e  f column in zTo.
dd70: 20 20 49 66 20 30 20 75 73 65 20 50 52 49 4d 41    If 0 use PRIMA
dd80: 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43  RY KEY */.  } aC
dd90: 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 2f 2a  ol[1];        /*
dda0: 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
ddb0: 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75  ach of nCol colu
ddc0: 6d 6e 20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  mn s */.};../*.*
ddd0: 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  * SQLite support
dde0: 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  s many different
ddf0: 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65   ways to resolve
de00: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a   a constraint.**
de10: 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43   error.  ROLLBAC
de20: 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  K processing mea
de30: 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72  ns that a constr
de40: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a  aint violation.*
de50: 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65  * causes the ope
de60: 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
de70: 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f  s to fail and fo
de80: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  r the current tr
de90: 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20  ansaction.** to 
dea0: 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
deb0: 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e   ABORT processin
dec0: 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72  g means the oper
ded0: 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
dee0: 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e  .** fails and an
def0: 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  y prior changes 
df00: 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70  from that one op
df10: 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b  eration are back
df20: 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74  ed out,.** but t
df30: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
df40: 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63  s not rolled bac
df50: 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73  k.  FAIL process
df60: 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a  ing means that.*
df70: 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  * the operation 
df80: 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70  in progress stop
df90: 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e  s and returns an
dfa0: 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75   error code.  Bu
dfb0: 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67  t prior.** chang
dfc0: 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61  es due to the sa
dfd0: 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  me operation are
dfe0: 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20   not backed out 
dff0: 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a  and no rollback.
e000: 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f  ** occurs.  IGNO
e010: 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  RE means that th
e020: 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77  e particular row
e030: 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
e040: 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
e050: 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65  rror is not inse
e060: 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e  rted or updated.
e070: 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
e080: 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
e090: 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ror.** is return
e0a0: 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61  ed.  REPLACE mea
e0b0: 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74  ns that preexist
e0c0: 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77  ing database row
e0d0: 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a  s that caused.**
e0e0: 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
e0f0: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
e100: 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68  re removed so th
e110: 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72  at the new inser
e120: 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63  t or.** update c
e130: 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f  an proceed.  Pro
e140: 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
e150: 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69  s and no error i
e160: 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a  s reported..**.*
e170: 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e  * RESTRICT, SETN
e180: 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45  ULL, and CASCADE
e190: 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f   actions apply o
e1a0: 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b  nly to foreign k
e1b0: 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54  eys..** RESTRICT
e1c0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
e1d0: 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49  ABORT for IMMEDI
e1e0: 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ATE foreign keys
e1f0: 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65   and the.** same
e200: 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72   as ROLLBACK for
e210: 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20   DEFERRED keys. 
e220: 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74   SETNULL means t
e230: 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  hat the foreign.
e240: 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f  ** key is set to
e250: 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20   NULL.  CASCADE 
e260: 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c  means that a DEL
e270: 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66  ETE or UPDATE of
e280: 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63   the.** referenc
e290: 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  ed table row is 
e2a0: 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20  propagated into 
e2b0: 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c  the row that hol
e2c0: 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67  ds the.** foreig
e2d0: 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68  n key..** .** Th
e2e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62  e following symb
e2f0: 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20  olic values are 
e300: 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77  used to record w
e310: 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20  hich type.** of 
e320: 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a  action to take..
e330: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f  */.#define OE_No
e340: 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68  ne     0   /* Th
e350: 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72  ere is no constr
e360: 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f  aint to check */
e370: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c  .#define OE_Roll
e380: 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c  back 1   /* Fail
e390: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   the operation a
e3a0: 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  nd rollback the 
e3b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
e3c0: 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20  define OE_Abort 
e3d0: 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f     2   /* Back o
e3e0: 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64  ut changes but d
e3f0: 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72  o no rollback tr
e400: 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
e410: 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20  fine OE_Fail    
e420: 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65   3   /* Stop the
e430: 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c   operation but l
e440: 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63  eave all prior c
e450: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
e460: 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20  e OE_Ignore   4 
e470: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20    /* Ignore the 
e480: 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f  error. Do not do
e490: 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55   the INSERT or U
e4a0: 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
e4b0: 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20   OE_Replace  5  
e4c0: 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74   /* Delete exist
e4d0: 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ing record, then
e4e0: 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50   do INSERT or UP
e4f0: 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  DATE */..#define
e500: 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20   OE_Restrict 6  
e510: 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72   /* OE_Abort for
e520: 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52   IMMEDIATE, OE_R
e530: 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45  ollback for DEFE
e540: 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  RRED */.#define 
e550: 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20  OE_SetNull  7   
e560: 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
e570: 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
e580: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
e590: 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20  OE_SetDflt  8   
e5a0: 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
e5b0: 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
e5c0: 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  its default */.#
e5d0: 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64  define OE_Cascad
e5e0: 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64  e  9   /* Cascad
e5f0: 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f  e the changes */
e600: 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66  ..#define OE_Def
e610: 61 75 6c 74 20 20 39 39 20 20 2f 2a 20 44 6f 20  ault  99  /* Do 
e620: 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66  whatever the def
e630: 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a  ault action is *
e640: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  /.../*.** An ins
e650: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
e660: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
e670: 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
e680: 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
e690: 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64  ent to sqlite3Vd
e6a0: 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64  beKeyCompare and
e6b0: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   is used to cont
e6c0: 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70  rol the .** comp
e6d0: 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77  arison of the tw
e6e0: 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2f  o index keys..*/
e6f0: 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20  .struct KeyInfo 
e700: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
e710: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
e720: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
e730: 6f 6e 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  on */.  u8 enc; 
e740: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
e750: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f  ext encoding - o
e760: 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
e770: 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a  _UTF* values */.
e780: 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
e790: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
e7a0: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  of entries in aC
e7b0: 6f 6c 6c 5b 5d 20 2a 2f 0a 20 20 75 38 20 2a 61  oll[] */.  u8 *a
e7c0: 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f  SortOrder;     /
e7d0: 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72  * Sort order for
e7e0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 4d   each column.  M
e7f0: 61 79 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  ay be NULL */.  
e800: 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31  CollSeq *aColl[1
e810: 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67  ];  /* Collating
e820: 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61   sequence for ea
e830: 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b  ch term of the k
e840: 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ey */.};../*.** 
e850: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
e860: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
e870: 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66  ucture holds inf
e880: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61  ormation about a
e890: 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65 78  .** single index
e8a0: 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73   record that has
e8b0: 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70 61   already been pa
e8c0: 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e  rsed out into in
e8d0: 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75  dividual.** valu
e8e0: 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f  es..**.** A reco
e8f0: 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20  rd is an object 
e900: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  that contains on
e910: 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73  e or more fields
e920: 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63   of data..** Rec
e930: 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f  ords are used to
e940: 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65   store the conte
e950: 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f  nt of a table ro
e960: 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a  w and to store.*
e970: 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20  * the key of an 
e980: 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65  index.  A blob e
e990: 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63  ncoding of a rec
e9a0: 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62  ord is created b
e9b0: 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65  y.** the OP_Make
e9c0: 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66  Record opcode of
e9d0: 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73   the VDBE and is
e9e0: 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79   disassembled by
e9f0: 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d   the.** OP_Colum
ea00: 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  n opcode..**.** 
ea10: 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 68  This structure h
ea20: 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74 68  olds a record th
ea30: 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20 62  at has already b
ea40: 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65 64  een disassembled
ea50: 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e  .** into its con
ea60: 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73 2e  stituent fields.
ea70: 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63  .*/.struct Unpac
ea80: 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65  kedRecord {.  Ke
ea90: 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
eaa0: 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61    /* Collation a
eab0: 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e  nd sort-order in
eac0: 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75  formation */.  u
ead0: 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
eae0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
eaf0: 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d  entries in apMem
eb00: 5b 5d 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73  [] */.  u8 flags
eb10: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  ;           /* B
eb20: 6f 6f 6c 65 61 6e 20 73 65 74 74 69 6e 67 73 2e  oolean settings.
eb30: 20 20 55 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20 62    UNPACKED_... b
eb40: 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 72 6f  elow */.  i64 ro
eb50: 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  wid;          /*
eb60: 20 55 73 65 64 20 62 79 20 55 4e 50 41 43 4b 45   Used by UNPACKE
eb70: 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48 20  D_PREFIX_SEARCH 
eb80: 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20  */.  Mem *aMem; 
eb90: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
eba0: 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  es */.};../*.** 
ebb0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 6f  Allowed values o
ebc0: 66 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  f UnpackedRecord
ebd0: 2e 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e  .flags.*/.#defin
ebe0: 65 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b  e UNPACKED_INCRK
ebf0: 45 59 20 20 20 20 20 20 20 30 78 30 31 20 20 2f  EY       0x01  /
ec00: 2a 20 4d 61 6b 65 20 74 68 69 73 20 6b 65 79 20  * Make this key 
ec10: 61 6e 20 65 70 73 69 6c 6f 6e 20 6c 61 72 67 65  an epsilon large
ec20: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50  r */.#define UNP
ec30: 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54  ACKED_PREFIX_MAT
ec40: 43 48 20 20 30 78 30 32 20 20 2f 2a 20 41 20 70  CH  0x02  /* A p
ec50: 72 65 66 69 78 20 6d 61 74 63 68 20 69 73 20 63  refix match is c
ec60: 6f 6e 73 69 64 65 72 65 64 20 4f 4b 20 2a 2f 0a  onsidered OK */.
ec70: 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44  #define UNPACKED
ec80: 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48 20 30  _PREFIX_SEARCH 0
ec90: 78 30 34 20 20 2f 2a 20 49 67 6e 6f 72 65 20 66  x04  /* Ignore f
eca0: 69 6e 61 6c 20 28 72 6f 77 69 64 29 20 66 69 65  inal (rowid) fie
ecb0: 6c 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  ld */../*.** Eac
ecc0: 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
ecd0: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
ece0: 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
ecf0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
ed00: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
ed10: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
ed20: 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
ed30: 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
ed40: 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
ed50: 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
ed60: 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
ed70: 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
ed80: 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
ed90: 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
eda0: 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
edb0: 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
edc0: 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
edd0: 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
ede0: 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
edf0: 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
ee00: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
ee10: 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
ee20: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
ee30: 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
ee40: 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
ee50: 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
ee60: 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
ee70: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
ee80: 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
ee90: 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
eea0: 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
eeb0: 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
eec0: 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
eed0: 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
eee0: 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
eef0: 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
ef00: 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
ef10: 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
ef20: 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69  cause the .** fi
ef30: 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  rst column to be
ef40: 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61   indexed (c3) ha
ef50: 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20  s an index of 2 
ef60: 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a  in Ex1.aCol[]..*
ef70: 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c  * The second col
ef80: 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
ef90: 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e  d (c1) has an in
efa0: 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45  dex of 0 in.** E
efb0: 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65  x1.aCol[], hence
efc0: 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d   Ex2.aiColumn[1]
efd0: 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ==0..**.** The I
efe0: 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65  ndex.onError fie
eff0: 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  ld determines wh
f000: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
f010: 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
f020: 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71  .** must be uniq
f030: 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64  ue and what to d
f040: 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f  o if they are no
f050: 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f  t.  When Index.o
f060: 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a  nError=OE_None,.
f070: 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73  ** it means this
f080: 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65   is not a unique
f090: 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69   index.  Otherwi
f0a0: 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75  se it is a uniqu
f0b0: 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74  e index.** and t
f0c0: 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65  he value of Inde
f0d0: 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61  x.onError indica
f0e0: 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e  te the which con
f0f0: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
f100: 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74   .** algorithm t
f110: 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65  o employ wheneve
f120: 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  r an attempt is 
f130: 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61  made to insert a
f140: 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65   non-unique.** e
f150: 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  lement..*/.struc
f160: 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
f170: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
f180: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
f190: 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
f1a0: 69 6e 74 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20  int *aiColumn;  
f1b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
f1c0: 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
f1d0: 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
f1e0: 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
f1f0: 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45   tRowcnt *aiRowE
f200: 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 72 6f  st;       /* Fro
f210: 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  m ANALYZE: Est. 
f220: 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
f230: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
f240: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
f250: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
f260: 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e  e SQL table bein
f270: 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63  g indexed */.  c
f280: 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
f290: 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
f2a0: 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
f2b0: 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
f2c0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
f2d0: 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  x *pNext;       
f2e0: 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
f2f0: 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65   index associate
f300: 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  d with the same 
f310: 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d  table */.  Schem
f320: 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
f330: 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
f340: 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
f350: 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
f360: 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
f370: 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f    /* for each co
f380: 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43  lumn: True==DESC
f390: 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
f3a0: 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b    char **azColl;
f3b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
f3c0: 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ray of collation
f3d0: 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20   sequence names 
f3e0: 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  for index */.  i
f3f0: 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
f400: 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61          /* DB Pa
f410: 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f  ge containing ro
f420: 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  ot of this index
f430: 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
f440: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
f450: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
f460: 6d 6e 73 20 69 6e 20 74 61 62 6c 65 20 75 73 65  mns in table use
f470: 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 20  d by this index 
f480: 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b  */.  u8 onError;
f490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f4a0: 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67   OE_Abort, OE_Ig
f4b0: 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65  nore, OE_Replace
f4c0: 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a  , or OE_None */.
f4d0: 20 20 75 6e 73 69 67 6e 65 64 20 61 75 74 6f 49    unsigned autoI
f4e0: 6e 64 65 78 3a 32 3b 20 20 20 20 2f 2a 20 31 3d  ndex:2;    /* 1=
f4f0: 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d  =UNIQUE, 2==PRIM
f500: 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41  ARY KEY, 0==CREA
f510: 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e  TE INDEX */.  un
f520: 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65  signed bUnordere
f530: 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68  d:1;   /* Use th
f540: 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20  is index for == 
f550: 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e  or IN queries on
f560: 6c 79 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ly */.#ifdef SQL
f570: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
f580: 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20  .  int nSample; 
f590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
f5a0: 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
f5b0: 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a  s in aSample[] *
f5c0: 2f 0a 20 20 74 52 6f 77 63 6e 74 20 61 76 67 45  /.  tRowcnt avgE
f5d0: 71 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  q;           /* 
f5e0: 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75  Average nEq valu
f5f0: 65 20 66 6f 72 20 6b 65 79 20 76 61 6c 75 65 73  e for key values
f600: 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20   not in aSample 
f610: 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65  */.  IndexSample
f620: 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a   *aSample;    /*
f630: 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20   Samples of the 
f640: 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f  left-most key */
f650: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
f660: 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74  * Each sample st
f670: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
f680: 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69  te_stat3 table i
f690: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
f6a0: 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e   memory .** usin
f6b0: 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66  g a structure of
f6c0: 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65   this type.  See
f6d0: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   documentation a
f6e0: 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
f6f0: 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f  .** analyze.c so
f700: 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64  urce file for ad
f710: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f720: 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
f730: 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20  IndexSample {.  
f740: 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
f750: 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 56   *z;        /* V
f760: 61 6c 75 65 20 69 66 20 65 54 79 70 65 20 69 73  alue if eType is
f770: 20 53 51 4c 49 54 45 5f 54 45 58 54 20 6f 72 20   SQLITE_TEXT or 
f780: 53 51 4c 49 54 45 5f 42 4c 4f 42 20 2a 2f 0a 20  SQLITE_BLOB */. 
f790: 20 20 20 64 6f 75 62 6c 65 20 72 3b 20 20 20 20     double r;    
f7a0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65     /* Value if e
f7b0: 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f 46  Type is SQLITE_F
f7c0: 4c 4f 41 54 20 2a 2f 0a 20 20 20 20 69 36 34 20  LOAT */.    i64 
f7d0: 69 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  i;          /* V
f7e0: 61 6c 75 65 20 69 66 20 65 54 79 70 65 20 69 73  alue if eType is
f7f0: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20   SQLITE_INTEGER 
f800: 2a 2f 0a 20 20 7d 20 75 3b 0a 20 20 75 38 20 65  */.  } u;.  u8 e
f810: 54 79 70 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Type;         /*
f820: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 53 51   SQLITE_NULL, SQ
f830: 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 2e 2e 2e  LITE_INTEGER ...
f840: 20 65 74 63 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e   etc. */.  int n
f850: 42 79 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Byte;        /* 
f860: 53 69 7a 65 20 69 6e 20 62 79 74 65 20 6f 66 20  Size in byte of 
f870: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2e 20 2a 2f  text or blob. */
f880: 0a 20 20 74 52 6f 77 63 6e 74 20 6e 45 71 3b 20  .  tRowcnt nEq; 
f890: 20 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d       /* Est. num
f8a0: 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
f8b0: 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73  e the key equals
f8c0: 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
f8d0: 20 20 74 52 6f 77 63 6e 74 20 6e 4c 74 3b 20 20    tRowcnt nLt;  
f8e0: 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
f8f0: 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
f900: 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
f910: 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
f920: 0a 20 20 74 52 6f 77 63 6e 74 20 6e 44 4c 74 3b  .  tRowcnt nDLt;
f930: 20 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d       /* Est. num
f940: 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20  ber of distinct 
f950: 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74  keys less than t
f960: 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b  his sample */.};
f970: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b  ../*.** Each tok
f980: 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66  en coming out of
f990: 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e   the lexer is an
f9a0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20   instance of.** 
f9b0: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
f9c0: 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f   Tokens are also
f9d0: 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66   used as part of
f9e0: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a   an expression..
f9f0: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f  **.** Note if To
fa00: 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f  ken.z==0 then To
fa10: 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65  ken.dyn and Toke
fa20: 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65  n.n are undefine
fa30: 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e  d and.** may con
fa40: 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75  tain random valu
fa50: 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65  es.  Do not make
fa60: 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73   any assumptions
fa70: 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e   about Token.dyn
fa80: 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  .** and Token.n 
fa90: 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e  when Token.z==0.
faa0: 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e  .*/.struct Token
fab0: 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
fac0: 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20  *z;     /* Text 
fad0: 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e  of the token.  N
fae0: 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74  ot NULL-terminat
faf0: 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ed! */.  unsigne
fb00: 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e  d int n;    /* N
fb10: 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
fb20: 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65  ers in this toke
fb30: 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  n */.};../*.** A
fb40: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
fb50: 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  is structure con
fb60: 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
fb70: 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
fb80: 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
fb90: 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63   a SELECT that c
fba0: 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
fbb0: 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  e functions..**.
fbc0: 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54  ** If Expr.op==T
fbd0: 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20  K_AGG_COLUMN or 
fbe0: 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
fbf0: 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e  then Expr.pAggIn
fc00: 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  fo is a.** point
fc10: 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
fc20: 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e  ture.  The Expr.
fc30: 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73  iColumn field is
fc40: 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a   the index in.**
fc50: 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20   AggInfo.aCol[] 
fc60: 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  or AggInfo.aFunc
fc70: 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  [] of informatio
fc80: 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
fc90: 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
fca0: 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a   that node..**.*
fcb0: 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70  * AggInfo.pGroup
fcc0: 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61  By and AggInfo.a
fcd0: 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74  Func.pExpr point
fce0: 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69   to fields withi
fcf0: 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  n the.** origina
fd00: 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75  l Select structu
fd10: 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  re that describe
fd20: 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  s the SELECT sta
fd30: 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a  tement.  These.*
fd40: 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20  * fields do not 
fd50: 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64  need to be freed
fd60: 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69   when deallocati
fd70: 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73  ng the AggInfo s
fd80: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
fd90: 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20  uct AggInfo {.  
fda0: 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20  u8 directMode;  
fdb0: 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63          /* Direc
fdc0: 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65  t rendering mode
fdd0: 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61   means take data
fde0: 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20   directly.      
fdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe00: 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72      ** from sour
fe10: 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72  ce tables rather
fe20: 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d   than from accum
fe30: 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20  ulators */.  u8 
fe40: 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20  useSortingIdx;  
fe50: 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63       /* In direc
fe60: 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63  t mode, referenc
fe70: 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  e the sorting in
fe80: 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20  dex rather.     
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fea0: 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65       ** than the
feb0: 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
fec0: 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
fed0: 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75  x;         /* Cu
fee0: 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
fef0: 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
ff00: 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
ff10: 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a  gIdxPTab;     /*
ff20: 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
ff30: 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a  f pseudo-table *
ff40: 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67  /.  int nSorting
ff50: 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e  Column;     /* N
ff60: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
ff70: 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
ff80: 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 4c  index */.  ExprL
ff90: 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
ffa0: 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20     /* The group 
ffb0: 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73  by clause */.  s
ffc0: 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f  truct AggInfo_co
ffd0: 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61  l {    /* For ea
ffe0: 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69  ch column used i
fff0: 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  n source tables 
10000 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
10010 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
10020 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20  /* Source table 
10030 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c  */.    int iTabl
10040 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
10050 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
10060 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74   of the source t
10070 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
10080 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
10090 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
100a0 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65  umber within the
100b0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
100c0 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72  .    int iSorter
100d0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a  Column;       /*
100e0 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   Column number i
100f0 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
10100 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  dex */.    int i
10110 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
10120 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
10130 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
10140 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
10150 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
10160 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
10170 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  /* The original 
10180 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
10190 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e  } *aCol;.  int n
101a0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
101b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
101c0 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20  used entries in 
101d0 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  aCol[] */.  int 
101e0 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20  nAccumulator;   
101f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10200 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68   columns that sh
10210 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ow through to th
10220 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20  e output..      
10230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10240 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61      ** Additiona
10250 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  l columns are us
10260 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d  ed only as param
10270 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20  eters to.       
10280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10290 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20     ** aggregate 
102a0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  functions */.  s
102b0 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75  truct AggInfo_fu
102c0 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61  nc {   /* For ea
102d0 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ch aggregate fun
102e0 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70  ction */.    Exp
102f0 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
10300 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
10310 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65  ion encoding the
10320 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
10330 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b   FuncDef *pFunc;
10340 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
10350 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10360 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
10370 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  on */.    int iM
10380 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
10390 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
103a0 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
103b0 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
103c0 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69  /.    int iDisti
103d0 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nct;           /
103e0 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  * Ephemeral tabl
103f0 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63  e used to enforc
10400 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20  e DISTINCT */.  
10410 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20  } *aFunc;.  int 
10420 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  nFunc;          
10430 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10440 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e   entries in aFun
10450 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  c[] */.};../*.**
10460 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e   The datatype yn
10470 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20  Var is a signed 
10480 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20  integer, either 
10490 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74  16-bit or 32-bit
104a0 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20  ..** Usually it 
104b0 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74  is 16-bits.  But
104c0 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56   if SQLITE_MAX_V
104d0 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69  ARIABLE_NUMBER i
104e0 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61  s greater.** tha
104f0 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20  n 32767 we have 
10500 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69  to make it 32-bi
10510 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72  t.  16-bit is pr
10520 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a  eferred because.
10530 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20  ** it uses less 
10540 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78  memory in the Ex
10550 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68  pr object, which
10560 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79   is a big memory
10570 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74   user.** in syst
10580 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66  ems with lots of
10590 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
105a0 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61  ents.  And few a
105b0 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e  pplications.** n
105c0 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62  eed more than ab
105d0 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72  out 10 or 20 var
105e0 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d  iables.  But som
105f0 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20  e extreme users 
10600 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20  want.** to have 
10610 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
10620 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32  nts with over 32
10630 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61  767 variables, a
10640 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74  nd for them.** t
10650 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61  he option is ava
10660 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69  ilable (at compi
10670 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66  le-time)..*/.#if
10680 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
10690 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37  ABLE_NUMBER<=327
106a0 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79  67.typedef i16 y
106b0 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65  nVar;.#else.type
106c0 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23  def int ynVar;.#
106d0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  endif../*.** Eac
106e0 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70  h node of an exp
106f0 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70  ression in the p
10700 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20  arse tree is an 
10710 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
10720 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
10730 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20  *.** Expr.op is 
10740 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20  the opcode. The 
10750 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74  integer parser t
10760 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72  oken codes are r
10770 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f  eused.** as opco
10780 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78  des here. For ex
10790 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65  ample, the parse
107a0 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20  r defines TK_GE 
107b0 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
107c0 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65  .** code represe
107d0 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f  nting the ">=" o
107e0 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61  perator. This sa
107f0 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20  me integer code 
10800 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20  is reused.** to 
10810 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72  represent the gr
10820 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71  eater-than-or-eq
10830 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20  ual-to operator 
10840 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  in the expressio
10850 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a  n.** tree..**.**
10860 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
10870 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74  on is an SQL lit
10880 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52  eral (TK_INTEGER
10890 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42  , TK_FLOAT, TK_B
108a0 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53  LOB, .** or TK_S
108b0 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70  TRING), then Exp
108c0 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
108d0 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65   the text of the
108e0 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66   SQL literal. If
108f0 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
10900 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c 65  on is a variable
10910 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20   (TK_VARIABLE), 
10920 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
10930 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a  contains the .**
10940 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20   variable name. 
10950 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20  Finally, if the 
10960 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
10970 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54   SQL function (T
10980 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20  K_FUNCTION),.** 
10990 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
109a0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d  contains the nam
109b0 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
109c0 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52  n..**.** Expr.pR
109d0 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c  ight and Expr.pL
109e0 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74  eft are the left
109f0 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78   and right subex
10a00 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a  pressions of a.*
10a10 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  * binary operato
10a20 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74  r. Either or bot
10a30 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a  h may be NULL..*
10a40 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73  *.** Expr.x.pLis
10a50 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61  t is a list of a
10a60 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20  rguments if the 
10a70 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
10a80 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a   SQL function,.*
10a90 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73  * a CASE express
10aa0 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70  ion or an IN exp
10ab0 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
10ac0 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c  orm "<lhs> IN (<
10ad0 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a  y>, <z>...)"..**
10ae0 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
10af0 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65  is used if the e
10b00 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
10b10 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20  ub-select or an 
10b20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a  expression of.**
10b30 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
10b40 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29   IN (SELECT ...)
10b50 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73  ". If the EP_xIs
10b60 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65  Select bit is se
10b70 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  t in the.** Expr
10b80 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
10b90 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  n Expr.x.pSelect
10ba0 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72   is valid. Other
10bb0 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69  wise, Expr.x.pLi
10bc0 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e  st is .** valid.
10bd0 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73  .**.** An expres
10be0 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
10bf0 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66   ID or ID.ID ref
10c00 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  ers to a column 
10c10 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46  in a table..** F
10c20 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69  or such expressi
10c30 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20  ons, Expr.op is 
10c40 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e  set to TK_COLUMN
10c50 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65   and Expr.iTable
10c60 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67   is.** the integ
10c70 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  er cursor number
10c80 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f   of a VDBE curso
10c90 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
10ca0 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20  at table and.** 
10cb0 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20  Expr.iColumn is 
10cc0 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  the column numbe
10cd0 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  r for the specif
10ce0 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74  ic column.  If t
10cf0 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  he.** expression
10d00 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65   is used as a re
10d10 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65  sult in an aggre
10d20 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65  gate SELECT, the
10d30 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
10d40 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e  s also stored in
10d50 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63   the Expr.iAgg c
10d60 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67  olumn in the agg
10d70 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a  regate so that.*
10d80 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65  * it can be acce
10d90 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61  ssed after all a
10da0 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f  ggregates are co
10db0 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  mputed..**.** If
10dc0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
10dd0 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61  is an unbound va
10de0 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61  riable marker (a
10df0 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a   question mark .
10e00 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
10e10 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
10e20 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
10e30 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
10e40 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e   the index .** n
10e50 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76  umber for that v
10e60 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  ariable..**.** I
10e70 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
10e80 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74   is a subquery t
10e90 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  hen Expr.iColumn
10ea0 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
10eb0 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75  r.** register nu
10ec0 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20  mber containing 
10ed0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
10ee0 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20  e subquery.  If 
10ef0 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20  the.** subquery 
10f00 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74  gives a constant
10f10 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54   result, then iT
10f20 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20  able is -1.  If 
10f30 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20  the subquery.** 
10f40 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e  gives a differen
10f50 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66  t answer at diff
10f60 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69  erent times duri
10f70 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f  ng statement pro
10f80 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20  cessing.** then 
10f90 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64  iTable is the ad
10fa0 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f  dress of a subro
10fb0 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75  utine that compu
10fc0 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79  tes the subquery
10fd0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
10fe0 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f  xpr is of type O
10ff0 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68  P_Column, and th
11000 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65  e table it is se
11010 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20  lecting from.** 
11020 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20  is a disk table 
11030 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70  or the "old.*" p
11040 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65  seudo-table, the
11050 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f  n pTab points to
11060 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
11070 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69  nding table defi
11080 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c  nition..**.** AL
11090 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a  LOCATION NOTES:.
110a0 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63  **.** Expr objec
110b0 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74  ts can use a lot
110c0 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65   of memory space
110d0 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68   in database sch
110e0 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70  ema.  To.** help
110f0 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72   reduce memory r
11100 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d  equirements, som
11110 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f  etimes an Expr o
11120 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a  bject will be.**
11130 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64   truncated.  And
11140 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e   to reduce the n
11150 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
11160 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d  allocations, som
11170 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72  etimes.** two or
11180 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63   more Expr objec
11190 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  ts will be store
111a0 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65  d in a single me
111b0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c  mory allocation,
111c0 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74  .** together wit
111d0 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74  h Expr.zToken st
111e0 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  rings..**.** If 
111f0 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61  the EP_Reduced a
11200 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  nd EP_TokenOnly 
11210 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68  flags are set wh
11220 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62  en.** an Expr ob
11230 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65  ject is truncate
11240 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75  d.  When EP_Redu
11250 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ced is set, then
11260 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c   all.** the chil
11270 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69  d Expr objects i
11280 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74  n the Expr.pLeft
11290 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74   and Expr.pRight
112a0 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65   subtrees.** are
112b0 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
112c0 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72  n the same memor
112d0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  y allocation.  N
112e0 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68  ote, however, th
112f0 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65  at.** the subtre
11300 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69  es in Expr.x.pLi
11310 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65  st or Expr.x.pSe
11320 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20  lect are always 
11330 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c  separately.** al
11340 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c  located, regardl
11350 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
11360 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64  r not EP_Reduced
11370 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75   is set..*/.stru
11380 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f  ct Expr {.  u8 o
11390 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
113a0 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20     /* Operation 
113b0 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69  performed by thi
113c0 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72  s node */.  char
113d0 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
113e0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
113f0 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ty of the column
11400 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63   or 0 if not a c
11410 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 31 36 20 66  olumn */.  u16 f
11420 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
11430 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61    /* Various fla
11440 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65  gs.  EP_* See be
11450 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  low */.  union {
11460 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65  .    char *zToke
11470 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
11480 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f  oken value. Zero
11490 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20   terminated and 
114a0 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20  dequoted */.    
114b0 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20  int iValue;     
114c0 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65         /* Non-ne
114d0 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76  gative integer v
114e0 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61  alue if EP_IntVa
114f0 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20  lue */.  } u;.. 
11500 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f   /* If the EP_To
11510 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20  kenOnly flag is 
11520 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
11530 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
11540 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
11550 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
11560 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
11570 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
11580 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
11590 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
115a0 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
115b0 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
115c0 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a  tion. .  *******
115d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
115e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
115f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11600 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
11610 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20  .  Expr *pLeft; 
11620 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66            /* Lef
11630 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45  t subnode */.  E
11640 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20  xpr *pRight;    
11650 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73        /* Right s
11660 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  ubnode */.  unio
11670 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74  n {.    ExprList
11680 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20   *pList;     /* 
11690 46 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  Function argumen
116a0 74 73 20 6f 72 20 69 6e 20 22 3c 65 78 70 72 3e  ts or in "<expr>
116b0 20 49 4e 20 28 3c 65 78 70 72 2d 6c 69 73 74 29   IN (<expr-list)
116c0 22 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  " */.    Select 
116d0 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
116e0 20 55 73 65 64 20 66 6f 72 20 73 75 62 2d 73 65   Used for sub-se
116f0 6c 65 63 74 73 20 61 6e 64 20 22 3c 65 78 70 72  lects and "<expr
11700 3e 20 49 4e 20 28 3c 73 65 6c 65 63 74 3e 29 22  > IN (<select>)"
11710 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a   */.  } x;..  /*
11720 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
11730 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ed flag is set i
11740 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
11750 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
11760 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
11770 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
11780 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
11790 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
117a0 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
117b0 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
117c0 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
117d0 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
117e0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
117f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11800 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11810 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11820 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53  ********/..#if S
11830 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
11840 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65  EPTH>0.  int nHe
11850 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
11860 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65  /* Height of the
11870 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20   tree headed by 
11880 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e  this node */.#en
11890 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65  dif.  int iTable
118a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
118b0 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f  TK_COLUMN: curso
118c0 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  r number of tabl
118d0 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e  e holding column
118e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
118f0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
11900 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74  REGISTER: regist
11910 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20  er number.      
11920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11930 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52     ** TK_TRIGGER
11940 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e  : 1 -> new, 0 ->
11950 20 6f 6c 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20   old */.  ynVar 
11960 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
11970 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
11980 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31  olumn index.  -1
11990 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20   for rowid..    
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119b0 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41       ** TK_VARIA
119c0 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75  BLE: variable nu
119d0 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20  mber (always >= 
119e0 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67  1). */.  i16 iAg
119f0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
11a00 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69  /* Which entry i
11a10 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c  n pAggInfo->aCol
11a20 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20  [] or ->aFunc[] 
11a30 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a  */.  i16 iRightJ
11a40 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49  oinTable;   /* I
11a50 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74  f EP_FromJoin, t
11a60 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f  he right table o
11a70 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20  f the join */.  
11a80 75 38 20 66 6c 61 67 73 32 3b 20 20 20 20 20 20  u8 flags2;      
11a90 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64         /* Second
11aa0 20 73 65 74 20 6f 66 20 66 6c 61 67 73 2e 20 20   set of flags.  
11ab0 45 50 32 5f 2e 2e 2e 20 2a 2f 0a 20 20 75 38 20  EP2_... */.  u8 
11ac0 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  op2;            
11ad0 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54      /* TK_REGIST
11ae0 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c  ER: original val
11af0 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20  ue of Expr.op.  
11b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b10 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c         ** TK_COL
11b20 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f  UMN: the value o
11b30 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75  f p5 for OP_Colu
11b40 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
11b50 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
11b60 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20  K_AGG_FUNCTION: 
11b70 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f  nesting depth */
11b80 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
11b90 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65  Info;     /* Use
11ba0 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55  d by TK_AGG_COLU
11bb0 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55  MN and TK_AGG_FU
11bc0 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c  NCTION */.  Tabl
11bd0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
11be0 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20     /* Table for 
11bf0 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73  TK_COLUMN expres
11c00 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sions. */.};../*
11c10 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
11c20 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e  g are the meanin
11c30 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68  gs of bits in th
11c40 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  e Expr.flags fie
11c50 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
11c60 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 20 30 78 30  P_FromJoin   0x0
11c70 30 30 31 20 20 2f 2a 20 4f 72 69 67 69 6e 61 74  001  /* Originat
11c80 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e  ed in ON or USIN
11c90 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
11ca0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  in */.#define EP
11cb0 5f 41 67 67 20 20 20 20 20 20 20 20 30 78 30 30  _Agg        0x00
11cc0 30 32 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  02  /* Contains 
11cd0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
11ce0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
11cf0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
11d00 73 6f 6c 76 65 64 20 20 20 30 78 30 30 30 34 20  solved   0x0004 
11d10 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65   /* IDs have bee
11d20 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f  n resolved to CO
11d30 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LUMNs */.#define
11d40 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 20 30   EP_Error      0
11d50 78 30 30 30 38 20 20 2f 2a 20 45 78 70 72 65 73  x0008  /* Expres
11d60 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  sion contains on
11d70 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73  e or more errors
11d80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
11d90 69 73 74 69 6e 63 74 20 20 20 30 78 30 30 31 30  istinct   0x0010
11da0 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66    /* Aggregate f
11db0 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53  unction with DIS
11dc0 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  TINCT keyword */
11dd0 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53  .#define EP_VarS
11de0 65 6c 65 63 74 20 20 30 78 30 30 32 30 20 20 2f  elect  0x0020  /
11df0 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72  * pSelect is cor
11e00 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e  related, not con
11e10 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  stant */.#define
11e20 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 20 30   EP_DblQuoted  0
11e30 78 30 30 34 30 20 20 2f 2a 20 74 6f 6b 65 6e 2e  x0040  /* token.
11e40 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  z was originally
11e50 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65   in "..." */.#de
11e60 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e  fine EP_InfixFun
11e70 63 20 20 30 78 30 30 38 30 20 20 2f 2a 20 54 72  c  0x0080  /* Tr
11e80 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20  ue for an infix 
11e90 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20  function: LIKE, 
11ea0 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65  GLOB, etc */.#de
11eb0 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20  fine EP_Collate 
11ec0 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20 54 72     0x0100  /* Tr
11ed0 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
11ee0 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 61 72 74 6f  _COLLATE opearto
11ef0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
11f00 46 69 78 65 64 44 65 73 74 20 20 30 78 30 32 30  FixedDest  0x020
11f10 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 6e 65 65  0  /* Result nee
11f20 64 65 64 20 69 6e 20 61 20 73 70 65 63 69 66 69  ded in a specifi
11f30 63 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 23 64  c register */.#d
11f40 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75  efine EP_IntValu
11f50 65 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 49  e   0x0400  /* I
11f60 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e  nteger value con
11f70 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c  tained in u.iVal
11f80 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ue */.#define EP
11f90 5f 78 49 73 53 65 6c 65 63 74 20 20 30 78 30 38  _xIsSelect  0x08
11fa0 30 30 20 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74  00  /* x.pSelect
11fb0 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72   is valid (other
11fc0 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29  wise x.pList is)
11fd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48   */.#define EP_H
11fe0 69 6e 74 20 20 20 20 20 20 20 30 78 31 30 30 30  int       0x1000
11ff0 20 20 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f    /* Not used */
12000 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75  .#define EP_Redu
12010 63 65 64 20 20 20 20 30 78 32 30 30 30 20 20 2f  ced    0x2000  /
12020 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 69 73  * Expr struct is
12030 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
12040 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
12050 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e  #define EP_Token
12060 4f 6e 6c 79 20 20 30 78 34 30 30 30 20 20 2f 2a  Only  0x4000  /*
12070 20 45 78 70 72 20 73 74 72 75 63 74 20 69 73 20   Expr struct is 
12080 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49  EXPR_TOKENONLYSI
12090 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
120a0 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74  .#define EP_Stat
120b0 69 63 20 20 20 20 20 30 78 38 30 30 30 20 20 2f  ic     0x8000  /
120c0 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79  * Held in memory
120d0 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72   not obtained fr
120e0 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 0a  om malloc() */..
120f0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
12100 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
12110 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
12120 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 32 20  the Expr.flags2 
12130 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
12140 65 20 45 50 32 5f 4d 61 6c 6c 6f 63 65 64 54 6f  e EP2_MallocedTo
12150 6b 65 6e 20 20 30 78 30 30 30 31 20 20 2f 2a 20  ken  0x0001  /* 
12160 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44  Need to sqlite3D
12170 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f  bFree() Expr.zTo
12180 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ken */.#define E
12190 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65 20 20  P2_Irreducible  
121a0 20 20 30 78 30 30 30 32 20 20 2f 2a 20 43 61 6e    0x0002  /* Can
121b0 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55  not EXPRDUP_REDU
121c0 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a  CE this Expr */.
121d0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 70 73 65 75 64  ./*.** The pseud
121e0 6f 2d 72 6f 75 74 69 6e 65 20 73 71 6c 69 74 65  o-routine sqlite
121f0 33 45 78 70 72 53 65 74 49 72 72 65 64 75 63 69  3ExprSetIrreduci
12200 62 6c 65 20 73 65 74 73 20 74 68 65 20 45 50 32  ble sets the EP2
12210 5f 49 72 72 65 64 75 63 69 62 6c 65 0a 2a 2a 20  _Irreducible.** 
12220 66 6c 61 67 20 6f 6e 20 61 6e 20 65 78 70 72 65  flag on an expre
12230 73 73 69 6f 6e 20 73 74 72 75 63 74 75 72 65 2e  ssion structure.
12240 20 20 54 68 69 73 20 66 6c 61 67 20 69 73 20 75    This flag is u
12250 73 65 64 20 66 6f 72 20 56 56 26 41 20 6f 6e 6c  sed for VV&A onl
12260 79 2e 20 20 54 68 65 0a 2a 2a 20 72 6f 75 74 69  y.  The.** routi
12270 6e 65 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  ne is implemente
12280 64 20 61 73 20 61 20 6d 61 63 72 6f 20 74 68 61  d as a macro tha
12290 74 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 77 68 65  t only works whe
122a0 6e 20 69 6e 20 64 65 62 75 67 67 69 6e 67 20 6d  n in debugging m
122b0 6f 64 65 2c 0a 2a 2a 20 73 6f 20 61 73 20 6e 6f  ode,.** so as no
122c0 74 20 74 6f 20 62 75 72 64 65 6e 20 70 72 6f 64  t to burden prod
122d0 75 63 74 69 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a  uction code..*/.
122e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
122f0 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70  BUG.# define Exp
12300 72 53 65 74 49 72 72 65 64 75 63 69 62 6c 65 28  rSetIrreducible(
12310 58 29 20 20 28 58 29 2d 3e 66 6c 61 67 73 32 20  X)  (X)->flags2 
12320 7c 3d 20 45 50 32 5f 49 72 72 65 64 75 63 69 62  |= EP2_Irreducib
12330 6c 65 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  le.#else.# defin
12340 65 20 45 78 70 72 53 65 74 49 72 72 65 64 75 63  e ExprSetIrreduc
12350 69 62 6c 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ible(X).#endif..
12360 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
12370 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
12380 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
12390 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
123a0 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  e .** Expr.flags
123b0 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
123c0 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72  ne ExprHasProper
123d0 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45  ty(E,P)     (((E
123e0 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  )->flags&(P))==(
123f0 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  P)).#define Expr
12400 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 45  HasAnyProperty(E
12410 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67  ,P)  (((E)->flag
12420 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
12430 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ne ExprSetProper
12440 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d  ty(E,P)     (E)-
12450 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
12460 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f  ine ExprClearPro
12470 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29  perty(E,P)   (E)
12480 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
12490 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
124a0 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d  etermine the num
124b0 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71  ber of bytes req
124c0 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61  uired by a norma
124d0 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63  l Expr .** struc
124e0 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  t, an Expr struc
124f0 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65  t with the EP_Re
12500 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69  duced flag set i
12510 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a  n Expr.flags .**
12520 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72   and an Expr str
12530 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
12540 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73  TokenOnly flag s
12550 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  et..*/.#define E
12560 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20  XPR_FULLSIZE    
12570 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78         sizeof(Ex
12580 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a  pr)           /*
12590 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64   Full size */.#d
125a0 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43  efine EXPR_REDUC
125b0 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66  EDSIZE        of
125c0 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62  fsetof(Expr,iTab
125d0 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66  le)  /* Common f
125e0 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69  eatures */.#defi
125f0 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ne EXPR_TOKENONL
12600 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65  YSIZE      offse
12610 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20  tof(Expr,pLeft) 
12620 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75    /* Fewer featu
12630 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c  res */../*.** Fl
12640 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  ags passed to th
12650 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
12660 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65  () function. See
12670 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d   the header comm
12680 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71  ent .** above sq
12690 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
126a0 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23  or details..*/.#
126b0 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52  define EXPRDUP_R
126c0 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78  EDUCE         0x
126d0 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65  0001  /* Used re
126e0 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20  duced-size Expr 
126f0 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  nodes */../*.** 
12700 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
12710 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70  sions.  Each exp
12720 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69  ression may opti
12730 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a  onally have a.**
12740 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f   name.  An expr/
12750 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  name combination
12760 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
12770 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75  several ways, su
12780 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73  ch.** as the lis
12790 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44  t of "expr AS ID
127a0 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69  " fields followi
127b0 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72  ng a "SELECT" or
127c0 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20   in the.** list 
127d0 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69  of "ID = expr" i
127e0 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54  tems in an UPDAT
127f0 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78  E.  A list of ex
12800 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a  pressions can.**
12810 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73   also be used as
12820 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
12830 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20   a function, in 
12840 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61  which case the a
12850 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20  .zName.** field 
12860 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
12870 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68  ** By default th
12880 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65  e Expr.zSpan fie
12890 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e  ld holds a human
128a0 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69  -readable descri
128b0 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ption of.** the 
128c0 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
128d0 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  is used in the g
128e0 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72  eneration of err
128f0 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a  or messages and.
12900 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73  ** column labels
12910 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
12920 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74   Expr.zSpan is t
12930 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78  ypically the tex
12940 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e  t of a.** column
12950 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69   expression as i
12960 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45  t exists in a SE
12970 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
12980 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20   However, if.** 
12990 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66  the bSpanIsTab f
129a0 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
129b0 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f   zSpan is overlo
129c0 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65  aded to mean the
129d0 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20   name.** of the 
129e0 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e  result column in
129f0 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42   the form: DATAB
12a00 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e  ASE.TABLE.COLUMN
12a10 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a  .  This later.**
12a20 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f   form is used fo
12a30 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f  r name resolutio
12a40 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52  n with nested FR
12a50 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73  OM clauses..*/.s
12a60 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b  truct ExprList {
12a70 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20  .  int nExpr;   
12a80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12a90 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
12aa0 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  ns on the list *
12ab0 2f 0a 20 20 69 6e 74 20 69 45 43 75 72 73 6f 72  /.  int iECursor
12ac0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 44  ;          /* VD
12ad0 42 45 20 43 75 72 73 6f 72 20 61 73 73 6f 63 69  BE Cursor associ
12ae0 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 45  ated with this E
12af0 78 70 72 4c 69 73 74 20 2a 2f 0a 20 20 73 74 72  xprList */.  str
12b00 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65  uct ExprList_ite
12b10 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  m { /* For each 
12b20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
12b30 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78  e list */.    Ex
12b40 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
12b50 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73        /* The lis
12b60 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
12b70 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
12b80 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
12b90 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61  /* Token associa
12ba0 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78  ted with this ex
12bb0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
12bc0 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
12bd0 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69          /* Origi
12be0 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
12bf0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
12c00 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20    u8 sortOrder; 
12c10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66            /* 1 f
12c20 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72  or DESC or 0 for
12c30 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69   ASC */.    unsi
12c40 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20  gned done :1;   
12c50 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f      /* A flag to
12c60 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70   indicate when p
12c70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e  rocessing is fin
12c80 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73  ished */.    uns
12c90 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62  igned bSpanIsTab
12ca0 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f   :1; /* zSpan ho
12cb0 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c  lds DB.TABLE.COL
12cc0 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 31 36 20 69  UMN */.    u16 i
12cd0 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20  OrderByCol;     
12ce0 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20     /* For ORDER 
12cf0 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  BY, column numbe
12d00 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20  r in result set 
12d10 2a 2f 0a 20 20 20 20 75 31 36 20 69 41 6c 69 61  */.    u16 iAlia
12d20 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
12d30 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72  * Index into Par
12d40 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20  se.aAlias[] for 
12d50 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b  zName */.  } *a;
12d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d70 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77    /* Alloc a pow
12d80 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65  er of two greate
12d90 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45  r or equal to nE
12da0 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  xpr */.};../*.**
12db0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
12dc0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
12dd0 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 61  s used by the pa
12de0 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62  rser to record b
12df0 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  oth.** the parse
12e00 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70   tree for an exp
12e10 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  ression and the 
12e20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65  span of input te
12e30 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  xt for an.** exp
12e40 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ression..*/.stru
12e50 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20  ct ExprSpan {.  
12e60 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
12e70 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70        /* The exp
12e80 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72  ression parse tr
12e90 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ee */.  const ch
12ea0 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a  ar *zStart;   /*
12eb0 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65 72   First character
12ec0 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
12ed0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
12ee0 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65  zEnd;     /* One
12ef0 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74 20   character past 
12f00 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
12f10 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   text */.};../*.
12f20 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
12f30 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
12f40 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70   can hold a simp
12f50 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74  le list of ident
12f60 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20  ifiers,.** such 
12f70 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62  as the list "a,b
12f80 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  ,c" in the follo
12f90 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a  wing statements:
12fa0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45  .**.**      INSE
12fb0 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
12fc0 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20   VALUES ...;.** 
12fd0 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
12fe0 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63  X idx ON t(a,b,c
12ff0 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  );.**      CREAT
13000 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42  E TRIGGER trig B
13010 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20  EFORE UPDATE ON 
13020 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a  t(a,b,c) ...;.**
13030 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61  .** The IdList.a
13040 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73  .idx field is us
13050 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69  ed when the IdLi
13060 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  st represents th
13070 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c  e list of.** col
13080 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20  umn names after 
13090 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  a table name in 
130a0 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
130b0 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61  ent.  In the sta
130c0 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20  tement.**.**    
130d0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
130e0 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20  ,b,c) ....**.** 
130f0 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d  If "a" is the k-
13100 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62  th column of tab
13110 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c  le "t", then IdL
13120 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e  ist.a[0].idx==k.
13130 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73  .*/.struct IdLis
13140 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c  t {.  struct IdL
13150 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63  ist_item {.    c
13160 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
13170 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
13180 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20  identifier */.  
13190 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20    int idx;      
131a0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
131b0 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b  some Table.aCol[
131c0 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  ] of a column na
131d0 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  med zName */.  }
131e0 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20   *a;.  int nId; 
131f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13200 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  r of identifiers
13210 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
13220 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  };../*.** The bi
13230 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
13240 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
13250 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
13260 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
13270 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
13280 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
13290 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
132a0 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
132b0 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
132c0 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
132d0 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
132e0 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
132f0 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
13300 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
13310 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
13320 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65   ix86..*/.typede
13330 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a  f u64 Bitmask;..
13340 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
13350 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42 69   of bits in a Bi
13360 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65  tmask.  "BMS" me
13370 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a  ans "BitMask Siz
13380 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42  e"..*/.#define B
13390 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f  MS  ((int)(sizeo
133a0 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a  f(Bitmask)*8))..
133b0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
133c0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65  ing structure de
133d0 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d  scribes the FROM
133e0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
133f0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
13400 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20  * Each table or 
13410 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20  subquery in the 
13420 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61  FROM clause is a
13430 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e   separate elemen
13440 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c  t of.** the SrcL
13450 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a  ist.a[] array..*
13460 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64  *.** With the ad
13470 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70  dition of multip
13480 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70  le database supp
13490 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ort, the followi
134a0 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
134b0 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64  can also be used
134c0 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70   to describe a p
134d0 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20  articular table 
134e0 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c  such as the tabl
134f0 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64  e that.** is mod
13500 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45  ified by an INSE
13510 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  RT, DELETE, or U
13520 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
13530 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51    In standard SQ
13540 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62  L,.** such a tab
13550 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d  le must be a sim
13560 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42  ple name: ID.  B
13570 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68  ut in SQLite, th
13580 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e  e table can.** n
13590 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64  ow be identified
135a0 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e   by a database n
135b0 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e  ame, a dot, then
135c0 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a   the table name:
135d0 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68   ID.ID..**.** Th
135e0 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74  e jointype start
135f0 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68  s out showing th
13600 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77  e join type betw
13610 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  een the current 
13620 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65  table.** and the
13630 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74   next table on t
13640 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61  he list.  The pa
13650 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20  rser builds the 
13660 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a  list this way..*
13670 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63  * But sqlite3Src
13680 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
13690 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73  e() later shifts
136a0 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73   the jointypes s
136b0 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a  o that each.** j
136c0 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65  ointype expresse
136d0 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65  s the join betwe
136e0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64  en the table and
136f0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61   the previous ta
13700 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  ble..**.** In th
13710 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c  e colUsed field,
13720 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   the high-order 
13730 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20  bit (bit 63) is 
13740 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65  set if the table
13750 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72  .** contains mor
13760 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e  e than 63 column
13770 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20  s and the 64-th 
13780 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20  or later column 
13790 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75  is used..*/.stru
137a0 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69  ct SrcList {.  i
137b0 31 36 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20  16 nSrc;        
137c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62  /* Number of tab
137d0 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65  les or subquerie
137e0 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  s in the FROM cl
137f0 61 75 73 65 20 2a 2f 0a 20 20 69 31 36 20 6e 41  ause */.  i16 nA
13800 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75  lloc;      /* Nu
13810 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
13820 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d  allocated in a[]
13830 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75   below */.  stru
13840 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
13850 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53  {.    Schema *pS
13860 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d  chema;  /* Schem
13870 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  a to which this 
13880 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f  item is fixed */
13890 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61  .    char *zData
138a0 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  base;  /* Name o
138b0 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
138c0 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
138d0 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
138e0 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
138f0 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  f the table */. 
13900 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b     char *zAlias;
13910 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20       /* The "B" 
13920 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20  part of a "A AS 
13930 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d  B" phrase.  zNam
13940 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a  e is the "A" */.
13950 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
13960 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20        /* An SQL 
13970 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64  table correspond
13980 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a  ing to zName */.
13990 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
139a0 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43  ect;  /* A SELEC
139b0 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64  T statement used
139c0 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74   in place of a t
139d0 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20  able name */.   
139e0 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62   int addrFillSub
139f0 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66  ;  /* Address of
13a00 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d   subroutine to m
13a10 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65  anifest a subque
13a20 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ry */.    int re
13a30 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52  gReturn;    /* R
13a40 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
13a50 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f  return address o
13a60 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f  f addrFillSub */
13a70 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65  .    u8 jointype
13a80 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f  ;      /* Type o
13a90 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  f join between t
13aa0 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65  his able and the
13ab0 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20   previous */.   
13ac0 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64   unsigned notInd
13ad0 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54  exed :1;    /* T
13ae0 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
13af0 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  a NOT INDEXED cl
13b00 61 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ause */.    unsi
13b10 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65  gned isCorrelate
13b20 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  d :1;  /* True i
13b30 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63  f sub-query is c
13b40 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20  orrelated */.   
13b50 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72   unsigned viaCor
13b60 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49  outine :1;  /* I
13b70 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
13b80 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 23 69  co-routine */.#i
13b90 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
13ba0 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38  T_EXPLAIN.    u8
13bb0 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20   iSelectId;     
13bc0 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30  /* If pSelect!=0
13bd0 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68 65 20  , the id of the 
13be0 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51  sub-select in EQ
13bf0 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20  P */.#endif.    
13c00 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20  int iCursor;    
13c10 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
13c20 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64  rsor number used
13c30 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20   to access this 
13c40 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70  table */.    Exp
13c50 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f  r *pOn;        /
13c60 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20  * The ON clause 
13c70 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
13c80 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b   IdList *pUsing;
13c90 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20     /* The USING 
13ca0 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
13cb0 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20   */.    Bitmask 
13cc0 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74  colUsed;  /* Bit
13cd0 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66   N (1<<N) set if
13ce0 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61   column N of pTa
13cf0 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20  b is used */.   
13d00 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20   char *zIndex;  
13d10 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72     /* Identifier
13d20 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42   from "INDEXED B
13d30 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75  Y <zIndex>" clau
13d40 73 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20  se */.    Index 
13d50 2a 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49  *pIndex;    /* I
13d60 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63  ndex structure c
13d70 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
13d80 7a 49 6e 64 65 78 2c 20 69 66 20 61 6e 79 20 2a  zIndex, if any *
13d90 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  /.  } a[1];     
13da0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
13db0 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64  ntry for each id
13dc0 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20  entifier on the 
13dd0 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
13de0 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75  * Permitted valu
13df0 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73  es of the SrcLis
13e00 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65  t.a.jointype fie
13e10 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  ld.*/.#define JT
13e20 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30  _INNER     0x000
13e30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64  1    /* Any kind
13e40 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f   of inner or cro
13e50 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  ss join */.#defi
13e60 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20  ne JT_CROSS     
13e70 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70  0x0002    /* Exp
13e80 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65  licit use of the
13e90 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a   CROSS keyword *
13ea0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54  /.#define JT_NAT
13eb0 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20  URAL   0x0004   
13ec0 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22   /* True for a "
13ed0 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f  natural" join */
13ee0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54  .#define JT_LEFT
13ef0 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20        0x0008    
13f00 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f  /* Left outer jo
13f10 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
13f20 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31  _RIGHT     0x001
13f30 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75  0    /* Right ou
13f40 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
13f50 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20  ine JT_OUTER    
13f60 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68   0x0020    /* Th
13f70 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72  e "OUTER" keywor
13f80 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  d is present */.
13f90 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52  #define JT_ERROR
13fa0 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f       0x0040    /
13fb0 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73  * unknown or uns
13fc0 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79  upported join ty
13fd0 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20  pe */.../*.** A 
13fe0 57 68 65 72 65 50 6c 61 6e 20 6f 62 6a 65 63 74  WherePlan object
13ff0 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
14000 6f 6e 20 74 68 61 74 20 64 65 73 63 72 69 62 65  on that describe
14010 73 20 61 20 6c 6f 6f 6b 75 70 0a 2a 2a 20 73 74  s a lookup.** st
14020 72 61 74 65 67 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  rategy..**.** Th
14030 69 73 20 6f 62 6a 65 63 74 20 69 73 20 69 6e 74  is object is int
14040 65 6e 64 65 64 20 74 6f 20 62 65 20 6f 70 61 71  ended to be opaq
14050 75 65 20 6f 75 74 73 69 64 65 20 6f 66 20 74 68  ue outside of th
14060 65 20 77 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65  e where.c module
14070 2e 0a 2a 2a 20 49 74 20 69 73 20 69 6e 63 6c 75  ..** It is inclu
14080 64 65 64 20 68 65 72 65 20 6f 6e 6c 79 20 73 6f  ded here only so
14090 20 74 68 61 74 20 74 68 61 74 20 63 6f 6d 70 69   that that compi
140a0 6c 65 72 20 77 69 6c 6c 20 6b 6e 6f 77 20 68 6f  ler will know ho
140b0 77 20 62 69 67 20 69 74 0a 2a 2a 20 69 73 2e 20  w big it.** is. 
140c0 20 4e 6f 6e 65 20 6f 66 20 74 68 65 20 66 69 65   None of the fie
140d0 6c 64 73 20 69 6e 20 74 68 69 73 20 6f 62 6a 65  lds in this obje
140e0 63 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  ct should be use
140f0 64 20 6f 75 74 73 69 64 65 20 6f 66 0a 2a 2a 20  d outside of.** 
14100 74 68 65 20 77 68 65 72 65 2e 63 20 6d 6f 64 75  the where.c modu
14110 6c 65 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 69 6e  le..**.** Within
14120 20 74 68 65 20 75 6e 69 6f 6e 2c 20 70 49 64 78   the union, pIdx
14130 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68   is only used wh
14140 65 6e 20 77 73 46 6c 61 67 73 26 57 48 45 52 45  en wsFlags&WHERE
14150 5f 49 4e 44 45 58 45 44 20 69 73 20 74 72 75 65  _INDEXED is true
14160 2e 0a 2a 2a 20 70 54 65 72 6d 20 69 73 20 6f 6e  ..** pTerm is on
14170 6c 79 20 75 73 65 64 20 77 68 65 6e 20 77 73 46  ly used when wsF
14180 6c 61 67 73 26 57 48 45 52 45 5f 4d 55 4c 54 49  lags&WHERE_MULTI
14190 5f 4f 52 20 69 73 20 74 72 75 65 2e 20 20 41 6e  _OR is true.  An
141a0 64 20 70 56 74 61 62 49 64 78 0a 2a 2a 20 69 73  d pVtabIdx.** is
141b0 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 20   only used when 
141c0 77 73 46 6c 61 67 73 26 57 48 45 52 45 5f 56 49  wsFlags&WHERE_VI
141d0 52 54 55 41 4c 54 41 42 4c 45 20 69 73 20 74 72  RTUALTABLE is tr
141e0 75 65 2e 20 20 49 74 20 69 73 20 6e 65 76 65 72  ue.  It is never
141f0 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 74 68 61   the.** case tha
14200 74 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  t more than one 
14210 6f 66 20 74 68 65 73 65 20 63 6f 6e 64 69 74 69  of these conditi
14220 6f 6e 73 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a  ons is true..*/.
14230 73 74 72 75 63 74 20 57 68 65 72 65 50 6c 61 6e  struct WherePlan
14240 20 7b 0a 20 20 75 33 32 20 77 73 46 6c 61 67 73   {.  u32 wsFlags
14250 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
14260 20 20 20 20 2f 2a 20 57 48 45 52 45 5f 2a 20 66      /* WHERE_* f
14270 6c 61 67 73 20 74 68 61 74 20 64 65 73 63 72 69  lags that descri
14280 62 65 20 74 68 65 20 73 74 72 61 74 65 67 79 20  be the strategy 
14290 2a 2f 0a 20 20 75 31 36 20 6e 45 71 3b 20 20 20  */.  u16 nEq;   
142a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
142c0 20 3d 3d 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   == constraints 
142d0 2a 2f 0a 20 20 75 31 36 20 6e 4f 42 53 61 74 3b  */.  u16 nOBSat;
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14300 20 4f 52 44 45 52 20 42 59 20 74 65 72 6d 73 20   ORDER BY terms 
14310 73 61 74 69 73 66 69 65 64 20 2a 2f 0a 20 20 64  satisfied */.  d
14320 6f 75 62 6c 65 20 6e 52 6f 77 3b 20 20 20 20 20  ouble nRow;     
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14340 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
14350 72 20 6f 66 20 72 6f 77 73 20 28 66 6f 72 20 45  r of rows (for E
14360 51 50 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  QP) */.  union {
14370 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
14380 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
14390 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 77 68 65      /* Index whe
143a0 6e 20 57 48 45 52 45 5f 49 4e 44 45 58 45 44 20  n WHERE_INDEXED 
143b0 69 73 20 74 72 75 65 20 2a 2f 0a 20 20 20 20 73  is true */.    s
143c0 74 72 75 63 74 20 57 68 65 72 65 54 65 72 6d 20  truct WhereTerm 
143d0 2a 70 54 65 72 6d 3b 20 20 20 20 20 20 20 2f 2a  *pTerm;       /*
143e0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 74 65   WHERE clause te
143f0 72 6d 20 66 6f 72 20 4f 52 2d 73 65 61 72 63 68  rm for OR-search
14400 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   */.    sqlite3_
14410 69 6e 64 65 78 5f 69 6e 66 6f 20 2a 70 56 74 61  index_info *pVta
14420 62 49 64 78 3b 20 20 2f 2a 20 56 69 72 74 75 61  bIdx;  /* Virtua
14430 6c 20 74 61 62 6c 65 20 69 6e 64 65 78 20 74 6f  l table index to
14440 20 75 73 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d   use */.  } u;.}
14450 3b 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 65 61 63  ;../*.** For eac
14460 68 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 69 6e  h nested loop in
14470 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20   a WHERE clause 
14480 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
14490 74 68 65 20 57 68 65 72 65 49 6e 66 6f 0a 2a 2a  the WhereInfo.**
144a0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
144b0 69 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 73  ins a single ins
144c0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
144d0 72 75 63 74 75 72 65 2e 20 20 54 68 69 73 20 73  ructure.  This s
144e0 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 69  tructure.** is i
144f0 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20 70 72  ntended to be pr
14500 69 76 61 74 65 20 74 6f 20 74 68 65 20 77 68 65  ivate to the whe
14510 72 65 2e 63 20 6d 6f 64 75 6c 65 20 61 6e 64 20  re.c module and 
14520 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a  should not be.**
14530 20 61 63 63 65 73 73 20 6f 72 20 6d 6f 64 69 66   access or modif
14540 69 65 64 20 62 79 20 6f 74 68 65 72 20 6d 6f 64  ied by other mod
14550 75 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ules..**.** The 
14560 70 49 64 78 49 6e 66 6f 20 66 69 65 6c 64 20 69  pIdxInfo field i
14570 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 70  s used to help p
14580 69 63 6b 20 74 68 65 20 62 65 73 74 20 69 6e 64  ick the best ind
14590 65 78 20 6f 6e 20 61 0a 2a 2a 20 76 69 72 74 75  ex on a.** virtu
145a0 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 20 70  al table.  The p
145b0 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65 72 20  IdxInfo pointer 
145c0 63 6f 6e 74 61 69 6e 73 20 69 6e 64 65 78 69 6e  contains indexin
145d0 67 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  g.** information
145e0 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 74 61   for the i-th ta
145f0 62 6c 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ble in the FROM 
14600 63 6c 61 75 73 65 20 62 65 66 6f 72 65 20 72 65  clause before re
14610 6f 72 64 65 72 69 6e 67 2e 0a 2a 2a 20 41 6c 6c  ordering..** All
14620 20 74 68 65 20 70 49 64 78 49 6e 66 6f 20 70 6f   the pIdxInfo po
14630 69 6e 74 65 72 73 20 61 72 65 20 66 72 65 65 64  inters are freed
14640 20 62 79 20 77 68 65 72 65 49 6e 66 6f 46 72 65   by whereInfoFre
14650 65 28 29 20 69 6e 20 77 68 65 72 65 2e 63 2e 0a  e() in where.c..
14660 2a 2a 20 41 6c 6c 20 6f 74 68 65 72 20 69 6e 66  ** All other inf
14670 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 74 68 65 20  ormation in the 
14680 69 2d 74 68 20 57 68 65 72 65 4c 65 76 65 6c 20  i-th WhereLevel 
14690 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 69  object for the i
146a0 2d 74 68 20 74 61 62 6c 65 0a 2a 2a 20 61 66 74  -th table.** aft
146b0 65 72 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  er FROM clause o
146c0 72 64 65 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75  rdering..*/.stru
146d0 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20 7b 0a  ct WhereLevel {.
146e0 20 20 57 68 65 72 65 50 6c 61 6e 20 70 6c 61 6e    WherePlan plan
146f0 3b 20 20 20 20 20 20 20 2f 2a 20 71 75 65 72 79  ;       /* query
14700 20 70 6c 61 6e 20 66 6f 72 20 74 68 69 73 20 65   plan for this e
14710 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 46 52  lement of the FR
14720 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 69  OM clause */.  i
14730 6e 74 20 69 4c 65 66 74 4a 6f 69 6e 3b 20 20 20  nt iLeftJoin;   
14740 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 63       /* Memory c
14750 65 6c 6c 20 75 73 65 64 20 74 6f 20 69 6d 70 6c  ell used to impl
14760 65 6d 65 6e 74 20 4c 45 46 54 20 4f 55 54 45 52  ement LEFT OUTER
14770 20 4a 4f 49 4e 20 2a 2f 0a 20 20 69 6e 74 20 69   JOIN */.  int i
14780 54 61 62 43 75 72 3b 20 20 20 20 20 20 20 20 20  TabCur;         
14790 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
147a0 73 6f 72 20 75 73 65 64 20 74 6f 20 61 63 63 65  sor used to acce
147b0 73 73 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  ss the table */.
147c0 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20    int iIdxCur;  
147d0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
147e0 44 42 45 20 63 75 72 73 6f 72 20 75 73 65 64 20  DBE cursor used 
147f0 74 6f 20 61 63 63 65 73 73 20 70 49 64 78 20 2a  to access pIdx *
14800 2f 0a 20 20 69 6e 74 20 61 64 64 72 42 72 6b 3b  /.  int addrBrk;
14810 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d            /* Jum
14820 70 20 68 65 72 65 20 74 6f 20 62 72 65 61 6b 20  p here to break 
14830 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20  out of the loop 
14840 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4e 78 74  */.  int addrNxt
14850 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75  ;          /* Ju
14860 6d 70 20 68 65 72 65 20 74 6f 20 73 74 61 72 74  mp here to start
14870 20 74 68 65 20 6e 65 78 74 20 49 4e 20 63 6f 6d   the next IN com
14880 62 69 6e 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  bination */.  in
14890 74 20 61 64 64 72 43 6f 6e 74 3b 20 20 20 20 20  t addrCont;     
148a0 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65      /* Jump here
148b0 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 77 69 74   to continue wit
148c0 68 20 74 68 65 20 6e 65 78 74 20 6c 6f 6f 70 20  h the next loop 
148d0 63 79 63 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 61  cycle */.  int a
148e0 64 64 72 46 69 72 73 74 3b 20 20 20 20 20 20 20  ddrFirst;       
148f0 20 2f 2a 20 46 69 72 73 74 20 69 6e 73 74 72 75   /* First instru
14900 63 74 69 6f 6e 20 6f 66 20 69 6e 74 65 72 69 6f  ction of interio
14910 72 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f  r of the loop */
14920 0a 20 20 75 38 20 69 46 72 6f 6d 3b 20 20 20 20  .  u8 iFrom;    
14930 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
14940 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 46  h entry in the F
14950 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
14960 75 38 20 6f 70 2c 20 70 35 3b 20 20 20 20 20 20  u8 op, p5;      
14970 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20        /* Opcode 
14980 61 6e 64 20 50 35 20 6f 66 20 74 68 65 20 6f 70  and P5 of the op
14990 63 6f 64 65 20 74 68 61 74 20 65 6e 64 73 20 74  code that ends t
149a0 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74  he loop */.  int
149b0 20 70 31 2c 20 70 32 3b 20 20 20 20 20 20 20 20   p1, p2;        
149c0 20 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 6f     /* Operands o
149d0 66 20 74 68 65 20 6f 70 63 6f 64 65 20 75 73 65  f the opcode use
149e0 64 20 74 6f 20 65 6e 64 73 20 74 68 65 20 6c 6f  d to ends the lo
149f0 6f 70 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20  op */.  union { 
14a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14a10 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   Information tha
14a20 74 20 64 65 70 65 6e 64 73 20 6f 6e 20 70 6c 61  t depends on pla
14a30 6e 2e 77 73 46 6c 61 67 73 20 2a 2f 0a 20 20 20  n.wsFlags */.   
14a40 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
14a50 69 6e 74 20 6e 49 6e 3b 20 20 20 20 20 20 20 20  int nIn;        
14a60 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14a70 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 49  of entries in aI
14a80 6e 4c 6f 6f 70 5b 5d 20 2a 2f 0a 20 20 20 20 20  nLoop[] */.     
14a90 20 73 74 72 75 63 74 20 49 6e 4c 6f 6f 70 20 7b   struct InLoop {
14aa0 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 43 75  .        int iCu
14ab0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
14ac0 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
14ad0 6f 72 20 75 73 65 64 20 62 79 20 74 68 69 73 20  or used by this 
14ae0 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20  IN operator */. 
14af0 20 20 20 20 20 20 20 69 6e 74 20 61 64 64 72 49         int addrI
14b00 6e 54 6f 70 3b 20 20 20 20 20 20 20 20 20 2f 2a  nTop;         /*
14b10 20 54 6f 70 20 6f 66 20 74 68 65 20 49 4e 20 6c   Top of the IN l
14b20 6f 6f 70 20 2a 2f 0a 20 20 20 20 20 20 20 20 75  oop */.        u
14b30 38 20 65 45 6e 64 4c 6f 6f 70 4f 70 3b 20 20 20  8 eEndLoopOp;   
14b40 20 20 20 20 20 20 2f 2a 20 49 4e 20 4c 6f 6f 70        /* IN Loop
14b50 20 74 65 72 6d 69 6e 61 74 6f 72 2e 20 4f 50 5f   terminator. OP_
14b60 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65 76 20  Next or OP_Prev 
14b70 2a 2f 0a 20 20 20 20 20 20 7d 20 2a 61 49 6e 4c  */.      } *aInL
14b80 6f 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f  oop;           /
14b90 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
14ba0 6f 75 74 20 65 61 63 68 20 6e 65 73 74 65 64 20  out each nested 
14bb0 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20  IN operator */. 
14bc0 20 20 20 7d 20 69 6e 3b 20 20 20 20 20 20 20 20     } in;        
14bd0 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
14be0 20 77 68 65 6e 20 70 6c 61 6e 2e 77 73 46 6c 61   when plan.wsFla
14bf0 67 73 26 57 48 45 52 45 5f 49 4e 5f 41 42 4c 45  gs&WHERE_IN_ABLE
14c00 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   */.    Index *p
14c10 43 6f 76 69 64 78 3b 20 20 20 20 20 20 20 2f 2a  Covidx;       /*
14c20 20 50 6f 73 73 69 62 6c 65 20 63 6f 76 65 72 69   Possible coveri
14c30 6e 67 20 69 6e 64 65 78 20 66 6f 72 20 57 48 45  ng index for WHE
14c40 52 45 5f 4d 55 4c 54 49 5f 4f 52 20 2a 2f 0a 20  RE_MULTI_OR */. 
14c50 20 7d 20 75 3b 0a 20 20 64 6f 75 62 6c 65 20 72   } u;.  double r
14c60 4f 70 74 43 6f 73 74 3b 20 20 20 20 20 20 2f 2a  OptCost;      /*
14c70 20 22 4f 70 74 69 6d 61 6c 22 20 63 6f 73 74 20   "Optimal" cost 
14c80 66 6f 72 20 74 68 69 73 20 6c 65 76 65 6c 20 2a  for this level *
14c90 2f 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  /..  /* The foll
14ca0 6f 77 69 6e 67 20 66 69 65 6c 64 20 69 73 20 72  owing field is r
14cb0 65 61 6c 6c 79 20 6e 6f 74 20 70 61 72 74 20 6f  eally not part o
14cc0 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 65  f the current le
14cd0 76 65 6c 2e 20 20 42 75 74 0a 20 20 2a 2a 20 77  vel.  But.  ** w
14ce0 65 20 6e 65 65 64 20 61 20 70 6c 61 63 65 20 74  e need a place t
14cf0 6f 20 63 61 63 68 65 20 76 69 72 74 75 61 6c 20  o cache virtual 
14d00 74 61 62 6c 65 20 69 6e 64 65 78 20 69 6e 66 6f  table index info
14d10 72 6d 61 74 69 6f 6e 20 66 6f 72 20 65 61 63 68  rmation for each
14d20 0a 20 20 2a 2a 20 76 69 72 74 75 61 6c 20 74 61  .  ** virtual ta
14d30 62 6c 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ble in the FROM 
14d40 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 57  clause and the W
14d50 68 65 72 65 4c 65 76 65 6c 20 73 74 72 75 63 74  hereLevel struct
14d60 75 72 65 20 69 73 0a 20 20 2a 2a 20 61 20 63 6f  ure is.  ** a co
14d70 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 20 73  nvenient place s
14d80 69 6e 63 65 20 74 68 65 72 65 20 69 73 20 6f 6e  ince there is on
14d90 65 20 57 68 65 72 65 4c 65 76 65 6c 20 66 6f 72  e WhereLevel for
14da0 20 65 61 63 68 20 46 52 4f 4d 20 63 6c 61 75 73   each FROM claus
14db0 65 0a 20 20 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a  e.  ** element..
14dc0 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69    */.  sqlite3_i
14dd0 6e 64 65 78 5f 69 6e 66 6f 20 2a 70 49 64 78 49  ndex_info *pIdxI
14de0 6e 66 6f 3b 20 20 2f 2a 20 49 6e 64 65 78 20 69  nfo;  /* Index i
14df0 6e 66 6f 20 66 6f 72 20 6e 2d 74 68 20 73 6f 75  nfo for n-th sou
14e00 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a  rce table */.};.
14e10 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
14e20 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
14e30 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
14e40 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
14e50 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
14e60 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
14e70 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
14e80 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ber..*/.#define 
14e90 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f  WHERE_ORDERBY_NO
14ea0 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a  RMAL   0x0000 /*
14eb0 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e   No-op */.#defin
14ec0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
14ed0 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20  MIN      0x0001 
14ee0 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
14ef0 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29  essing for min()
14f00 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
14f10 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
14f20 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f  AX      0x0002 /
14f30 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
14f40 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20  ssing for max() 
14f50 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
14f60 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45  WHERE_ONEPASS_DE
14f70 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a  SIRED  0x0004 /*
14f80 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d   Want to do one-
14f90 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45  pass UPDATE/DELE
14fa0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  TE */.#define WH
14fb0 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f  ERE_DUPLICATES_O
14fc0 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f  K    0x0008 /* O
14fd0 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f  k to return a ro
14fe0 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  w more than once
14ff0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
15000 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53  E_OMIT_OPEN_CLOS
15010 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62  E  0x0010 /* Tab
15020 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  le cursors are a
15030 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23  lready open */.#
15040 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52  define WHERE_FOR
15050 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78  CE_TABLE      0x
15060 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75  0020 /* Do not u
15070 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79  se an index-only
15080 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69   search */.#defi
15090 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c  ne WHERE_ONETABL
150a0 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30  E_ONLY    0x0040
150b0 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68   /* Only code th
150c0 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70  e 1st table in p
150d0 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69  TabList */.#defi
150e0 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c  ne WHERE_AND_ONL
150f0 59 20 20 20 20 20 20 20 20 20 30 78 30 30 38 30  Y         0x0080
15100 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20 69 6e   /* Don't use in
15110 64 69 63 65 73 20 66 6f 72 20 4f 52 20 74 65 72  dices for OR ter
15120 6d 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ms */../*.** The
15130 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 70 72   WHERE clause pr
15140 6f 63 65 73 73 69 6e 67 20 72 6f 75 74 69 6e 65  ocessing routine
15150 20 68 61 73 20 74 77 6f 20 68 61 6c 76 65 73 2e   has two halves.
15160 20 20 54 68 65 0a 2a 2a 20 66 69 72 73 74 20 70    The.** first p
15170 61 72 74 20 64 6f 65 73 20 74 68 65 20 73 74 61  art does the sta
15180 72 74 20 6f 66 20 74 68 65 20 57 48 45 52 45 20  rt of the WHERE 
15190 6c 6f 6f 70 20 61 6e 64 20 74 68 65 20 73 65 63  loop and the sec
151a0 6f 6e 64 0a 2a 2a 20 68 61 6c 66 20 64 6f 65 73  ond.** half does
151b0 20 74 68 65 20 74 61 69 6c 20 6f 66 20 74 68 65   the tail of the
151c0 20 57 48 45 52 45 20 6c 6f 6f 70 2e 20 20 41 6e   WHERE loop.  An
151d0 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20   instance of.** 
151e0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
151f0 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  s returned by th
15200 65 20 66 69 72 73 74 20 68 61 6c 66 20 61 6e 64  e first half and
15210 20 70 61 73 73 65 64 0a 2a 2a 20 69 6e 74 6f 20   passed.** into 
15220 74 68 65 20 73 65 63 6f 6e 64 20 68 61 6c 66 20  the second half 
15230 74 6f 20 67 69 76 65 20 73 6f 6d 65 20 63 6f 6e  to give some con
15240 74 69 6e 75 69 74 79 2e 0a 2a 2f 0a 73 74 72 75  tinuity..*/.stru
15250 63 74 20 57 68 65 72 65 49 6e 66 6f 20 7b 0a 20  ct WhereInfo {. 
15260 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
15270 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
15280 72 73 69 6e 67 20 61 6e 64 20 63 6f 64 65 20 67  rsing and code g
15290 65 6e 65 72 61 74 69 6e 67 20 63 6f 6e 74 65 78  enerating contex
152a0 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  t */.  SrcList *
152b0 70 54 61 62 4c 69 73 74 3b 20 20 20 20 20 20 20  pTabList;       
152c0 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 61 62 6c   /* List of tabl
152d0 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e 20 2a  es in the join *
152e0 2f 0a 20 20 75 31 36 20 6e 4f 42 53 61 74 3b 20  /.  u16 nOBSat; 
152f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15300 20 4e 75 6d 62 65 72 20 6f 66 20 4f 52 44 45 52   Number of ORDER
15310 20 42 59 20 74 65 72 6d 73 20 73 61 74 69 73 66   BY terms satisf
15320 69 65 64 20 62 79 20 69 6e 64 69 63 65 73 20 2a  ied by indices *
15330 2f 0a 20 20 75 31 36 20 77 63 74 72 6c 46 6c 61  /.  u16 wctrlFla
15340 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gs;           /*
15350 20 46 6c 61 67 73 20 6f 72 69 67 69 6e 61 6c 6c   Flags originall
15360 79 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69  y passed to sqli
15370 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 20  te3WhereBegin() 
15380 2a 2f 0a 20 20 75 38 20 6f 6b 4f 6e 65 50 61 73  */.  u8 okOnePas
15390 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
153a0 2a 20 4f 6b 20 74 6f 20 75 73 65 20 6f 6e 65 2d  * Ok to use one-
153b0 70 61 73 73 20 61 6c 67 6f 72 69 74 68 6d 20 66  pass algorithm f
153c0 6f 72 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  or UPDATE/DELETE
153d0 20 2a 2f 0a 20 20 75 38 20 75 6e 74 65 73 74 65   */.  u8 unteste
153e0 64 54 65 72 6d 73 3b 20 20 20 20 20 20 20 20 20  dTerms;         
153f0 2f 2a 20 4e 6f 74 20 61 6c 6c 20 57 48 45 52 45  /* Not all WHERE
15400 20 74 65 72 6d 73 20 72 65 73 6f 6c 76 65 64 20   terms resolved 
15410 62 79 20 6f 75 74 65 72 20 6c 6f 6f 70 20 2a 2f  by outer loop */
15420 0a 20 20 75 38 20 65 44 69 73 74 69 6e 63 74 3b  .  u8 eDistinct;
15430 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15440 4f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 52 45  One of the WHERE
15450 5f 44 49 53 54 49 4e 43 54 5f 2a 20 76 61 6c 75  _DISTINCT_* valu
15460 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 6e  es below */.  in
15470 74 20 69 54 6f 70 3b 20 20 20 20 20 20 20 20 20  t iTop;         
15480 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
15490 65 72 79 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  ery beginning of
154a0 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 20   the WHERE loop 
154b0 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6e 74 69 6e  */.  int iContin
154c0 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ue;            /
154d0 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 63  * Jump here to c
154e0 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 6e 65 78  ontinue with nex
154f0 74 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  t record */.  in
15500 74 20 69 42 72 65 61 6b 3b 20 20 20 20 20 20 20  t iBreak;       
15510 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20          /* Jump 
15520 68 65 72 65 20 74 6f 20 62 72 65 61 6b 20 6f 75  here to break ou
15530 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f  t of the loop */
15540 0a 20 20 69 6e 74 20 6e 4c 65 76 65 6c 3b 20 20  .  int nLevel;  
15550 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15560 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
15570 20 6c 6f 6f 70 20 2a 2f 0a 20 20 73 74 72 75 63   loop */.  struc
15580 74 20 57 68 65 72 65 43 6c 61 75 73 65 20 2a 70  t WhereClause *p
15590 57 43 3b 20 20 2f 2a 20 44 65 63 6f 6d 70 6f 73  WC;  /* Decompos
155a0 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 57 48 45  ition of the WHE
155b0 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 64  RE clause */.  d
155c0 6f 75 62 6c 65 20 73 61 76 65 64 4e 51 75 65 72  ouble savedNQuer
155d0 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20 70 50 61 72  yLoop;   /* pPar
155e0 73 65 2d 3e 6e 51 75 65 72 79 4c 6f 6f 70 20 6f  se->nQueryLoop o
155f0 75 74 73 69 64 65 20 74 68 65 20 57 48 45 52 45  utside the WHERE
15600 20 6c 6f 6f 70 20 2a 2f 0a 20 20 64 6f 75 62 6c   loop */.  doubl
15610 65 20 6e 52 6f 77 4f 75 74 3b 20 20 20 20 20 20  e nRowOut;      
15620 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
15630 64 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74 70  d number of outp
15640 75 74 20 72 6f 77 73 20 2a 2f 0a 20 20 57 68 65  ut rows */.  Whe
15650 72 65 4c 65 76 65 6c 20 61 5b 31 5d 3b 20 20 20  reLevel a[1];   
15660 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
15670 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
15680 20 6e 65 73 74 20 6c 6f 6f 70 20 69 6e 20 57 48   nest loop in WH
15690 45 52 45 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c  ERE */.};../* Al
156a0 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
156b0 20 57 68 65 72 65 49 6e 66 6f 2e 65 44 69 73 74   WhereInfo.eDist
156c0 69 6e 63 74 20 61 6e 64 20 44 69 73 74 69 6e 63  inct and Distinc
156d0 74 43 74 78 2e 65 54 6e 63 74 54 79 70 65 20 2a  tCtx.eTnctType *
156e0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
156f0 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20  DISTINCT_NOOP   
15700 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43     0  /* DISTINC
15710 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73  T keyword not us
15720 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ed */.#define WH
15730 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49  ERE_DISTINCT_UNI
15740 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20  QUE    1  /* No 
15750 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64  duplicates */.#d
15760 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
15770 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32  INCT_ORDERED   2
15780 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61    /* All duplica
15790 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74  tes are adjacent
157a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
157b0 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44  E_DISTINCT_UNORD
157c0 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69  ERED 3  /* Dupli
157d0 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74 65  cates are scatte
157e0 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  red */../*.** A 
157f0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69  NameContext defi
15800 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e  nes a context in
15810 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76   which to resolv
15820 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75  e table and colu
15830 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68  mn.** names.  Th
15840 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73  e context consis
15850 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20  ts of a list of 
15860 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72 63  tables (the pSrc
15870 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a  List) field and.
15880 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d  ** a list of nam
15890 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70  ed expression (p
158a0 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d  EList).  The nam
158b0 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  ed expression li
158c0 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c  st may.** be NUL
158d0 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f 72  L.  The pSrc cor
158e0 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
158f0 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
15900 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f   SELECT or.** to
15910 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
15920 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20   operated on by 
15930 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20  INSERT, UPDATE, 
15940 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a  or DELETE.  The.
15950 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73  ** pEList corres
15960 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73  ponds to the res
15970 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c  ult set of a SEL
15980 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20  ECT and is NULL 
15990 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61  for.** other sta
159a0 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e  tements..**.** N
159b0 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20  ameContexts can 
159c0 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e  be nested.  When
159d0 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
159e0 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74  , the inner-most
159f0 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20   .** context is 
15a00 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20  searched first. 
15a10 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20   If no match is 
15a20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20  found, the next 
15a30 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74  outer.** context
15a40 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66   is checked.  If
15a50 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20   there is still 
15a60 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65  no match, the ne
15a70 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73  xt context.** is
15a80 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20   checked.  This 
15a90 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65  process continue
15aa0 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61  s until either a
15ab0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a   match is found.
15ac0 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78  ** or all contex
15ad0 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57  ts are check.  W
15ae0 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66  hen a match is f
15af0 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d  ound, the nRef m
15b00 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20  ember of.** the 
15b10 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69  context containi
15b20 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20  ng the match is 
15b30 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a  incremented. .**
15b40 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72  .** Each subquer
15b50 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d  y gets a new Nam
15b60 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70  eContext.  The p
15b70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74  Next field point
15b80 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  s to the.** Name
15b90 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70  Context in the p
15ba0 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68  arent query.  Th
15bb0 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f  us the process o
15bc0 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a  f scanning the.*
15bd0 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69  * NameContext li
15be0 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
15bf0 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f  o searching thro
15c00 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79  ugh successively
15c10 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65   outer.** subque
15c20 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  ries looking for
15c30 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72   a match..*/.str
15c40 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
15c50 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
15c60 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  e;       /* The 
15c70 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c  parser */.  SrcL
15c80 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
15c90 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
15ca0 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72  tables used to r
15cb0 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a  esolve names */.
15cc0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
15cd0 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e  st;    /* Option
15ce0 61 6c 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64  al list of named
15cf0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
15d00 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
15d10 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  nfo;   /* Inform
15d20 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72  ation about aggr
15d30 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c  egates at this l
15d40 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f  evel */.  NameCo
15d50 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f  ntext *pNext;  /
15d60 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d  * Next outer nam
15d70 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c  e context.  NULL
15d80 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a   for outermost *
15d90 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
15da0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15db0 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f  er of names reso
15dc0 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e  lved by this con
15dd0 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  text */.  int nE
15de0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
15df0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
15e00 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77  rs encountered w
15e10 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e  hile resolving n
15e20 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20 6e 63 46  ames */.  u8 ncF
15e30 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
15e40 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e  * Zero or more N
15e50 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  C_* flags define
15e60 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f  d below */.};../
15e70 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
15e80 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65  ues for the Name
15e90 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73  Context, ncFlags
15ea0 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
15eb0 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20  ne NC_AllowAgg  
15ec0 30 78 30 31 20 20 20 20 2f 2a 20 41 67 67 72 65  0x01    /* Aggre
15ed0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  gate functions a
15ee0 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20  re allowed here 
15ef0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61  */.#define NC_Ha
15f00 73 41 67 67 20 20 20 20 30 78 30 32 20 20 20 20  sAgg    0x02    
15f10 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  /* One or more a
15f20 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
15f30 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ns seen */.#defi
15f40 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20  ne NC_IsCheck   
15f50 30 78 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20  0x04    /* True 
15f60 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  if resolving nam
15f70 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f  es in a CHECK co
15f80 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
15f90 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63  ine NC_InAggFunc
15fa0 20 30 78 30 38 20 20 20 20 2f 2a 20 54 72 75 65   0x08    /* True
15fb0 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72   if analyzing ar
15fc0 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67  guments to an ag
15fd0 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  g func */.#defin
15fe0 65 20 4e 43 5f 41 73 4d 61 79 62 65 20 20 20 30  e NC_AsMaybe   0
15ff0 78 31 30 20 20 20 20 2f 2a 20 52 65 73 6f 6c 76  x10    /* Resolv
16000 65 20 74 6f 20 41 53 20 74 65 72 6d 73 20 6f 66  e to AS terms of
16010 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
16020 6f 6e 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20  only.           
16030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16040 20 20 2a 2a 20 69 66 20 6e 6f 20 6f 74 68 65 72    ** if no other
16050 20 72 65 73 6f 6c 75 74 69 6f 6e 20 69 73 20 61   resolution is a
16060 76 61 69 6c 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a  vailable */../*.
16070 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
16080 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
16090 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
160a0 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69  ns all informati
160b0 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20  on.** needed to 
160c0 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f  generate code fo
160d0 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  r a single SELEC
160e0 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a  T statement..**.
160f0 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74  ** nLimit is set
16100 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20   to -1 if there 
16110 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75  is no LIMIT clau
16120 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20  se.  nOffset is 
16130 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20  set to 0..** If 
16140 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54  there is a LIMIT
16150 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72   clause, the par
16160 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20  ser sets nLimit 
16170 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
16180 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64  the.** limit and
16190 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20   nOffset to the 
161a0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66  value of the off
161b0 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65  set (or 0 if the
161c0 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66  re is not.** off
161d0 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72  set).  But later
161e0 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20   on, nLimit and 
161f0 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74  nOffset become t
16200 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
16210 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44  ons.** in the VD
16220 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74  BE that record t
16230 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66  he limit and off
16240 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a  set counters..**
16250 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
16260 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
16270 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
16280 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
16290 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
162a0 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
162b0 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
162c0 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
162d0 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
162e0 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
162f0 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
16300 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
16310 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
16320 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
16330 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
16340 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
16350 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
16360 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
16370 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
16380 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
16390 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
163a0 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
163b0 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
163c0 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
163d0 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
163e0 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
163f0 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
16400 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
16410 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
16420 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
16430 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
16440 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
16450 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  or addrOpenEphm[
16460 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
16470 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
16480 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
16490 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
164a0 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
164b0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
164c0 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
164d0 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
164e0 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16500 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
16510 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
16520 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
16530 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c  T */.  u16 selFl
16540 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
16550 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61   Various SF_* va
16560 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c  lues */.  int iL
16570 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20  imit, iOffset;  
16580 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
16590 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d  ters holding LIM
165a0 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e  IT & OFFSET coun
165b0 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64  ters */.  int ad
165c0 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b 20 20  drOpenEphm[3];  
165d0 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
165e0 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
165f0 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
16600 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 53 65 6c  */.  double nSel
16610 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45  ectRow;     /* E
16620 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
16630 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a  of result rows *
16640 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
16650 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
16660 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
16670 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
16680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
16690 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
166a0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
166b0 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
166c0 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
166d0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
166e0 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
166f0 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
16700 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
16710 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
16720 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
16730 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
16740 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
16750 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
16760 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
16770 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
16780 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
16790 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
167a0 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
167b0 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
167c0 6f 75 6e 64 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ound */.  Select
167d0 20 2a 70 52 69 67 68 74 6d 6f 73 74 3b 20 20 20   *pRightmost;   
167e0 20 2f 2a 20 52 69 67 68 74 2d 6d 6f 73 74 20 73   /* Right-most s
167f0 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f  elect in a compo
16800 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65  und select state
16810 6d 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ment */.  Expr *
16820 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
16830 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
16840 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
16850 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
16860 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20  Expr *pOffset;  
16870 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54         /* OFFSET
16880 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
16890 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
168a0 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  . */.};../*.** A
168b0 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
168c0 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67  r Select.selFlag
168d0 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65  s.  The "SF" pre
168e0 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  fix stands for.*
168f0 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e  * "Select Flag".
16900 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44  .*/.#define SF_D
16910 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 20 30  istinct        0
16920 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74  x0001  /* Output
16930 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49   should be DISTI
16940 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NCT */.#define S
16950 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20  F_Resolved      
16960 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65    0x0002  /* Ide
16970 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65  ntifiers have be
16980 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23  en resolved */.#
16990 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67  define SF_Aggreg
169a0 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30 34  ate       0x0004
169b0 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67    /* Contains ag
169c0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
169d0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
169e0 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20  UsesEphemeral   
169f0 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20  0x0008  /* Uses 
16a00 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  the OpenEphemera
16a10 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66  l opcode */.#def
16a20 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20  ine SF_Expanded 
16a30 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20 2f         0x0010  /
16a40 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  * sqlite3SelectE
16a50 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f  xpand() called o
16a60 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e  n this */.#defin
16a70 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f  e SF_HasTypeInfo
16a80 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20       0x0020  /* 
16a90 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20  FROM subqueries 
16aa0 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64  have Table metad
16ab0 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ata */.#define S
16ac0 46 5f 55 73 65 53 6f 72 74 65 72 20 20 20 20 20  F_UseSorter     
16ad0 20 20 30 78 30 30 34 30 20 20 2f 2a 20 53 6f 72    0x0040  /* Sor
16ae0 74 20 75 73 69 6e 67 20 61 20 73 6f 72 74 65 72  t using a sorter
16af0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56   */.#define SF_V
16b00 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 30  alues          0
16b10 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68 65  x0080  /* Synthe
16b20 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45  sized from VALUE
16b30 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  S clause */.#def
16b40 69 6e 65 20 53 46 5f 4d 61 74 65 72 69 61 6c 69  ine SF_Materiali
16b50 7a 65 20 20 20 20 20 30 78 30 31 30 30 20 20 2f  ze     0x0100  /
16b60 2a 20 46 6f 72 63 65 20 6d 61 74 65 72 69 61 6c  * Force material
16b70 69 7a 61 74 69 6f 6e 20 6f 66 20 76 69 65 77 73  ization of views
16b80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e   */.#define SF_N
16b90 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30  estedFrom      0
16ba0 78 30 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  x0200  /* Part o
16bb0 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  f a parenthesize
16bc0 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  d FROM clause */
16bd0 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73  .../*.** The res
16be0 75 6c 74 73 20 6f 66 20 61 20 73 65 6c 65 63 74  ults of a select
16bf0 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75   can be distribu
16c00 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  ted in several w
16c10 61 79 73 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52  ays.  The.** "SR
16c20 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20  T" prefix means 
16c30 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 20 54  "SELECT Result T
16c40 79 70 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ype"..*/.#define
16c50 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
16c60 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
16c70 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
16c80 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
16c90 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
16ca0 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
16cb0 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
16cc0 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
16cd0 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
16ce0 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
16cf0 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
16d00 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
16d10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
16d20 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
16d30 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
16d40 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
16d50 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f  ere */../* The O
16d60 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
16d70 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c  s ignored for al
16d80 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a  l of the above *
16d90 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61  /.#define Ignora
16da0 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28  bleOrderby(X) ((
16db0 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44  X->eDest)<=SRT_D
16dc0 69 73 63 61 72 64 29 0a 0a 23 64 65 66 69 6e 65  iscard)..#define
16dd0 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
16de0 20 20 35 20 20 2f 2a 20 4f 75 74 70 75 74 20 65    5  /* Output e
16df0 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
16e00 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
16e10 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 20 36 20  _Mem          6 
16e20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
16e30 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
16e40 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
16e50 5f 53 65 74 20 20 20 20 20 20 20 20 20 20 37 20  _Set          7 
16e60 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
16e70 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  s as keys in an 
16e80 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
16e90 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
16ea0 20 20 38 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    8  /* Store re
16eb0 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
16ec0 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
16ed0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
16ee0 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
16ef0 20 39 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72   9  /* Create tr
16f00 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
16f10 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
16f20 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
16f30 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
16f40 31 30 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  10  /* Generate 
16f50 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
16f60 72 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  result */../*.**
16f70 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
16f80 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63  this object desc
16f90 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70  ribes where to p
16fa0 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ut of the result
16fb0 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54  s of.** a SELECT
16fc0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
16fd0 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
16fe0 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20   {.  u8 eDest;  
16ff0 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f         /* How to
17000 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20   dispose of the 
17010 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20  results.  On of 
17020 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a  SRT_* above. */.
17030 20 20 63 68 61 72 20 61 66 66 53 64 73 74 3b 20    char affSdst; 
17040 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
17050 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d  used when eDest=
17060 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e  =SRT_Set */.  in
17070 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20  t iSDParm;      
17080 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
17090 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
170a0 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
170b0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
170c0 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
170d0 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72  register where r
170e0 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74  esults are writt
170f0 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73  en */.  int nSds
17100 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  t;        /* Num
17110 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
17120 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b   allocated */.};
17130 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63  ../*.** During c
17140 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  ode generation o
17150 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  f statements tha
17160 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74  t do inserts int
17170 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  o AUTOINCREMENT 
17180 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20  .** tables, the 
17190 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d  following inform
171a0 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65  ation is attache
171b0 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75  d to the Table.u
171c0 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f  .autoInc.p.** po
171d0 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75  inter of each au
171e0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c  toincrement tabl
171f0 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65  e to record some
17200 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f   side informatio
17210 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f  n that.** the co
17220 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65  de generator nee
17230 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20  ds.  We have to 
17240 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61  keep per-table a
17250 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20  utoincrement.** 
17260 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63  information in c
17270 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20  ase inserts are 
17280 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67  down within trig
17290 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20  gers.  Triggers 
172a0 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c  do not.** normal
172b0 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  ly coordinate th
172c0 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20  eir activities, 
172d0 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74  but we do need t
172e0 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  o coordinate the
172f0 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20  .** loading and 
17300 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e  saving of autoin
17310 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74  crement informat
17320 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ion..*/.struct A
17330 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41  utoincInfo {.  A
17340 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78  utoincInfo *pNex
17350 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66  t;   /* Next inf
17360 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73  o block in a lis
17370 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f  t of them all */
17380 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
17390 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
173a0 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63  e this info bloc
173b0 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20  k refers to */. 
173c0 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
173d0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
173e0 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
173f0 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
17400 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69  ding pTab */.  i
17410 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20  nt regCtr;      
17420 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72       /* Memory r
17430 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
17440 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65  the rowid counte
17450 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  r */.};../*.** S
17460 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ize of the colum
17470 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64  n cache.*/.#ifnd
17480 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  ef SQLITE_N_COLC
17490 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51  ACHE.# define SQ
174a0 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20  LITE_N_COLCACHE 
174b0 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  10.#endif../*.**
174c0 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e   At least one in
174d0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
174e0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
174f0 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
17500 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65   each .** trigge
17510 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69  r that may be fi
17520 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e  red while parsin
17530 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44  g an INSERT, UPD
17540 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a  ATE or DELETE.**
17550 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20   statement. All 
17560 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65  such objects are
17570 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c   stored in the l
17580 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
17590 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54  d at.** Parse.pT
175a0 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65  riggerPrg and de
175b0 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65  leted once state
175c0 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  ment compilation
175d0 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d   has been.** com
175e0 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  pleted..**.** A 
175f0 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d  Vdbe sub-program
17600 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
17610 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48   the body and WH
17620 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69  EN clause of tri
17630 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50  gger.** TriggerP
17640 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73  rg.pTrigger, ass
17650 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20  uming a default 
17660 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
17670 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72  se of.** Trigger
17680 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73  Prg.orconf, is s
17690 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69  tored in the Tri
176a0 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d  ggerPrg.pProgram
176b0 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68   variable..** Th
176c0 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  e Parse.pTrigger
176d0 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63  Prg list never c
176e0 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72  ontains two entr
176f0 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ies with the sam
17700 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20  e.** values for 
17710 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e  both pTrigger an
17720 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20  d orconf..**.** 
17730 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  The TriggerPrg.a
17740 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61  Colmask[0] varia
17750 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20  ble is set to a 
17760 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  mask of old.* co
17770 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65  lumns.** accesse
17780 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66  d (or set to 0 f
17790 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65  or triggers fire
177a0 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66  d as a result of
177b0 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74   INSERT .** stat
177c0 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72  ements). Similar
177d0 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50  ly, the TriggerP
177e0 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76  rg.aColmask[1] v
177f0 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
17800 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e  o.** a mask of n
17810 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65  ew.* columns use
17820 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
17830 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  ..*/.struct Trig
17840 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67  gerPrg {.  Trigg
17850 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
17860 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68     /* Trigger th
17870 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63  is program was c
17880 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54  oded from */.  T
17890 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74  riggerPrg *pNext
178a0 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65  ;      /* Next e
178b0 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54  ntry in Parse.pT
178c0 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a  riggerPrg list *
178d0 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
178e0 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50  pProgram;   /* P
178f0 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74  rogram implement
17900 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63  ing pTrigger/orc
17910 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63  onf */.  int orc
17920 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  onf;            
17930 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
17940 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a  ONFLICT policy *
17950 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b  /.  u32 aColmask
17960 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  [2];        /* M
17970 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e  asks of old.*, n
17980 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63  ew.* columns acc
17990 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  essed */.};../*.
179a0 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64  ** The yDbMask d
179b0 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20  atatype for the 
179c0 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61  bitmask of all a
179d0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
179e0 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  s..*/.#if SQLITE
179f0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
17a00 0a 20 20 74 79 70 65 64 65 66 20 73 71 6c 69 74  .  typedef sqlit
17a10 65 33 5f 75 69 6e 74 36 34 20 79 44 62 4d 61 73  e3_uint64 yDbMas
17a20 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  k;.#else.  typed
17a30 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  ef unsigned int 
17a40 79 44 62 4d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a  yDbMask;.#endif.
17a50 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61  ./*.** An SQL pa
17a60 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41  rser context.  A
17a70 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74   copy of this st
17a80 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
17a90 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65  d through.** the
17aa0 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e   parser and down
17ab0 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61   into all the pa
17ac0 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74  rser action rout
17ad0 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ine in order to.
17ae0 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20  ** carry around 
17af0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
17b00 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
17b10 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a  e entire parse..
17b20 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74  **.** The struct
17b30 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69  ure is divided i
17b40 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20  nto two parts.  
17b50 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20  When the parser 
17b60 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65  and code.** gene
17b70 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65  rate call themse
17b80 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79  lves recursively
17b90 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74  , the first part
17ba0 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
17bb0 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74  e.** is constant
17bc0 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20   but the second 
17bd0 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74  part is reset at
17be0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61   the beginning a
17bf0 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63  nd end of.** eac
17c00 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a  h recursion..**.
17c10 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63  ** The nTableLoc
17c20 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b  k and aTableLock
17c30 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
17c40 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20  nly used if the 
17c50 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a  shared-cache .**
17c60 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
17c70 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54  led (if sqlite3T
17c80 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44  sd()->useSharedD
17c90 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68  ata is true). Th
17ca0 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  ey are.** used t
17cb0 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20  o store the set 
17cc0 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72  of table-locks r
17cd0 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
17ce0 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a  tatement being.*
17cf0 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63  * compiled. Func
17d00 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c  tion sqlite3Tabl
17d10 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20  eLock() is used 
17d20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74  to add entries t
17d30 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a  o the.** list..*
17d40 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b  /.struct Parse {
17d50 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
17d60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
17d70 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72  ain database str
17d80 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72  ucture */.  char
17d90 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
17da0 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73   /* An error mes
17db0 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a  sage */.  Vdbe *
17dc0 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f  pVdbe;         /
17dd0 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20  * An engine for 
17de0 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61  executing databa
17df0 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20  se bytecode */. 
17e00 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
17e10 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
17e20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74  code from execut
17e30 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e  ion */.  u8 colN
17e40 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a  amesSet;      /*
17e50 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43   TRUE after OP_C
17e60 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65  olumnName has be
17e70 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64  en issued to pVd
17e80 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b  be */.  u8 check
17e90 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20  Schema;      /* 
17ea0 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f  Causes schema co
17eb0 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72  okie check after
17ec0 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75   an error */.  u
17ed0 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20  8 nested;       
17ee0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17ef0 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
17f00 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65   the parser/code
17f10 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
17f20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20  u8 nTempReg;    
17f30 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17f40 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  f temporary regi
17f50 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65  sters in aTempRe
17f60 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  g[] */.  u8 nTem
17f70 70 49 6e 55 73 65 3b 20 20 20 20 20 20 20 2f 2a  pInUse;       /*
17f80 20 4e 75 6d 62 65 72 20 6f 66 20 61 54 65 6d 70   Number of aTemp
17f90 52 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c 79 20  Reg[] currently 
17fa0 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
17fb0 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20   u8 nColCache;  
17fc0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17fd0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  of entries in aC
17fe0 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 75  olCache[] */.  u
17ff0 38 20 69 43 6f 6c 43 61 63 68 65 3b 20 20 20 20  8 iColCache;    
18000 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
18010 79 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d  y in aColCache[]
18020 20 74 6f 20 72 65 70 6c 61 63 65 20 2a 2f 0a 20   to replace */. 
18030 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
18040 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
18050 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
18060 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
18070 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
18080 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
18090 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
180a0 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
180b0 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
180c0 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  eption */.  int 
180d0 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20  aTempReg[8];    
180e0 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61   /* Holding area
180f0 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72   for temporary r
18100 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e  egisters */.  in
18110 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t nRangeReg;    
18120 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
18130 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  e temporary regi
18140 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
18150 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20  int iRangeReg;  
18160 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
18170 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72  gister in tempor
18180 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
18190 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ck */.  int nErr
181a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
181b0 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
181c0 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
181d0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
181e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65  /* Number of pre
181f0 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65  viously allocate
18200 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a  d VDBE cursors *
18210 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
18220 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
18230 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
18240 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ls used so far *
18250 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20  /.  int nSet;   
18260 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
18270 65 72 20 6f 66 20 73 65 74 73 20 75 73 65 64 20  er of sets used 
18280 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
18290 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20  nOnce;          
182a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50   /* Number of OP
182b0 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f  _Once instructio
182c0 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ns so far */.  i
182d0 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20  nt ckBase;      
182e0 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
182f0 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72  ster of data dur
18300 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  ing check constr
18310 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69  aints */.  int i
18320 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20  CacheLevel;     
18330 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69  /* ColCache vali
18340 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65  d when aColCache
18350 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68  [].iLevel<=iCach
18360 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20  eLevel */.  int 
18370 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20  iCacheCnt;      
18380 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64   /* Counter used
18390 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f   to generate aCo
183a0 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c  lCache[].lru val
183b0 75 65 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ues */.  struct 
183c0 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20  yColCache {.    
183d0 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
183e0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
183f0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
18400 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
18410 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
18420 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  le column number
18430 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52   */.    u8 tempR
18440 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  eg;           /*
18450 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20   iReg is a temp 
18460 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65  register that ne
18470 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20  eds to be freed 
18480 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65  */.    int iLeve
18490 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
184a0 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f  Nesting level */
184b0 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20  .    int iReg;  
184c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
184d0 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20  g with value of 
184e0 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d  this column. 0 m
184f0 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20  eans none. */.  
18500 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20    int lru;      
18510 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74          /* Least
18520 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65   recently used e
18530 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61  ntry has the sma
18540 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20  llest value */. 
18550 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c   } aColCache[SQL
18560 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b  ITE_N_COLCACHE];
18570 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63    /* One for eac
18580 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65  h column cache e
18590 6e 74 72 79 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ntry */.  yDbMas
185a0 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f  k writeMask;   /
185b0 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20  * Start a write 
185c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
185d0 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a  hese databases *
185e0 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b  /.  yDbMask cook
185f0 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d  ieMask;  /* Bitm
18600 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65  ask of schema ve
18610 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73  rified databases
18620 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65   */.  int cookie
18630 47 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20 41 64  Goto;      /* Ad
18640 64 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f 74 6f  dress of OP_Goto
18650 20 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72 69 66   to cookie verif
18660 69 65 72 20 73 75 62 72 6f 75 74 69 6e 65 20 2a  ier subroutine *
18670 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61  /.  int cookieVa
18680 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41  lue[SQLITE_MAX_A
18690 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20  TTACHED+2];  /* 
186a0 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65  Values of cookie
186b0 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20  s to verify */. 
186c0 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20   int regRowid;  
186d0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
186e0 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20  r holding rowid 
186f0 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  of CREATE TABLE 
18700 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72  entry */.  int r
18710 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20  egRoot;         
18720 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
18730 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  ing root page nu
18740 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a  mber for new obj
18750 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  ects */.  int nM
18760 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f  axArg;         /
18770 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65  * Max args passe
18780 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69  d to user functi
18790 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61  on by sub-progra
187a0 6d 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e  m */.  Token con
187b0 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e  straintName;/* N
187c0 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74  ame of the const
187d0 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20  raint currently 
187e0 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a  being parsed */.
187f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
18800 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
18810 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63  .  int nTableLoc
18820 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  k;        /* Num
18830 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20  ber of locks in 
18840 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20  aTableLock */.  
18850 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c  TableLock *aTabl
18860 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72  eLock; /* Requir
18870 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66  ed table locks f
18880 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
18890 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  mode */.#endif. 
188a0 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41   AutoincInfo *pA
188b0 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  inc;  /* Informa
188c0 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49  tion about AUTOI
188d0 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72  NCREMENT counter
188e0 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72  s */..  /* Infor
188f0 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c  mation used whil
18900 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72  e coding trigger
18910 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20   programs. */.  
18920 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c  Parse *pToplevel
18930 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74  ;    /* Parse st
18940 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e  ructure for main
18950 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c   program (or NUL
18960 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  L) */.  Table *p
18970 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20  TriggerTab;  /* 
18980 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61  Table triggers a
18990 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66  re being coded f
189a0 6f 72 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e  or */.  double n
189b0 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20  QueryLoop;   /* 
189c0 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
189d0 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f   of iterations o
189e0 66 20 61 20 71 75 65 72 79 20 2a 2f 0a 20 20 75  f a query */.  u
189f0 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20  32 oldmask;     
18a00 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f      /* Mask of o
18a10 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ld.* columns ref
18a20 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32  erenced */.  u32
18a30 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20   newmask;       
18a40 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77    /* Mask of new
18a50 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
18a60 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54  enced */.  u8 eT
18a70 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20  riggerOp;       
18a80 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  /* TK_UPDATE, TK
18a90 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45  _INSERT or TK_DE
18aa0 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72  LETE */.  u8 eOr
18ab0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  conf;          /
18ac0 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
18ad0 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72  FLICT policy for
18ae0 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a   trigger steps *
18af0 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72  /.  u8 disableTr
18b00 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65  iggers;  /* True
18b10 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67   to disable trig
18b20 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 41 62  gers */..  /* Ab
18b30 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  ove is constant 
18b40 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f  between recursio
18b50 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65  ns.  Below is re
18b60 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61  set before and a
18b70 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72  fter.  ** each r
18b80 65 63 75 72 73 69 6f 6e 20 2a 2f 0a 0a 20 20 69  ecursion */..  i
18b90 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  nt nVar;        
18ba0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
18bb0 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
18bc0 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
18bd0 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
18be0 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20  int nzVar;      
18bf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
18c00 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ber of available
18c10 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b   slots in azVar[
18c20 5d 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69  ] */.  u8 explai
18c30 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
18c40 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
18c50 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20  EXPLAIN flag is 
18c60 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65  found on the que
18c70 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ry */.#ifndef SQ
18c80 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
18c90 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c  LTABLE.  u8 decl
18ca0 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20  areVtab;        
18cb0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e     /* True if in
18cc0 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63  side sqlite3_dec
18cd0 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20  lare_vtab() */. 
18ce0 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20   int nVtabLock; 
18cf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
18d00 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
18d10 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a  tables to lock *
18d20 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e  /.#endif.  int n
18d30 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20  Alias;          
18d40 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
18d50 66 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74  f aliased result
18d60 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   set columns */.
18d70 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
18d80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
18d90 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68  xpression tree h
18da0 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74  eight of current
18db0 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23   sub-select */.#
18dc0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
18dd0 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74  IT_EXPLAIN.  int
18de0 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20   iSelectId;     
18df0 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20         /* ID of 
18e00 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66  current select f
18e10 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
18e20 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74  t */.  int iNext
18e30 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20  SelectId;       
18e40 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62   /* Next availab
18e50 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72  le select ID for
18e60 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20   EXPLAIN output 
18e70 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72  */.#endif.  char
18e80 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20   **azVar;       
18e90 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
18ea0 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61  s to names of pa
18eb0 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64  rameters */.  Vd
18ec0 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20  be *pReprepare; 
18ed0 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65          /* VM be
18ee0 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28  ing reprepared (
18ef0 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
18f00 28 29 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 41  ()) */.  int *aA
18f10 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
18f20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 75     /* Register u
18f30 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 6c 69 61  sed to hold alia
18f40 73 65 64 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  sed result */.  
18f50 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
18f60 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  l;        /* All
18f70 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74   SQL text past t
18f80 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f  he last semicolo
18f90 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61  n parsed */.  Ta
18fa0 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20  ble *pNewTable; 
18fb0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62          /* A tab
18fc0 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75  le being constru
18fd0 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54  cted by CREATE T
18fe0 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65  ABLE */.  Trigge
18ff0 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20  r *pNewTrigger; 
19000 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75      /* Trigger u
19010 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62  nder construct b
19020 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47  y a CREATE TRIGG
19030 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ER */.  const ch
19040 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
19050 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72  ; /* The 6th par
19060 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41  ameter to db->xA
19070 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f  uth callbacks */
19080 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
19090 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ken;         /* 
190a0 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61  Token with unqua
190b0 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62  lified schema ob
190c0 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  ject name */.  T
190d0 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
190e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
190f0 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65  last token parse
19100 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  d */.#ifndef SQL
19110 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
19120 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41  TABLE.  Token sA
19130 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
19140 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65    /* Complete te
19150 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61  xt of a module a
19160 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62  rgument */.  Tab
19170 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
19180 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
19190 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62  r to virtual tab
191a0 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b  les needing lock
191b0 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
191c0 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
191d0 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  b;        /* Lis
191e0 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
191f0 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
19200 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
19210 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
19220 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69  iggerPrg;  /* Li
19230 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
19240 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 7d  ed triggers */.}
19250 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ;../*.** Return 
19260 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c  true if currentl
19270 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69  y inside an sqli
19280 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
19290 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64  () call..*/.#ifd
192a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
192b0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64  IRTUALTABLE.  #d
192c0 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
192d0 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20  _VTAB 0.#else.  
192e0 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
192f0 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d  RE_VTAB (pParse-
19300 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65  >declareVtab).#e
19310 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
19320 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
19330 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
19340 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72  re can be declar
19350 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e  ed on a stack an
19360 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76  d used.** to sav
19370 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74  e the Parse.zAut
19380 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73  hContext value s
19390 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
193a0 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e   restored later.
193b0 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43  .*/.struct AuthC
193c0 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74  ontext {.  const
193d0 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
193e0 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61  ext;   /* Put sa
193f0 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43  ved Parse.zAuthC
19400 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20  ontext here */. 
19410 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19430 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74  The Parse struct
19440 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ure */.};../*.**
19450 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20   Bitfield flags 
19460 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20  for P5 value in 
19470 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e  various opcodes.
19480 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c  .*/.#define OPFL
19490 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20  AG_NCHANGE      
194a0 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20   0x01    /* Set 
194b0 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43  to update db->nC
194c0 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65  hange */.#define
194d0 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
194e0 44 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a  D     0x02    /*
194f0 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
19500 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a  b->lastRowid */.
19510 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
19520 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30  SUPDATE      0x0
19530 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f  4    /* This OP_
19540 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c  Insert is an sql
19550 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
19560 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  ne OPFLAG_APPEND
19570 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20          0x08    
19580 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c  /* This is likel
19590 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
195a0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  d */.#define OPF
195b0 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
195c0 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79  T 0x10    /* Try
195d0 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b   to avoid a seek
195e0 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28   in BtreeInsert(
195f0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
19600 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 20  LAG_CLEARCACHE  
19610 20 20 30 78 32 30 20 20 20 20 2f 2a 20 43 6c 65    0x20    /* Cle
19620 61 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20  ar pseudo-table 
19630 63 61 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75  cache in OP_Colu
19640 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  mn */.#define OP
19650 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
19660 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
19670 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
19680 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a  d for length() *
19690 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
196a0 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30  _TYPEOFARG     0
196b0 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x80    /* OP_Col
196c0 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
196d0 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64  r typeof() */.#d
196e0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c  efine OPFLAG_BUL
196f0 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20  KCSR       0x01 
19700 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
19710 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c  used to open bul
19720 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66  k cursor */.#def
19730 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  ine OPFLAG_P2ISR
19740 45 47 20 20 20 20 20 20 20 30 78 30 32 20 20 20  EG       0x02   
19750 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65   /* P2 to OP_Ope
19760 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65  n** is a registe
19770 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66  r number */.#def
19780 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  ine OPFLAG_PERMU
19790 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  TE       0x01   
197a0 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20   /* OP_Compare: 
197b0 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74  use the permutat
197c0 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61  ion */../*. * Ea
197d0 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65  ch trigger prese
197e0 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
197f0 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f  se schema is sto
19800 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e  red as an instan
19810 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20  ce of. * struct 
19820 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20  Trigger. . *. * 
19830 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74  Pointers to inst
19840 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
19850 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72  Trigger are stor
19860 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a  ed in two ways..
19870 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72   * 1. In the "tr
19880 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62  igHash" hash tab
19890 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20  le (part of the 
198a0 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65  sqlite3* that re
198b0 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a  presents the . *
198c0 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54      database). T
198d0 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67  his allows Trigg
198e0 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f  er structures to
198f0 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79   be retrieved by
19900 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c   name.. * 2. All
19910 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69   triggers associ
19920 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67  ated with a sing
19930 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20  le table form a 
19940 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69  linked list, usi
19950 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65  ng the. *    pNe
19960 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72  xt member of str
19970 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70  uct Trigger. A p
19980 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69  ointer to the fi
19990 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
199a0 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20  he. *    linked 
199b0 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61  list is stored a
199c0 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22  s the "pTrigger"
199d0 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61   member of the a
199e0 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20  ssociated. *    
199f0 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a  struct Table.. *
19a00 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69  . * The "step_li
19a10 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74  st" member point
19a20 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  s to the first e
19a30 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b  lement of a link
19a40 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61  ed list. * conta
19a50 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74  ining the SQL st
19a60 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
19a70 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65  ed as the trigge
19a80 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73  r program.. */.s
19a90 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a  truct Trigger {.
19aa0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
19ab0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
19ac0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69   name of the tri
19ad0 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20  gger            
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
19af0 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20   char *table;   
19b00 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
19b10 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f  table or view to
19b20 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
19b30 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20  er applies */.  
19b40 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
19b50 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
19b60 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
19b70 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
19b80 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75  T         */.  u
19b90 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20  8 tr_tm;        
19ba0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
19bb0 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c   TRIGGER_BEFORE,
19bc0 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a   TRIGGER_AFTER *
19bd0 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b  /.  Expr *pWhen;
19be0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
19bf0 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
19c00 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
19c10 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a   (may be NULL) *
19c20 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c  /.  IdList *pCol
19c30 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49  umns;       /* I
19c40 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44  f this is an UPD
19c50 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c  ATE OF <column-l
19c60 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20  ist> trigger,.  
19c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c80 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c             the <
19c90 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20  column-list> is 
19ca0 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
19cb0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
19cc0 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65  ;        /* Sche
19cd0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
19ce0 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53  e trigger */.  S
19cf0 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d  chema *pTabSchem
19d00 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
19d10 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
19d20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67  table */.  Trigg
19d30 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73  erStep *step_lis
19d40 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20  t; /* Link list 
19d50 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  of trigger progr
19d60 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20  am steps        
19d70 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65       */.  Trigge
19d80 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  r *pNext;       
19d90 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65    /* Next trigge
19da0 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
19db0 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d  h the table */.}
19dc0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67  ;../*.** A trigg
19dd0 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42  er is either a B
19de0 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45  EFORE or an AFTE
19df0 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20  R trigger.  The 
19e00 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61  following consta
19e10 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65  nts.** determine
19e20 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49   which. .**.** I
19e30 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74  f there are mult
19e40 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79  iple triggers, y
19e50 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65  ou might of some
19e60 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65   BEFORE and some
19e70 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68   AFTER..** In th
19e80 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f  at cases, the co
19e90 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61  nstants below ca
19ea0 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68  n be ORed togeth
19eb0 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  er..*/.#define T
19ec0 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31  RIGGER_BEFORE  1
19ed0 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
19ee0 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20  _AFTER   2../*. 
19ef0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
19f00 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
19f10 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73  tep is used to s
19f20 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51  tore a single SQ
19f30 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74  L statement. * t
19f40 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66  hat is a part of
19f50 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72   a trigger-progr
19f60 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61  am. . *. * Insta
19f70 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
19f80 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73  riggerStep are s
19f90 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
19fa0 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c  y linked list (l
19fb0 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74  inked. * using t
19fc0 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65  he "pNext" membe
19fd0 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79  r) referenced by
19fe0 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   the "step_list"
19ff0 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a   member of the .
1a000 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74   * associated st
1a010 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73  ruct Trigger ins
1a020 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74  tance. The first
1a030 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
1a040 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20  linked list is. 
1a050 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70  * the first step
1a060 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d   of the trigger-
1a070 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20  program.. * . * 
1a080 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20  The "op" member 
1a090 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65  indicates whethe
1a0a0 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c  r this is a "DEL
1a0b0 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20  ETE", "INSERT", 
1a0c0 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22  "UPDATE" or. * "
1a0d0 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e  SELECT" statemen
1a0e0 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20  t. The meanings 
1a0f0 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d  of the other mem
1a100 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e  bers is determin
1a110 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61  ed by the . * va
1a120 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66  lue of "op" as f
1a130 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f  ollows:. *. * (o
1a140 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a  p == TK_INSERT).
1a150 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20   * orconf    -> 
1a160 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f  stores the ON CO
1a170 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
1a180 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e  . * pSelect   ->
1a190 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
1a1a0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53  NSERT INTO ... S
1a1b0 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d  ELECT ... statem
1a1c0 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
1a1d0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
1a1e0 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20  tores a pointer 
1a1f0 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  to the SELECT st
1a200 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69  atement. Otherwi
1a210 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67  se NULL.. * targ
1a220 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e  et    -> A token
1a230 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f   holding the quo
1a240 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1a250 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20  table to insert 
1a260 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69  into.. * pExprLi
1a270 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73  st -> If this is
1a280 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1a290 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73  ... VALUES ... s
1a2a0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
1a2b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1a2c0 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65  his stores value
1a2d0 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  s to be inserted
1a2e0 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
1a2f0 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d  .. * pIdList   -
1a300 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
1a310 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
1a320 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29  (<column-names>)
1a330 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20   VALUES ... . * 
1a340 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1a350 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69  tement, then thi
1a360 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c  s stores the col
1a370 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a  umn-names to be.
1a380 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1a390 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20  inserted into.. 
1a3a0 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44  *. * (op == TK_D
1a3b0 45 4c 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74  ELETE). * target
1a3c0 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
1a3d0 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65  olding the quote
1a3e0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1a3f0 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72  ble to delete fr
1a400 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  om.. * pWhere   
1a410 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
1a420 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45  ause of the DELE
1a430 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
1a440 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
1a450 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
1a460 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
1a470 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20  .. * . * (op == 
1a480 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61  TK_UPDATE). * ta
1a490 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b  rget    -> A tok
1a4a0 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71  en holding the q
1a4b0 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
1a4c0 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74  e table to updat
1a4d0 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57  e rows of.. * pW
1a4e0 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
1a4f0 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
1a500 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
1a510 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
1a520 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
1a530 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
1a540 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70  se NULL.. * pExp
1a550 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20  rList -> A list 
1a560 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74  of the columns t
1a570 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65  o update and the
1a580 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20   expressions to 
1a590 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20  update. *       
1a5a0 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20         them to. 
1a5b0 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74  See sqlite3Updat
1a5c0 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  e() documentatio
1a5d0 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a  n of "pChanges".
1a5e0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1a5f0 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a  argument.. * . *
1a600 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
1a610 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Step {.  u8 op; 
1a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a630 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
1a640 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
1a650 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45  _INSERT, TK_SELE
1a660 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e  CT */.  u8 orcon
1a670 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
1a680 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e  OE_Rollback etc.
1a690 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
1a6a0 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68  Trig;      /* Th
1a6b0 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74  e trigger that t
1a6c0 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61  his step is a pa
1a6d0 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63  rt of */.  Selec
1a6e0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
1a6f0 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65  /* SELECT statme
1a700 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53  nt or RHS of INS
1a710 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45  ERT INTO .. SELE
1a720 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65  CT ... */.  Toke
1a730 6e 20 74 61 72 67 65 74 3b 20 20 20 20 20 20 20  n target;       
1a740 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65   /* Target table
1a750 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44   for DELETE, UPD
1a760 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20  ATE, INSERT */. 
1a770 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
1a780 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
1a790 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45  RE clause for DE
1a7a0 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73  LETE or UPDATE s
1a7b0 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  teps */.  ExprLi
1a7c0 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f  st *pExprList; /
1a7d0 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72  * SET clause for
1a7e0 20 55 50 44 41 54 45 2e 20 20 56 41 4c 55 45 53   UPDATE.  VALUES
1a7f0 20 63 6c 61 75 73 65 20 66 6f 72 20 49 4e 53 45   clause for INSE
1a800 52 54 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  RT */.  IdList *
1a810 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20  pIdList;     /* 
1a820 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72  Column names for
1a830 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69   INSERT */.  Tri
1a840 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b  ggerStep *pNext;
1a850 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65    /* Next in the
1a860 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20   link-list */.  
1a870 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61  TriggerStep *pLa
1a880 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65  st;  /* Last ele
1a890 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73  ment in link-lis
1a8a0 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74  t. Valid for 1st
1a8b0 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b   elem only */.};
1a8c0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1a8d0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1a8e0 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
1a8f0 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
1a900 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a   sqliteFix....**
1a910 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65   routines as the
1a920 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65  y walk the parse
1a930 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61   tree to make da
1a940 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65  tabase reference
1a950 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20  s.** explicit.  
1a960 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
1a970 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78  ct DbFixer DbFix
1a980 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78  er;.struct DbFix
1a990 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
1a9a0 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68  arse;      /* Th
1a9b0 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78  e parsing contex
1a9c0 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67  t.  Error messag
1a9d0 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  es written here 
1a9e0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
1a9f0 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20  hema;    /* Fix 
1aa00 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63  items to this sc
1aa10 68 65 6d 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  hema */.  const 
1aa20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a  char *zDb;    /*
1aa30 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f   Make sure all o
1aa40 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61  bjects are conta
1aa50 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74  ined in this dat
1aa60 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74  abase */.  const
1aa70 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f   char *zType;  /
1aa80 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  * Type of the co
1aa90 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
1aaa0 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
1aab0 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b  s */.  const Tok
1aac0 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61  en *pName; /* Na
1aad0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  me of the contai
1aae0 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
1aaf0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
1ab00 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  .};../*.** An ob
1ab10 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61  jected used to a
1ab20 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65  ccumulate the te
1ab30 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77  xt of a string w
1ab40 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f  here we.** do no
1ab50 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
1ab60 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73  ow how big the s
1ab70 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e  tring will be in
1ab80 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
1ab90 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20  uct StrAccum {. 
1aba0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1abb0 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61        /* Optiona
1abc0 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c  l database for l
1abd0 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62  ookaside.  Can b
1abe0 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72  e NULL */.  char
1abf0 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20   *zBase;        
1ac00 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63   /* A base alloc
1ac10 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d  ation.  Not from
1ac20 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68   malloc. */.  ch
1ac30 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20  ar *zText;      
1ac40 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67     /* The string
1ac50 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61   collected so fa
1ac60 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61  r */.  int  nCha
1ac70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  r;          /* L
1ac80 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
1ac90 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
1aca0 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20  int  nAlloc;    
1acb0 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f       /* Amount o
1acc0 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  f space allocate
1acd0 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20  d in zText */.  
1ace0 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20  int  mxAlloc;   
1acf0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1ad00 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c  allowed string l
1ad10 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20  ength */.  u8   
1ad20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
1ad30 2f 2a 20 42 65 63 6f 6d 65 73 20 74 72 75 65 20  /* Becomes true 
1ad40 69 66 20 61 6e 79 20 6d 65 6d 6f 72 79 20 61 6c  if any memory al
1ad50 6c 6f 63 61 74 69 6f 6e 20 66 61 69 6c 73 20 2a  location fails *
1ad60 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c  /.  u8   useMall
1ad70 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e  oc;      /* 0: n
1ad80 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33  one,  1: sqlite3
1ad90 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71  DbMalloc,  2: sq
1ada0 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  lite3_malloc */.
1adb0 20 20 75 38 20 20 20 74 6f 6f 42 69 67 3b 20 20    u8   tooBig;  
1adc0 20 20 20 20 20 20 20 2f 2a 20 42 65 63 6f 6d 65         /* Become
1add0 73 20 74 72 75 65 20 69 66 20 73 74 72 69 6e 67  s true if string
1ade0 20 73 69 7a 65 20 65 78 63 65 65 64 73 20 6c 69   size exceeds li
1adf0 6d 69 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  mits */.};../*.*
1ae00 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  * A pointer to t
1ae10 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
1ae20 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69   used to communi
1ae30 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  cate information
1ae40 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  .** from sqlite3
1ae50 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73  Init and OP_Pars
1ae60 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65  eSchema into the
1ae70 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
1ae80 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  back..*/.typedef
1ae90 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69   struct {.  sqli
1aea0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1aeb0 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
1aec0 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
1aed0 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a  d */.  char **pz
1aee0 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72  ErrMsg;    /* Er
1aef0 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72  ror message stor
1af00 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74  ed here */.  int
1af10 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
1af20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64   /* 0 for main d
1af30 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20  atabase.  1 for 
1af40 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54  TEMP, 2.. for AT
1af50 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20  TACHed */.  int 
1af60 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
1af70 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73  /* Result code s
1af80 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20  tored here */.} 
1af90 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a  InitData;../*.**
1afa0 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   Structure conta
1afb0 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  ining global con
1afc0 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20  figuration data 
1afd0 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
1afe0 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ibrary..**.** Th
1aff0 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73  is structure als
1b000 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20  o contains some 
1b010 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  state informatio
1b020 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c  n..*/.struct Sql
1b030 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69  ite3Config {.  i
1b040 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20  nt bMemstat;    
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b060 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1b070 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73  le memory status
1b080 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d   */.  int bCoreM
1b090 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1b0a0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1b0b0 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d  to enable core m
1b0c0 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
1b0d0 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20   bFullMutex;    
1b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b0f0 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1b100 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a   full mutexing *
1b110 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69  /.  int bOpenUri
1b120 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b130 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1b140 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e   interpret filen
1b150 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a  ames as URIs */.
1b160 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20    int bUseCis;  
1b170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b180 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72      /* Use cover
1b190 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20  ing indices for 
1b1a0 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20  full-scans */.  
1b1b0 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20  int mxStrlen;   
1b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1d0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72    /* Maximum str
1b1e0 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ing length */.  
1b1f0 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b  int szLookaside;
1b200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b210 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
1b220 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69  kaside buffer si
1b230 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f  ze */.  int nLoo
1b240 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
1b250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1b260 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
1b270 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20  uffer count */. 
1b280 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
1b290 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20  hods m;         
1b2a0 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
1b2b0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1b2c0 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  n interface */. 
1b2d0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1b2e0 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20  ethods mutex;   
1b2f0 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
1b300 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20  mutex interface 
1b310 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61  */.  sqlite3_pca
1b320 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61  che_methods2 pca
1b330 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65  che2;  /* Low-le
1b340 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69  vel page-cache i
1b350 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f  nterface */.  vo
1b360 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20  id *pHeap;      
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b380 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20  /* Heap storage 
1b390 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
1b3a0 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b3c0 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20  Size of pHeap[] 
1b3d0 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20  */.  int mnReq, 
1b3e0 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20  mxReq;          
1b3f0 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e         /* Min an
1b400 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65  d max heap reque
1b410 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73  sts sizes */.  s
1b420 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
1b430 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
1b440 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 6d 6d 61 70   /* Maximum mmap
1b450 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65  () space per ope
1b460 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 76 6f 69 64  n file */.  void
1b470 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20 20   *pScratch;     
1b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b490 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20   Scratch memory 
1b4a0 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74  */.  int szScrat
1b4b0 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
1b4c0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1b4d0 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20 62  f each scratch b
1b4e0 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  uffer */.  int n
1b4f0 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
1b500 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b510 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63  Number of scratc
1b520 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76  h buffers */.  v
1b530 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20  oid *pPage;     
1b540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b550 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d   /* Page cache m
1b560 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
1b570 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  zPage;          
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b590 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67  Size of each pag
1b5a0 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  e in pPage[] */.
1b5b0 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20    int nPage;    
1b5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b5e0 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b   pages in pPage[
1b5f0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72  ] */.  int mxPar
1b600 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20  serStack;       
1b610 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69           /* maxi
1b620 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65  mum depth of the
1b630 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f   parser stack */
1b640 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63  .  int sharedCac
1b650 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20  heEnabled;      
1b660 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20       /* true if 
1b670 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
1b680 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 2f  e enabled */.  /
1b690 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68  * The above migh
1b6a0 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
1b6b0 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54   to non-zero.  T
1b6c0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65  he following nee
1b6d0 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a  d to always.  **
1b6e0 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65   initially be ze
1b6f0 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a  ro, however. */.
1b700 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20    int isInit;   
1b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b720 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1b730 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  r initialization
1b740 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f   has finished */
1b750 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73  .  int inProgres
1b760 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1b770 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69       /* True whi
1b780 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  le initializatio
1b790 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f  n in progress */
1b7a0 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e  .  int isMutexIn
1b7b0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1b7c0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1b7d0 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69  er mutexes are i
1b7e0 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1b7f0 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74  int isMallocInit
1b800 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b810 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1b820 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
1b830 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
1b840 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20  sPCacheInit;    
1b850 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b860 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
1b870 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
1b880 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
1b890 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b  tex *pInitMutex;
1b8a0 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78          /* Mutex
1b8b0 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
1b8c0 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f  _initialize() */
1b8d0 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d  .  int nRefInitM
1b8e0 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1b8f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b900 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74  f users of pInit
1b910 4d 75 74 65 78 20 2a 2f 0a 20 20 76 6f 69 64 20  Mutex */.  void 
1b920 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e  (*xLog)(void*,in
1b930 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20  t,const char*); 
1b940 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20  /* Function for 
1b950 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69  logging */.  voi
1b960 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20  d *pLogArg;     
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b980 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
1b990 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f  ent to xLog() */
1b9a0 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d  .  int bLocaltim
1b9b0 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20  eFault;         
1b9c0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1b9d0 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29  fail localtime()
1b9e0 20 63 61 6c 6c 73 20 2a 2f 0a 23 69 66 64 65 66   calls */.#ifdef
1b9f0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
1ba00 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53  QLLOG.  void(*xS
1ba10 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c  qllog)(void*,sql
1ba20 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1ba30 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
1ba40 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e  *pSqllogArg;.#en
1ba50 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f  dif.};../*.** Co
1ba60 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61  ntext pointer pa
1ba70 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67  ssed down throug
1ba80 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e  h the tree-walk.
1ba90 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65  .*/.struct Walke
1baa0 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78 70  r {.  int (*xExp
1bab0 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  rCallback)(Walke
1bac0 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20  r*, Expr*);     
1bad0 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
1bae0 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
1baf0 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61   int (*xSelectCa
1bb00 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
1bb10 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61  Select*);  /* Ca
1bb20 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
1bb30 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  Ts */.  Parse *p
1bb40 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
1bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb60 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74    /* Parser cont
1bb70 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77  ext.  */.  int w
1bb80 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20  alkerDepth;     
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bba0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1bbb0 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a  f subqueries */.
1bbc0 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20    union {       
1bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
1bbf0 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61  xtra data for ca
1bc00 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61  llback */.    Na
1bc10 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20  meContext *pNC; 
1bc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69           /* Nami
1bc40 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
1bc50 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
1bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bc80 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 2a 2f  Integer value */
1bc90 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53  .    SrcList *pS
1bca0 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  rcList;         
1bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcc0 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  /* FROM clause *
1bcd0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63  /.    struct Src
1bce0 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74  Count *pSrcCount
1bcf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1bd00 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c   /* Counting col
1bd10 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a  umn references *
1bd20 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20  /.  } u;.};../* 
1bd30 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74  Forward declarat
1bd40 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ions */.int sqli
1bd50 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b  te3WalkExpr(Walk
1bd60 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
1bd70 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72   sqlite3WalkExpr
1bd80 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78  List(Walker*, Ex
1bd90 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
1bda0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28  lite3WalkSelect(
1bdb0 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
1bdc0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1bdd0 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c  lkSelectExpr(Wal
1bde0 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
1bdf0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
1be00 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72  electFrom(Walker
1be10 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a  *, Select*);../*
1be20 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20  .** Return code 
1be30 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74  from the parse-t
1be40 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d  ree walking prim
1be50 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72  itives and their
1be60 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a  .** callbacks..*
1be70 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f  /.#define WRC_Co
1be80 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a  ntinue    0   /*
1be90 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69   Continue down i
1bea0 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a  nto children */.
1beb0 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e  #define WRC_Prun
1bec0 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f  e       1   /* O
1bed0 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74  mit children but
1bee0 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e   continue walkin
1bef0 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64  g siblings */.#d
1bf00 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20  efine WRC_Abort 
1bf10 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61        2   /* Aba
1bf20 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61  ndon the tree wa
1bf30 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  lk */../*.** Ass
1bf40 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73  uming zIn points
1bf50 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1bf60 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68  te of a UTF-8 ch
1bf70 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61  aracter,.** adva
1bf80 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74  nce zIn to point
1bf90 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1bfa0 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55  te of the next U
1bfb0 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a  TF-8 character..
1bfc0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
1bfd0 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29  E_SKIP_UTF8(zIn)
1bfe0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1bff0 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66            \.  if
1c000 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78  ( (*(zIn++))>=0x
1c010 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20  c0 ){           
1c020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c030 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20     \.    while( 
1c040 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30  (*zIn & 0xc0)==0
1c050 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20  x80 ){ zIn++; } 
1c060 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1c070 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
1c080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0a0 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20       \.}../*.** 
1c0b0 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50  The SQLITE_*_BKP
1c0c0 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62  T macros are sub
1c0d0 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65  stitutes for the
1c0e0 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74   error codes wit
1c0f0 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61  h.** the same na
1c100 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74  me but without t
1c110 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e  he _BKPT suffix.
1c120 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69    These macros i
1c130 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65  nvoke.** routine
1c140 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68  s that report th
1c150 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e  e line-number on
1c160 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72   which the error
1c170 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75   originated.** u
1c180 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67  sing sqlite3_log
1c190 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65  ().  The routine
1c1a0 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61  s also provide a
1c1b0 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63   convenient plac
1c1c0 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65  e.** to set a de
1c1d0 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e  bugger breakpoin
1c1e0 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
1c1f0 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e  3CorruptError(in
1c200 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  t);.int sqlite3M
1c210 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b  isuseError(int);
1c220 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74  .int sqlite3Cant
1c230 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a  openError(int);.
1c240 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
1c250 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69  ORRUPT_BKPT sqli
1c260 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
1c270 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
1c280 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  e SQLITE_MISUSE_
1c290 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75  BKPT sqlite3Misu
1c2a0 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  seError(__LINE__
1c2b0 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
1c2c0 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73  _CANTOPEN_BKPT s
1c2d0 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
1c2e0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a  ror(__LINE__)...
1c2f0 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
1c300 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
1c310 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
1c320 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
1c330 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
1c340 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
1c350 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
1c360 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
1c370 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c  o all.** the SQL
1c380 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20  ITE_ENABLE_FTS4 
1c390 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61  macro to serve a
1c3a0 73 20 61 6e 20 61 6c 69 73 73 65 20 66 6f 72 20  s an alisse for 
1c3b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1c3c0 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
1c3d0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1c3e0 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
1c3f0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1c400 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
1c410 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1c420 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S3.#endif../*.**
1c430 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61   The ctype.h hea
1c440 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f  der is needed fo
1c450 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74  r non-ASCII syst
1c460 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  ems.  It is also
1c470 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54  .** needed by FT
1c480 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20  S3 when FTS3 is 
1c490 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
1c4a0 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f  amalgamation..*/
1c4b0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1c4c0 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c  LITE_ASCII) || \
1c4d0 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
1c4e0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1c4f0 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
1c500 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
1c510 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74  )).# include <ct
1c520 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  ype.h>.#endif../
1c530 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1c540 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20  ng macros mimic 
1c550 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
1c560 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74  rary functions t
1c570 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73  oupper(),.** iss
1c580 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28  pace(), isalnum(
1c590 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64  ), isdigit() and
1c5a0 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73   isxdigit(), res
1c5b0 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a  pectively. The.*
1c5c0 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e  * sqlite version
1c5d0 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
1c5e0 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
1c5f0 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
1c600 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  locale..*/.#ifde
1c610 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23  f SQLITE_ASCII.#
1c620 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1c630 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26  oupper(x)  ((x)&
1c640 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  ~(sqlite3CtypeMa
1c650 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
1c660 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64  )(x)]&0x20)).# d
1c670 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
1c680 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74  pace(x)   (sqlit
1c690 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1c6a0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1c6b0 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x01).# define sq
1c6c0 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
1c6d0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1c6e0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1c6f0 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64  r)(x)]&0x06).# d
1c700 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1c710 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74  lpha(x)   (sqlit
1c720 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1c730 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1c740 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x02).# define sq
1c750 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
1c760 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1c770 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1c780 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64  r)(x)]&0x04).# d
1c790 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
1c7a0 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74  digit(x)  (sqlit
1c7b0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1c7c0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1c7d0 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x08).# define sq
1c7e0 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
1c7f0 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54    (sqlite3UpperT
1c800 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
1c810 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73   char)(x)]).#els
1c820 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1c830 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74  e3Toupper(x)   t
1c840 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64  oupper((unsigned
1c850 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1c860 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
1c870 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28  ce(x)   isspace(
1c880 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1c890 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1c8a0 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
1c8b0 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e   isalnum((unsign
1c8c0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1c8d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1c8e0 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68  lpha(x)   isalph
1c8f0 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  a((unsigned char
1c900 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1c910 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
1c920 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69     isdigit((unsi
1c930 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1c940 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c950 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64  sxdigit(x)  isxd
1c960 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
1c970 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1c980 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
1c990 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75  (x)   tolower((u
1c9a0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1c9b0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
1c9c0 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f  Internal functio
1c9d0 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a  n prototypes.*/.
1c9e0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
1c9f0 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  trICmp sqlite3_s
1ca00 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74  tricmp.int sqlit
1ca10 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74  e3Strlen30(const
1ca20 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
1ca30 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
1ca40 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
1ca50 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
1ca60 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
1ca70 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
1ca80 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
1ca90 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
1caa0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (int);.void *sql
1cab0 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69  ite3MallocZero(i
1cac0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1cad0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
1cae0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76  qlite3*, int);.v
1caf0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
1cb00 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
1cb10 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71  , int);.char *sq
1cb20 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71  lite3DbStrDup(sq
1cb30 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1cb40 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
1cb50 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69  e3DbStrNDup(sqli
1cb60 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1cb70 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1cb80 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69  lite3Realloc(voi
1cb90 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  d*, int);.void *
1cba0 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
1cbb0 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a  OrFree(sqlite3 *
1cbc0 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a  , void *, int);.
1cbd0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
1cbe0 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a  ealloc(sqlite3 *
1cbf0 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a  , void *, int);.
1cc00 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72  void sqlite3DbFr
1cc10 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ee(sqlite3*, voi
1cc20 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
1cc30 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a  MallocSize(void*
1cc40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  );.int sqlite3Db
1cc50 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74  MallocSize(sqlit
1cc60 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
1cc70 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63  d *sqlite3Scratc
1cc80 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  hMalloc(int);.vo
1cc90 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63  id sqlite3Scratc
1cca0 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  hFree(void*);.vo
1ccb0 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d  id *sqlite3PageM
1ccc0 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
1ccd0 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65   sqlite3PageFree
1cce0 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
1ccf0 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75  lite3MemSetDefau
1cd00 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  lt(void);.void s
1cd10 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c  qlite3BenignMall
1cd20 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29  ocHooks(void (*)
1cd30 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29  (void), void (*)
1cd40 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c  (void));.int sql
1cd50 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75  ite3HeapNearlyFu
1cd60 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a  ll(void);../*.**
1cd70 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   On systems with
1cd80 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61   ample stack spa
1cd90 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70  ce and that supp
1cda0 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61  ort alloca(), ma
1cdb0 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c  ke.** use of all
1cdc0 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20  oca() to obtain 
1cdd0 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20  space for large 
1cde0 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74  automatic object
1cdf0 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a  s.  By default,.
1ce00 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  ** obtain space 
1ce10 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a  from malloc()..*
1ce20 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28  *.** The alloca(
1ce30 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20  ) routine never 
1ce40 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54  returns NULL.  T
1ce50 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63  his will cause c
1ce60 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61  ode paths.** tha
1ce70 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69  t deal with sqli
1ce80 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20  te3StackAlloc() 
1ce90 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75  failures to be u
1cea0 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23  nreachable..*/.#
1ceb0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
1cec0 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65  _ALLOCA.# define
1ced0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
1cee0 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c  ocRaw(D,N)   all
1cef0 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20  oca(N).# define 
1cf00 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
1cf10 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73  cZero(D,N)  mems
1cf20 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c  et(alloca(N), 0,
1cf30 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   N).# define sql
1cf40 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
1cf50 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65 0a  P)       .#else.
1cf60 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1cf70 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
1cf80 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  N)   sqlite3DbMa
1cf90 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64  llocRaw(D,N).# d
1cfa0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1cfb0 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
1cfc0 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
1cfd0 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66  cZero(D,N).# def
1cfe0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1cff0 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20  Free(D,P)       
1d000 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c  sqlite3DbFree(D,
1d010 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  P).#endif..#ifde
1d020 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1d030 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71  MEMSYS3.const sq
1d040 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
1d050 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
1d060 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23  Memsys3(void);.#
1d070 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
1d080 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
1d090 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S5.const sqlite3
1d0a0 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
1d0b0 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
1d0c0 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s5(void);.#endif
1d0d0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
1d0e0 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
1d0f0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1d100 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
1d110 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
1d120 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
1d130 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
1d140 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
1d150 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
1d160 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
1d170 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
1d180 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
1d190 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
1d1a0 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
1d1b0 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
1d1c0 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
1d1d0 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65  lite3StatusValue
1d1e0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
1d1f0 74 65 33 53 74 61 74 75 73 41 64 64 28 69 6e 74  te3StatusAdd(int
1d200 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1d210 69 74 65 33 53 74 61 74 75 73 53 65 74 28 69 6e  ite3StatusSet(in
1d220 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65  t, int);..#ifnde
1d230 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
1d240 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69  OATING_POINT.  i
1d250 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  nt sqlite3IsNaN(
1d260 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23  double);.#else.#
1d270 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1d280 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69  sNaN(X)  0.#endi
1d290 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  f..void sqlite3V
1d2a0 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
1d2b0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
1d2c0 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23  ar*, va_list);.#
1d2d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1d2e0 49 54 5f 54 52 41 43 45 0a 76 6f 69 64 20 73 71  IT_TRACE.void sq
1d2f0 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72  lite3XPrintf(Str
1d300 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68  Accum*, const ch
1d310 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
1d320 66 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  f.char *sqlite3M
1d330 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
1d340 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
1d350 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1d360 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  VMPrintf(sqlite3
1d370 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  *,const char*, v
1d380 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a 73  a_list);.char *s
1d390 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28 73  qlite3MAppendf(s
1d3a0 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63 6f  qlite3*,char*,co
1d3b0 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
1d3c0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1d3d0 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69  TE_TEST) || defi
1d3e0 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
1d3f0 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
1d400 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73  DebugPrintf(cons
1d410 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23  t char*, ...);.#
1d420 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
1d430 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
1d440 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65   void *sqlite3Te
1d450 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73  stTextToPtr(cons
1d460 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
1d470 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72 6d  ../* Output form
1d480 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c 49 54  atting for SQLIT
1d490 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50 4c 41  E_TESTCTRL_EXPLA
1d4a0 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  IN */.#if define
1d4b0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1d4c0 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a 20 20  TREE_EXPLAIN).  
1d4d0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
1d4e0 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a 29 3b  ainBegin(Vdbe*);
1d4f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
1d500 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56 64 62  xplainPrintf(Vdb
1d510 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
1d520 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73 71   ...);.  void sq
1d530 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c 28 56  lite3ExplainNL(V
1d540 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  dbe*);.  void sq
1d550 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75 73 68  lite3ExplainPush
1d560 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
1d570 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 6f  sqlite3ExplainPo
1d580 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  p(Vdbe*);.  void
1d590 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46   sqlite3ExplainF
1d5a0 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a 20 20  inish(Vdbe*);.  
1d5b0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
1d5c0 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65 2a 2c  ainSelect(Vdbe*,
1d5d0 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69   Select*);.  voi
1d5e0 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1d5f0 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78 70 72  Expr(Vdbe*, Expr
1d600 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1d610 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73  e3ExplainExprLis
1d620 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c 69 73  t(Vdbe*, ExprLis
1d630 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  t*);.  const cha
1d640 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65 45 78  r *sqlite3VdbeEx
1d650 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65 2a 29  planation(Vdbe*)
1d660 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
1d670 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42   sqlite3ExplainB
1d680 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
1d690 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53   sqlite3ExplainS
1d6a0 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64 65 66  elect(A,B).# def
1d6b0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
1d6c0 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20 64 65  inExpr(A,B).# de
1d6d0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
1d6e0 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c 42 29  ainExprList(A,B)
1d6f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1d700 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 58  3ExplainFinish(X
1d710 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1d720 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f  e3VdbeExplanatio
1d730 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a  n(X) 0.#endif...
1d740 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
1d750 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
1d760 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
1d770 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
1d780 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
1d790 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
1d7a0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20  har*, ...);.int 
1d7b0 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63  sqlite3Dequote(c
1d7c0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
1d7d0 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f  e3KeywordCode(co
1d7e0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
1d7f0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
1d800 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50  lite3RunParser(P
1d810 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
1d820 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f  r*, char **);.vo
1d830 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68  id sqlite3Finish
1d840 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a  Coding(Parse*);.
1d850 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
1d860 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76  mpReg(Parse*);.v
1d870 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
1d880 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  seTempReg(Parse*
1d890 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
1d8a0 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50  e3GetTempRange(P
1d8b0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
1d8c0 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
1d8d0 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
1d8e0 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
1d8f0 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52  qlite3ClearTempR
1d900 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b  egCache(Parse*);
1d910 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
1d920 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  prAlloc(sqlite3*
1d930 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e  ,int,const Token
1d940 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  *,int);.Expr *sq
1d950 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65  lite3Expr(sqlite
1d960 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
1d970 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1d980 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72  3ExprAttachSubtr
1d990 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ees(sqlite3*,Exp
1d9a0 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  r*,Expr*,Expr*);
1d9b0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45  .Expr *sqlite3PE
1d9c0 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  xpr(Parse*, int,
1d9d0 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63   Expr*, Expr*, c
1d9e0 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78  onst Token*);.Ex
1d9f0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
1da00 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  nd(sqlite3*,Expr
1da10 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  *, Expr*);.Expr 
1da20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63  *sqlite3ExprFunc
1da30 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  tion(Parse*,Expr
1da40 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
1da50 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1da60 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28  AssignVarNumber(
1da70 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
1da80 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1da90 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
1daa0 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73   Expr*);.ExprLis
1dab0 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
1dac0 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
1dad0 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29  ExprList*,Expr*)
1dae0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1daf0 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
1db00 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
1db10 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
1db20 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
1db30 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
1db40 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61  xprList*,ExprSpa
1db50 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
1db60 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
1db70 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
1db80 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1db90 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  3Init(sqlite3*, 
1dba0 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
1dbb0 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
1dbc0 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61  (void*, int, cha
1dbd0 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f  r**, char**);.vo
1dbe0 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
1dbf0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1dc00 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
1dc10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1dc20 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
1dc30 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74  Connection(sqlit
1dc40 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
1dc50 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
1dc60 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
1dc70 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c  void sqlite3Coll
1dc80 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61  apseDatabaseArra
1dc90 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  y(sqlite3*);.voi
1dca0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61  d sqlite3BeginPa
1dcb0 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  rse(Parse*,int);
1dcc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
1dcd0 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67  mitInternalChang
1dce0 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61  es(sqlite3*);.Ta
1dcf0 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75  ble *sqlite3Resu
1dd00 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61  ltSetOfSelect(Pa
1dd10 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76  rse*,Select*);.v
1dd20 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d  oid sqlite3OpenM
1dd30 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65  asterTable(Parse
1dd40 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73   *, int);.void s
1dd50 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
1dd60 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1dd70 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
1dd80 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
1dd90 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
1dda0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
1ddb0 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
1ddc0 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
1ddd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1dde0 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
1ddf0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
1de00 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1de10 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
1de20 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
1de30 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
1de40 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
1de50 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  lumnType(Parse*,
1de60 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1de70 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
1de80 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
1de90 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
1dea0 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
1deb0 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
1dec0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ded0 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
1dee0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65  Token*,Token*,Se
1def0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
1df00 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73  te3ParseUri(cons
1df10 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
1df20 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  ar*,unsigned int
1df30 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1df40 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
1df50 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72  fs**,char**,char
1df60 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c   **);.Btree *sql
1df70 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65  ite3DbNameToBtre
1df80 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
1df90 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
1dfa0 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72  ite3CodeOnce(Par
1dfb0 73 65 20 2a 29 3b 0a 0a 42 69 74 76 65 63 20 2a  se *);..Bitvec *
1dfc0 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65  sqlite3BitvecCre
1dfd0 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71  ate(u32);.int sq
1dfe0 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28  lite3BitvecTest(
1dff0 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
1e000 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
1e010 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
1e020 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1e030 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
1e040 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
1e050 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
1e060 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
1e070 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
1e080 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
1e090 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  c*);.int sqlite3
1e0a0 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73  BitvecBuiltinTes
1e0b0 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f  t(int,int*);..Ro
1e0c0 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
1e0d0 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
1e0e0 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65  , void*, unsigne
1e0f0 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  d int);.void sql
1e100 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
1e110 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73  RowSet*);.void s
1e120 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
1e130 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29  rt(RowSet*, i64)
1e140 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
1e150 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c  SetTest(RowSet*,
1e160 20 75 38 20 69 42 61 74 63 68 2c 20 69 36 34 29   u8 iBatch, i64)
1e170 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
1e180 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c  SetNext(RowSet*,
1e190 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71   i64*);..void sq
1e1a0 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28  lite3CreateView(
1e1b0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
1e1c0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65  ken*,Token*,Sele
1e1d0 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23  ct*,int,int);..#
1e1e0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1e1f0 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c  TE_OMIT_VIEW) ||
1e200 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1e210 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1e220 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  LE).  int sqlite
1e230 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
1e240 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  mes(Parse*,Table
1e250 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
1e260 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  ne sqlite3ViewGe
1e270 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42  tColumnNames(A,B
1e280 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  ) 0.#endif..void
1e290 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c   sqlite3DropTabl
1e2a0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
1e2b0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
1e2c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44  oid sqlite3CodeD
1e2d0 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
1e2e0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1e2f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e300 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
1e310 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
1e320 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1e330 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
1e340 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
1e350 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
1e360 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  n(Parse *pParse)
1e370 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1e380 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
1e390 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
1e3a0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1e3b0 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
1e3c0 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64  mentBegin(X).# d
1e3d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
1e3e0 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29  oincrementEnd(X)
1e3f0 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
1e400 74 65 33 43 6f 64 65 43 6f 72 6f 75 74 69 6e 65  te3CodeCoroutine
1e410 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
1e420 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a  , SelectDest*);.
1e430 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65  void sqlite3Inse
1e440 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rt(Parse*, SrcLi
1e450 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
1e460 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a  Select*, IdList*
1e470 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1e480 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61  lite3ArrayAlloca
1e490 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64  te(sqlite3*,void
1e4a0 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29  *,int,int*,int*)
1e4b0 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
1e4c0 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71  3IdListAppend(sq
1e4d0 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c  lite3*, IdList*,
1e4e0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
1e4f0 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78  lite3IdListIndex
1e500 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  (IdList*,const c
1e510 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  har*);.SrcList *
1e520 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e  sqlite3SrcListEn
1e530 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20  large(sqlite3*, 
1e540 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
1e550 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
1e560 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
1e570 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  nd(sqlite3*, Src
1e580 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
1e590 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20  oken*);.SrcList 
1e5a0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
1e5b0 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61  ppendFromTerm(Pa
1e5c0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1e5d0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a  Token*, Token*,.
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e600 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65        Token*, Se
1e610 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64  lect*, Expr*, Id
1e620 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
1e630 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78  ite3SrcListIndex
1e640 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72  edBy(Parse *, Sr
1e650 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a  cList *, Token *
1e660 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
1e670 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61  dexedByLookup(Pa
1e680 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72  rse *, struct Sr
1e690 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76  cList_item *);.v
1e6a0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
1e6b0 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
1e6c0 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
1e6d0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73  sqlite3SrcListAs
1e6e0 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73  signCursors(Pars
1e6f0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76  e*, SrcList*);.v
1e700 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73  oid sqlite3IdLis
1e710 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
1e720 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
1e730 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44   sqlite3SrcListD
1e740 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
1e750 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78  SrcList*);.Index
1e760 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49   *sqlite3CreateI
1e770 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65  ndex(Parse*,Toke
1e780 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73  n*,Token*,SrcLis
1e790 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  t*,ExprList*,int
1e7a0 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20  ,Token*,.       
1e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7c0 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 2c 20 69 6e   Token*, int, in
1e7d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e7e0 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
1e7f0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
1e800 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
1e810 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
1e820 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
1e830 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
1e840 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
1e850 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
1e860 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
1e870 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e890 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
1e8a0 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  u16,Expr*,Expr*)
1e8b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
1e8c0 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74  lectDelete(sqlit
1e8d0 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54  e3*, Select*);.T
1e8e0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63  able *sqlite3Src
1e8f0 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65  ListLookup(Parse
1e900 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
1e910 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f  t sqlite3IsReadO
1e920 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  nly(Parse*, Tabl
1e930 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
1e940 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
1e950 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72  Parse*, int iCur
1e960 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65  , int iDb, Table
1e970 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66  *, int);.#if def
1e980 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1e990 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
1e9a0 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69  _LIMIT) && !defi
1e9b0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1e9c0 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a  SUBQUERY).Expr *
1e9d0 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72  sqlite3LimitWher
1e9e0 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  e(Parse*,SrcList
1e9f0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
1ea00 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68  *,Expr*,Expr*,ch
1ea10 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
1ea20 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
1ea30 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
1ea40 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
1ea50 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
1ea60 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1ea70 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
1ea80 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
1ea90 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
1eaa0 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
1eab0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
1eac0 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
1ead0 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
1eae0 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
1eaf0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
1eb00 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1eb10 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65  eGetColumn(Parse
1eb20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1eb30 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76  int, int, u8);.v
1eb40 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1eb50 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61  odeGetColumnOfTa
1eb60 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ble(Vdbe*, Table
1eb70 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1eb80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1eb90 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73  xprCodeMove(Pars
1eba0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1ebb0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1ebc0 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50  ExprCacheStore(P
1ebd0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
1ebe0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1ebf0 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68  te3ExprCachePush
1ec00 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1ec10 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
1ec20 6f 70 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  op(Parse*, int);
1ec30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1ec40 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72  rCacheRemove(Par
1ec50 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
1ec60 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1ec70 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65  CacheClear(Parse
1ec80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ec90 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74  ExprCacheAffinit
1eca0 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20  yChange(Parse*, 
1ecb0 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
1ecc0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50  qlite3ExprCode(P
1ecd0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1ece0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
1ecf0 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
1ed00 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
1ed10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1ed20 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
1ed30 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
1ed40 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1ed50 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
1ed60 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
1ed70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1ed80 70 72 43 6f 64 65 43 6f 6e 73 74 61 6e 74 73 28  prCodeConstants(
1ed90 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
1eda0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1edb0 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73  odeExprList(Pars
1edc0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
1edd0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1ede0 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65  qlite3ExprIfTrue
1edf0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1ee00 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1ee10 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
1ee20 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  se(Parse*, Expr*
1ee30 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
1ee40 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54  le *sqlite3FindT
1ee50 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  able(sqlite3*,co
1ee60 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
1ee70 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a   char*);.Table *
1ee80 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
1ee90 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  le(Parse*,int is
1eea0 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a  View,const char*
1eeb0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
1eec0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
1eed0 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61  cateTableItem(Pa
1eee0 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c  rse*,int isView,
1eef0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
1ef00 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  tem *);.Index *s
1ef10 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
1ef20 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1ef30 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
1ef40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ef50 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
1ef60 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e  able(sqlite3*,in
1ef70 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
1ef80 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
1ef90 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
1efa0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
1efb0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
1efc0 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50   sqlite3Vacuum(P
1efd0 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
1efe0 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61  te3RunVacuum(cha
1eff0 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a  r**, sqlite3*);.
1f000 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d  char *sqlite3Nam
1f010 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74  eFromToken(sqlit
1f020 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
1f030 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d  t sqlite3ExprCom
1f040 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72  pare(Expr*, Expr
1f050 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1f060 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
1f070 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
1f080 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
1f090 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
1f0a0 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
1f0b0 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
1f0c0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
1f0d0 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
1f0e0 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
1f0f0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1f100 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69  3FunctionUsesThi
1f110 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c  sSrc(Expr*, SrcL
1f120 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c  ist*);.Vdbe *sql
1f130 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73  ite3GetVdbe(Pars
1f140 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1f150 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
1f160 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
1f170 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
1f180 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
1f190 71 6c 69 74 65 33 50 72 6e 67 52 65 73 65 74 53  qlite3PrngResetS
1f1a0 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
1f1b0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
1f1c0 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  All(sqlite3*,int
1f1d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1f1e0 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
1f1f0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
1f200 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
1f210 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28  rifyNamedSchema(
1f220 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
1f230 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73  ar *zDb);.void s
1f240 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73  qlite3BeginTrans
1f250 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  action(Parse*, i
1f260 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1f270 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69  3CommitTransacti
1f280 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  on(Parse*);.void
1f290 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
1f2a0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
1f2b0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1f2c0 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65  3Savepoint(Parse
1f2d0 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b  *, int, Token*);
1f2e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f  .void sqlite3Clo
1f2f0 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c  seSavepoints(sql
1f300 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ite3 *);.void sq
1f310 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41  lite3LeaveMutexA
1f320 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71  ndCloseZombie(sq
1f330 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
1f340 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
1f350 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  nt(Expr*);.int s
1f360 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
1f370 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72  tantNotJoin(Expr
1f380 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1f390 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46  xprIsConstantOrF
1f3a0 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a  unction(Expr*);.
1f3b0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
1f3c0 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20  sInteger(Expr*, 
1f3d0 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
1f3e0 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28  e3ExprCanBeNull(
1f3f0 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f  const Expr*);.vo
1f400 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
1f410 64 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62  deIsNullJump(Vdb
1f420 65 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c  e*, const Expr*,
1f430 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
1f440 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73  sqlite3ExprNeeds
1f450 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  NoAffinityChange
1f460 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68  (const Expr*, ch
1f470 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
1f480 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68  IsRowid(const ch
1f490 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
1f4a0 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c  e3GenerateRowDel
1f4b0 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
1f4c0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1f4d0 74 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e  t, Trigger *, in
1f4e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f4f0 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78  GenerateRowIndex
1f500 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54  Delete(Parse*, T
1f510 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a  able*, int, int*
1f520 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
1f530 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50  nerateIndexKey(P
1f540 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
1f550 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
1f560 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
1f570 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65  ateConstraintChe
1f580 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  cks(Parse*,Table
1f590 2a 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20  *,int,int,.     
1f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5c0 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
1f5d0 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64  ,int,int*);.void
1f5e0 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65   sqlite3Complete
1f5f0 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a  Insertion(Parse*
1f600 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1f610 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20 69  nt, int*, int, i
1f620 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1f630 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
1f640 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
1f650 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1f660 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f670 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
1f680 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
1f690 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1f6a0 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
1f6b0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1f6c0 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
1f6d0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1f6e0 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
1f6f0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
1f700 2c 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 45  , char*, int);.E
1f710 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
1f720 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
1f730 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73  r*,int);.ExprLis
1f740 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
1f750 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  stDup(sqlite3*,E
1f760 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53  xprList*,int);.S
1f770 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
1f780 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  rcListDup(sqlite
1f790 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29  3*,SrcList*,int)
1f7a0 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
1f7b0 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74  3IdListDup(sqlit
1f7c0 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65  e3*,IdList*);.Se
1f7d0 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
1f7e0 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  ectDup(sqlite3*,
1f7f0 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f  Select*,int);.vo
1f800 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65  id sqlite3FuncDe
1f810 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48  fInsert(FuncDefH
1f820 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b  ash*, FuncDef*);
1f830 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
1f840 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71  3FindFunction(sq
1f850 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1f860 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38  r*,int,int,u8,u8
1f870 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1f880 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75  egisterBuiltinFu
1f890 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
1f8a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1f8b0 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46  egisterDateTimeF
1f8c0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
1f8d0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
1f8e0 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69  sterGlobalFuncti
1f8f0 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ons(void);.int s
1f900 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
1f910 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  kOk(sqlite3*);.i
1f920 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
1f930 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
1f940 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
1f950 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69  lite3ChangeCooki
1f960 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  e(Parse*, int);.
1f970 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1f980 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
1f990 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1f9a0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
1f9b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74  .void sqlite3Mat
1f9c0 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72  erializeView(Par
1f9d0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
1f9e0 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66  r*, int);.#endif
1f9f0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
1fa00 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
1fa10 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
1fa20 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  nTrigger(Parse*,
1fa30 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69   Token*,Token*,i
1fa40 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53  nt,int,IdList*,S
1fa50 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  rcList*,.       
1fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa70 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69      Expr*,int, i
1fa80 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
1fa90 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72  te3FinishTrigger
1faa0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
1fab0 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
1fac0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
1fad0 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
1fae0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
1faf0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1fb00 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50  DropTriggerPtr(P
1fb10 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29  arse*, Trigger*)
1fb20 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
1fb30 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
1fb40 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
1fb50 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
1fb60 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a  *, int *pMask);.
1fb70 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
1fb80 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61  e3TriggerList(Pa
1fb90 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  rse *, Table *);
1fba0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
1fbb0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61  odeRowTrigger(Pa
1fbc0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  rse*, Trigger *,
1fbd0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
1fbe0 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20   int, Table *,. 
1fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc00 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
1fc10 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
1fc20 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
1fc30 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61  TriggerDirect(Pa
1fc40 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a  rse *, Trigger *
1fc50 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
1fc60 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
1fc70 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67  d sqliteViewTrig
1fc80 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62  gers(Parse*, Tab
1fc90 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  le*, Expr*, int,
1fca0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76   ExprList*);.  v
1fcb0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
1fcc0 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c  eTriggerStep(sql
1fcd0 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74  ite3*, TriggerSt
1fce0 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ep*);.  TriggerS
1fcf0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
1fd00 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71  gerSelectStep(sq
1fd10 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b  lite3*,Select*);
1fd20 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1fd30 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e  sqlite3TriggerIn
1fd40 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33  sertStep(sqlite3
1fd50 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  *,Token*, IdList
1fd60 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd80 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 4c             ExprL
1fd90 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 75 38 29  ist*,Select*,u8)
1fda0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
1fdb0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55  *sqlite3TriggerU
1fdc0 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65  pdateStep(sqlite
1fdd0 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  3*,Token*,ExprLi
1fde0 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b  st*, Expr*, u8);
1fdf0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1fe00 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65  sqlite3TriggerDe
1fe10 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  leteStep(sqlite3
1fe20 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29  *,Token*, Expr*)
1fe30 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1fe40 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
1fe50 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a  lite3*, Trigger*
1fe60 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1fe70 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
1fe80 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
1fe90 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
1fea0 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
1feb0 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50  TriggerColmask(P
1fec0 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45  arse*,Trigger*,E
1fed0 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74  xprList*,int,int
1fee0 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20  ,Table*,int);.# 
1fef0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
1ff00 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  rseToplevel(p) (
1ff10 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f  (p)->pToplevel ?
1ff20 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20   (p)->pToplevel 
1ff30 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64  : (p)).#else.# d
1ff40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
1ff50 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
1ff60 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
1ff70 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
1ff80 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
1ff90 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
1ffa0 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
1ffb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
1ffc0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
1ffd0 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
1ffe0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
1fff0 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
20000 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
20010 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
20020 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
20030 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
20040 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20050 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
20060 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
20070 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
20080 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
20090 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
200a0 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
200b0 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
200c0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
200d0 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
200e0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
200f0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
20100 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
20110 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
20120 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
20130 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
20140 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
20150 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
20160 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
20170 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
20180 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
20190 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
201a0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
201b0 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
201c0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
201d0 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
201e0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
201f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
20200 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
20210 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
20220 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
20230 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
20240 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
20250 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
20260 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
20270 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
20280 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
20290 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
202a0 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
202b0 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
202c0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
202d0 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
202e0 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
202f0 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
20300 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
20310 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
20320 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
20330 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
20340 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
20350 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
20360 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
20370 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
20380 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
20390 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
203a0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
203b0 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
203c0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
203d0 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78  te3FixInit(DbFix
203e0 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74  er*, Parse*, int
203f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
20400 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  onst Token*);.in
20410 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c  t sqlite3FixSrcL
20420 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72  ist(DbFixer*, Sr
20430 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
20440 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62  ite3FixSelect(Db
20450 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  Fixer*, Select*)
20460 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
20470 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45  Expr(DbFixer*, E
20480 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
20490 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62  e3FixExprList(Db
204a0 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  Fixer*, ExprList
204b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
204c0 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62  ixTriggerStep(Db
204d0 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53  Fixer*, TriggerS
204e0 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tep*);.int sqlit
204f0 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61  e3AtoF(const cha
20500 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69  r *z, double*, i
20510 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
20520 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e  ite3GetInt32(con
20530 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29  st char *, int*)
20540 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
20550 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  i(const char*);.
20560 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36  int sqlite3Utf16
20570 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f  ByteLen(const vo
20580 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  id *pData, int n
20590 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Char);.int sqlit
205a0 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
205b0 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
205c0 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32   int nByte);.u32
205d0 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
205e0 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 0a 2f  (const u8**);../
205f0 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f  *.** Routines to
20600 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
20610 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
20620 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65  integers.  These
20630 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64   used to.** be d
20640 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20  efined locally, 
20650 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74  but now we use t
20660 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e  he varint routin
20670 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63  es in the util.c
20680 0a 2a 2a 20 66 69 6c 65 2e 20 20 43 6f 64 65 20  .** file.  Code 
20690 73 68 6f 75 6c 64 20 75 73 65 20 74 68 65 20 4d  should use the M
206a0 41 43 52 4f 20 66 6f 72 6d 73 20 62 65 6c 6f 77  ACRO forms below
206b0 2c 20 61 73 20 74 68 65 20 56 61 72 69 6e 74 33  , as the Varint3
206c0 32 20 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 61 72  2 versions.** ar
206d0 65 20 63 6f 64 65 64 20 74 6f 20 61 73 73 75 6d  e coded to assum
206e0 65 20 74 68 65 20 73 69 6e 67 6c 65 20 62 79 74  e the single byt
206f0 65 20 63 61 73 65 20 69 73 20 61 6c 72 65 61 64  e case is alread
20700 79 20 68 61 6e 64 6c 65 64 20 28 77 68 69 63 68  y handled (which
20710 20 0a 2a 2a 20 74 68 65 20 4d 41 43 52 4f 20 66   .** the MACRO f
20720 6f 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69 6e  orm does)..*/.in
20730 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  t sqlite3PutVari
20740 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  nt(unsigned char
20750 2a 2c 20 75 36 34 29 3b 0a 69 6e 74 20 73 71 6c  *, u64);.int sql
20760 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28  ite3PutVarint32(
20770 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
20780 75 33 32 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  u32);.u8 sqlite3
20790 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20  GetVarint(const 
207a0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
207b0 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69   u64 *);.u8 sqli
207c0 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63  te3GetVarint32(c
207d0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
207e0 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e  ar *, u32 *);.in
207f0 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  t sqlite3VarintL
20800 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a  en(u64 v);../*.*
20810 2a 20 54 68 65 20 68 65 61 64 65 72 20 6f 66 20  * The header of 
20820 61 20 72 65 63 6f 72 64 20 63 6f 6e 73 69 73 74  a record consist
20830 73 20 6f 66 20 61 20 73 65 71 75 65 6e 63 65 20  s of a sequence 
20840 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
20850 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65  integers..** The
20860 73 65 20 69 6e 74 65 67 65 72 73 20 61 72 65 20  se integers are 
20870 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 73 6d  almost always sm
20880 61 6c 6c 20 61 6e 64 20 61 72 65 20 65 6e 63 6f  all and are enco
20890 64 65 64 20 61 73 20 61 20 73 69 6e 67 6c 65 20  ded as a single 
208a0 62 79 74 65 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c  byte..** The fol
208b0 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 74 61  lowing macros ta
208c0 6b 65 20 61 64 76 61 6e 74 61 67 65 20 74 68 69  ke advantage thi
208d0 73 20 66 61 63 74 20 74 6f 20 70 72 6f 76 69 64  s fact to provid
208e0 65 20 61 20 66 61 73 74 20 65 6e 63 6f 64 65 0a  e a fast encode.
208f0 2a 2a 20 61 6e 64 20 64 65 63 6f 64 65 20 6f 66  ** and decode of
20900 20 74 68 65 20 69 6e 74 65 67 65 72 73 20 69 6e   the integers in
20910 20 61 20 72 65 63 6f 72 64 20 68 65 61 64 65 72   a record header
20920 2e 20 20 49 74 20 69 73 20 66 61 73 74 65 72 20  .  It is faster 
20930 66 6f 72 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a 2a  for the common.*
20940 2a 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65  * case where the
20950 20 69 6e 74 65 67 65 72 20 69 73 20 61 20 73 69   integer is a si
20960 6e 67 6c 65 20 62 79 74 65 2e 20 20 49 74 20 69  ngle byte.  It i
20970 73 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77 65  s a little slowe
20980 72 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 69 6e  r when the.** in
20990 74 65 67 65 72 20 69 73 20 74 77 6f 20 6f 72 20  teger is two or 
209a0 6d 6f 72 65 20 62 79 74 65 73 2e 20 20 42 75 74  more bytes.  But
209b0 20 6f 76 65 72 61 6c 6c 20 69 74 20 69 73 20 66   overall it is f
209c0 61 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  aster..**.** The
209d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65   following expre
209e0 73 73 69 6f 6e 73 20 61 72 65 20 65 71 75 69 76  ssions are equiv
209f0 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  alent:.**.**    
20a00 20 78 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56   x = sqlite3GetV
20a10 61 72 69 6e 74 33 32 28 20 41 2c 20 26 42 20 29  arint32( A, &B )
20a20 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c  ;.**     x = sql
20a30 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28  ite3PutVarint32(
20a40 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 20   A, B );.**.**  
20a50 20 20 20 78 20 3d 20 67 65 74 56 61 72 69 6e 74     x = getVarint
20a60 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 20 20  32( A, B );.**  
20a70 20 20 20 78 20 3d 20 70 75 74 56 61 72 69 6e 74     x = putVarint
20a80 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a  32( A, B );.**.*
20a90 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  /.#define getVar
20aa0 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
20ab0 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30  (u8)((*(A)<(u8)0
20ac0 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a  x80)?((B)=(u32)*
20ad0 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65  (A)),1:sqlite3Ge
20ae0 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75  tVarint32((A),(u
20af0 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66  32 *)&(B))).#def
20b00 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28  ine putVarint32(
20b10 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
20b20 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78  (u32)(B)<(u32)0x
20b30 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67  80)?(*(A)=(unsig
20b40 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a  ned char)(B)),1:
20b50 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61  \.  sqlite3PutVa
20b60 72 69 6e 74 33 32 28 28 41 29 2c 28 42 29 29 29  rint32((A),(B)))
20b70 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
20b80 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74  nt    sqlite3Get
20b90 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70  Varint.#define p
20ba0 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  utVarint    sqli
20bb0 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63  te3PutVarint...c
20bc0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
20bd0 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53  e3IndexAffinityS
20be0 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78  tr(Vdbe *, Index
20bf0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
20c00 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 53 74  3TableAffinitySt
20c10 72 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20  r(Vdbe *, Table 
20c20 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
20c30 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28  CompareAffinity(
20c40 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
20c50 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c  r aff2);.int sql
20c60 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
20c70 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c  yOk(Expr *pExpr,
20c80 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69   char idx_affini
20c90 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  ty);.char sqlite
20ca0 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78  3ExprAffinity(Ex
20cb0 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
20cc0 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f  sqlite3Atoi64(co
20cd0 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c  nst char*, i64*,
20ce0 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
20cf0 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c  sqlite3Error(sql
20d00 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
20d10 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f  t char*,...);.vo
20d20 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f  id *sqlite3HexTo
20d30 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63  Blob(sqlite3*, c
20d40 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
20d50 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  t n);.u8 sqlite3
20d60 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b  HexToInt(int h);
20d70 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50  .int sqlite3TwoP
20d80 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  artName(Parse *,
20d90 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
20da0 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 63 6f  *, Token **);.co
20db0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
20dc0 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e  3ErrStr(int);.in
20dd0 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
20de0 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73  ema(Parse *pPars
20df0 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
20e00 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
20e10 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c  sqlite3*,u8 enc,
20e20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74   const char*,int
20e30 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
20e40 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71  te3LocateCollSeq
20e50 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
20e60 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65  const char*zName
20e70 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
20e80 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50  te3ExprCollSeq(P
20e90 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
20ea0 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
20eb0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
20ec0 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72  CollateToken(Par
20ed0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
20ee0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72  *, Token*);.Expr
20ef0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
20f00 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61  CollateString(Pa
20f10 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
20f20 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73   char*);.Expr *s
20f30 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
20f40 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e  llate(Expr*);.in
20f50 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f  t sqlite3CheckCo
20f60 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43  llSeq(Parse *, C
20f70 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73  ollSeq *);.int s
20f80 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63  qlite3CheckObjec
20f90 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63  tName(Parse *, c
20fa0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f  onst char *);.vo
20fb0 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  id sqlite3VdbeSe
20fc0 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  tChanges(sqlite3
20fd0 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
20fe0 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36  lite3AddInt64(i6
20ff0 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
21000 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34  ite3SubInt64(i64
21010 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
21020 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a  te3MulInt64(i64*
21030 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
21040 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b  e3AbsInt32(int);
21050 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
21060 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a  NABLE_8_3_NAMES.
21070 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65  void sqlite3File
21080 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68  Suffix3(const ch
21090 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c  ar*, char*);.#el
210a0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
210b0 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58  te3FileSuffix3(X
210c0 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71  ,Y).#endif.u8 sq
210d0 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
210e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 69 6e  const char *z,in
210f0 74 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20  t);..const void 
21100 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78  *sqlite3ValueTex
21110 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t(sqlite3_value*
21120 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
21130 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c  e3ValueBytes(sql
21140 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
21150 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
21160 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65  lueSetStr(sqlite
21170 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63  3_value*, int, c
21180 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20  onst void *,u8, 
21190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
211a0 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29           void(*)
211b0 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73  (void*));.void s
211c0 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
211d0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
211e0 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
211f0 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
21200 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72  sqlite3 *);.char
21210 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f   *sqlite3Utf16to
21220 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  8(sqlite3 *, con
21230 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75  st void*, int, u
21240 38 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  8);.#ifdef SQLIT
21250 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 63  E_ENABLE_STAT3.c
21260 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 38  har *sqlite3Utf8
21270 74 6f 31 36 28 73 71 6c 69 74 65 33 20 2a 2c 20  to16(sqlite3 *, 
21280 75 38 2c 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c  u8, char *, int,
21290 20 69 6e 74 20 2a 29 3b 0a 23 65 6e 64 69 66 0a   int *);.#endif.
212a0 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
212b0 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33  FromExpr(sqlite3
212c0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20   *, Expr *, u8, 
212d0 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
212e0 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e **);.void sqli
212f0 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
21300 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61  inity(sqlite3_va
21310 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a  lue *, u8, u8);.
21320 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41  #ifndef SQLITE_A
21330 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65  MALGAMATION.exte
21340 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
21350 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70  d char sqlite3Op
21360 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a  codeProperty[];.
21370 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
21380 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
21390 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d  e3UpperToLower[]
213a0 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
213b0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
213c0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a  ite3CtypeMap[];.
213d0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b  extern const Tok
213e0 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b  en sqlite3IntTok
213f0 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51  ens[];.extern SQ
21400 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20  LITE_WSD struct 
21410 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71  Sqlite3Config sq
21420 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74  lite3Config;.ext
21430 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 46  ern SQLITE_WSD F
21440 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74  uncDefHash sqlit
21450 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  e3GlobalFunction
21460 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  s;.#ifndef SQLIT
21470 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72  E_OMIT_WSD.exter
21480 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e  n int sqlite3Pen
21490 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66  dingByte;.#endif
214a0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
214b0 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
214c0 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  d(sqlite3*, int,
214d0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
214e0 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28   sqlite3Reindex(
214f0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
21500 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
21510 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69  lite3AlterFuncti
21520 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
21530 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61  sqlite3AlterRena
21540 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  meTable(Parse*, 
21550 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
21560 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
21570 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73  tToken(const uns
21580 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e  igned char *, in
21590 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
215a0 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61  e3NestedParse(Pa
215b0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
215c0 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
215d0 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
215e0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71  redStatements(sq
215f0 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
21600 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63  ite3CodeSubselec
21610 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  t(Parse *, Expr 
21620 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
21630 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
21640 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Prep(Parse*, Sel
21650 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
21660 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
21670 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f  MatchSpanName(co
21680 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
21690 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
216a0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
216b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
216c0 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e  solveExprNames(N
216d0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
216e0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
216f0 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61  3ResolveSelectNa
21700 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  mes(Parse*, Sele
21710 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
21720 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
21730 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
21740 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
21750 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
21760 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
21770 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
21780 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
21790 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
217a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
217b0 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
217c0 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
217d0 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
217e0 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
217f0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
21800 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c  SrcList *);.Coll
21810 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
21820 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75  ollSeq(Parse*, u
21830 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f  8, CollSeq *, co
21840 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
21850 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79   sqlite3Affinity
21860 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Type(const char*
21870 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
21880 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54  nalyze(Parse*, T
21890 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
218a0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b  int sqlite3Invok
218b0 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73  eBusyHandler(Bus
218c0 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20  yHandler*);.int 
218d0 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71  sqlite3FindDb(sq
218e0 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
218f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
21900 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a  DbName(sqlite3 *
21910 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
21920 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c  .int sqlite3Anal
21930 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33  ysisLoad(sqlite3
21940 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64  *,int iDB);.void
21950 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e   sqlite3DeleteIn
21960 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74  dexSamples(sqlit
21970 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  e3*,Index*);.voi
21980 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74  d sqlite3Default
21990 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a  RowEst(Index*);.
219a0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
219b0 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  sterLikeFunction
219c0 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  s(sqlite3*, int)
219d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c  ;.int sqlite3IsL
219e0 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  ikeFunction(sqli
219f0 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c  te3*,Expr*,int*,
21a00 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
21a10 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46  ite3MinimumFileF
21a20 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69 6e  ormat(Parse*, in
21a30 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
21a40 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
21a50 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
21a60 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
21a70 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
21a80 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
21a90 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
21aa0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
21ab0 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
21ac0 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 4b 65   *sqlite3IndexKe
21ad0 79 69 6e 66 6f 28 50 61 72 73 65 20 2a 2c 20 49  yinfo(Parse *, I
21ae0 6e 64 65 78 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  ndex *);.int sql
21af0 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
21b00 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
21b10 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
21b20 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69  , void *, .  voi
21b30 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
21b40 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
21b50 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
21b60 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
21b70 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
21b80 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
21b90 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
21ba0 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46  3_context*),.  F
21bb0 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
21bc0 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e  Destructor.);.in
21bd0 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
21be0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
21bf0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
21c00 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
21c10 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
21c20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
21c30 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 63  nit(StrAccum*, c
21c40 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  har*, int, int);
21c50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
21c60 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41  AccumAppend(StrA
21c70 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ccum*,const char
21c80 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
21c90 69 74 65 33 41 70 70 65 6e 64 53 70 61 63 65 28  ite3AppendSpace(
21ca0 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a  StrAccum*,int);.
21cb0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72  char *sqlite3Str
21cc0 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41  AccumFinish(StrA
21cd0 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
21ce0 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65  ite3StrAccumRese
21cf0 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  t(StrAccum*);.vo
21d00 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
21d10 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44  DestInit(SelectD
21d20 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45  est*,int,int);.E
21d30 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61  xpr *sqlite3Crea
21d40 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c  teColumnExpr(sql
21d50 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20  ite3 *, SrcList 
21d60 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76  *, int, int);..v
21d70 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
21d80 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33  pRestart(sqlite3
21d90 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64  _backup *);.void
21da0 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70   sqlite3BackupUp
21db0 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63  date(sqlite3_bac
21dc0 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e  kup *, Pgno, con
21dd0 73 74 20 75 38 20 2a 29 3b 0a 0a 2f 2a 0a 2a 2a  st u8 *);../*.**
21de0 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
21df0 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65  o the LEMON-gene
21e00 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a  rated parser.*/.
21e10 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72  void *sqlite3Par
21e20 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a  serAlloc(void*(*
21e30 29 28 73 69 7a 65 5f 74 29 29 3b 0a 76 6f 69 64  )(size_t));.void
21e40 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72   sqlite3ParserFr
21e50 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a  ee(void*, void(*
21e60 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
21e70 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f  sqlite3Parser(vo
21e80 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c  id*, int, Token,
21e90 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66   Parse*);.#ifdef
21ea0 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
21eb0 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
21ec0 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
21ed0 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
21ee0 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
21ef0 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
21f00 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
21f10 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
21f20 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
21f30 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
21f40 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
21f50 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
21f60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
21f70 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
21f80 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
21f90 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
21fa0 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
21fb0 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
21fc0 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
21fd0 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
21fe0 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
21ff0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22000 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
22010 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
22020 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
22030 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
22040 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
22050 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
22060 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
22070 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
22080 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
22090 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
220a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
220b0 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
220c0 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
220d0 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
220e0 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
220f0 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
22100 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
22110 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
22120 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
22130 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
22140 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73  (X) .#  define s
22150 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
22160 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
22170 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
22180 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ist(X).#  define
22190 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
221a0 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53  point(X, Y, Z) S
221b0 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
221c0 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61  ne sqlite3GetVTa
221d0 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62  ble(X,Y)  ((VTab
221e0 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20  le*)0).#else.   
221f0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
22200 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64  Clear(sqlite3 *d
22210 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76  b, Table*);.   v
22220 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44  oid sqlite3VtabD
22230 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65  isconnect(sqlite
22240 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29  3 *db, Table *p)
22250 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
22260 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33  VtabSync(sqlite3
22270 20 2a 64 62 2c 20 63 68 61 72 20 2a 2a 29 3b 0a   *db, char **);.
22280 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
22290 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74  abRollback(sqlit
222a0 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20  e3 *db);.   int 
222b0 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
222c0 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  t(sqlite3 *db);.
222d0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
222e0 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  tabLock(VTable *
222f0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
22300 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61  e3VtabUnlock(VTa
22310 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
22320 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
22330 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b  kList(sqlite3*);
22340 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
22350 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c  tabSavepoint(sql
22360 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  ite3 *, int, int
22370 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71  );.   VTable *sq
22380 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73  lite3GetVTable(s
22390 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
223a0 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ;.#  define sqli
223b0 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
223c0 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73  ) ((db)->nVTrans
223d0 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72  >0 && (db)->aVTr
223e0 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76  ans==0).#endif.v
223f0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d  oid sqlite3VtabM
22400 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73  akeWritable(Pars
22410 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64  e*,Table*);.void
22420 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
22430 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  nParse(Parse*, T
22440 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
22450 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
22460 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e  d sqlite3VtabFin
22470 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ishParse(Parse*,
22480 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
22490 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69  qlite3VtabArgIni
224a0 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
224b0 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78  sqlite3VtabArgEx
224c0 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b  tend(Parse*, Tok
224d0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
224e0 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28  3VtabCallCreate(
224f0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
22500 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61  onst char *, cha
22510 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  r **);.int sqlit
22520 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63  e3VtabCallConnec
22530 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  t(Parse*, Table*
22540 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
22550 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71  abCallDestroy(sq
22560 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
22570 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
22580 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
22590 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62  (sqlite3 *, VTab
225a0 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a  le *);.FuncDef *
225b0 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c  sqlite3VtabOverl
225c0 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  oadFunction(sqli
225d0 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20  te3 *,FuncDef*, 
225e0 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29  int nArg, Expr*)
225f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
22600 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71  validFunction(sq
22610 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
22620 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
22630 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
22640 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64  VdbeParameterInd
22650 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20  ex(Vdbe*, const 
22660 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
22670 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72   sqlite3Transfer
22680 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33  Bindings(sqlite3
22690 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33  _stmt *, sqlite3
226a0 5f 73 74 6d 74 20 2a 29 3b 0a 69 6e 74 20 73 71  _stmt *);.int sq
226b0 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56  lite3Reprepare(V
226c0 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dbe*);.void sqli
226d0 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b  te3ExprListCheck
226e0 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45  Length(Parse*, E
226f0 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
22700 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  char*);.CollSeq 
22710 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f  *sqlite3BinaryCo
22720 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72  mpareCollSeq(Par
22730 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78  se *, Expr *, Ex
22740 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pr *);.int sqlit
22750 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63  e3TempInMemory(c
22760 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a  onst sqlite3*);.
22770 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
22780 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
22790 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  me(int);.#ifndef
227a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
227b0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68  .  int sqlite3Ch
227c0 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  eckpoint(sqlite3
227d0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
227e0 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20  *, int*);.  int 
227f0 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c  sqlite3WalDefaul
22800 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69  tHook(void*,sqli
22810 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
22820 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ,int);.#endif../
22830 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66  * Declarations f
22840 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  or functions in 
22850 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74  fkey.c. All of t
22860 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65  hese are replace
22870 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61  d by.** no-op ma
22880 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52  cros if OMIT_FOR
22890 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69  EIGN_KEY is defi
228a0 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ned. In this cas
228b0 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20  e no foreign.** 
228c0 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  key functionalit
228d0 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  y is available. 
228e0 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  If OMIT_TRIGGER 
228f0 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a  is defined but.*
22900 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  * OMIT_FOREIGN_K
22910 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20  EY is not, only 
22920 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  some of the func
22930 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65  tions are no-ope
22940 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61  d. In.** this ca
22950 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  se foreign keys 
22960 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20  are parsed, but 
22970 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f  no other functio
22980 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70 72  nality is .** pr
22990 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d  ovided (enforcem
229a0 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72  ent of FK constr
229b0 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74  aints requires t
229c0 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d  he triggers sub-
229d0 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20  system)..*/.#if 
229e0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
229f0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
22a00 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
22a10 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
22a20 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  R).  void sqlite
22a30 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  3FkCheck(Parse*,
22a40 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
22a50 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
22a60 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61  e3FkDropTable(Pa
22a70 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  rse*, SrcList *,
22a80 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64   Table*);.  void
22a90 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
22aa0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
22ab0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
22ac0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
22ad0 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65  FkRequired(Parse
22ae0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c  *, Table*, int*,
22af0 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c   int);.  u32 sql
22b00 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61  ite3FkOldmask(Pa
22b10 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  rse*, Table*);. 
22b20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b   FKey *sqlite3Fk
22b30 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65  References(Table
22b40 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
22b50 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63  fine sqlite3FkAc
22b60 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 29 0a 20  tions(a,b,c,d). 
22b70 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22b80 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 29  FkCheck(a,b,c,d)
22b90 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22ba0 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c  e3FkDropTable(a,
22bb0 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73  b,c).  #define s
22bc0 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
22bd0 61 2c 62 29 20 20 20 20 20 20 30 0a 20 20 23 64  a,b)      0.  #d
22be0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52  efine sqlite3FkR
22bf0 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29  equired(a,b,c,d)
22c00 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
22c10 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
22c20 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64  REIGN_KEY.  void
22c30 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
22c40 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c  (sqlite3 *, Tabl
22c50 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  e*);.  int sqlit
22c60 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
22c70 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b  Parse*,Table*,FK
22c80 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a  ey*,Index**,int*
22c90 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
22ca0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  ine sqlite3FkDel
22cb0 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69  ete(a,b).  #defi
22cc0 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  ne sqlite3FkLoca
22cd0 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c  teIndex(a,b,c,d,
22ce0 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  e).#endif.../*.*
22cf0 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c  * Available faul
22d00 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68  t injectors.  Sh
22d10 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64  ould be numbered
22d20 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
22d30 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  0..*/.#define SQ
22d40 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
22d50 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a  OR_MALLOC     0.
22d60 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
22d70 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55  AULTINJECTOR_COU
22d80 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  NT      1../*.**
22d90 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
22da0 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61  o the code in fa
22db0 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69  ult.c used for i
22dc0 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69  dentifying "beni
22dd0 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61  gn".** malloc fa
22de0 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20  ilures. This is 
22df0 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20  only present if 
22e00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
22e10 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e  TIN_TEST.** is n
22e20 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23  ot defined..*/.#
22e30 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22e40 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
22e50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
22e60 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
22e70 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71  void);.  void sq
22e80 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
22e90 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73  lloc(void);.#els
22ea0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
22eb0 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
22ec0 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65  lloc().  #define
22ed0 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
22ee0 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66  nMalloc().#endif
22ef0 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  ..#define IN_IND
22f00 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20  EX_ROWID        
22f10 20 20 20 31 0a 23 64 65 66 69 6e 65 20 49 4e 5f     1.#define IN_
22f20 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
22f30 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65 20        2.#define 
22f40 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
22f50 53 43 20 20 20 20 20 20 20 33 0a 23 64 65 66 69  SC       3.#defi
22f60 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
22f70 58 5f 44 45 53 43 20 20 20 20 20 20 34 0a 69 6e  X_DESC      4.in
22f80 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  t sqlite3FindInI
22f90 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78  ndex(Parse *, Ex
22fa0 70 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69  pr *, int*);..#i
22fb0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
22fc0 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a  LE_ATOMIC_WRITE.
22fd0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
22fe0 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
22ff0 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68  _vfs *, const ch
23000 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ar *, sqlite3_fi
23010 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
23020 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
23030 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
23040 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20  3_vfs *);.  int 
23050 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72  sqlite3JournalCr
23060 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  eate(sqlite3_fil
23070 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  e *);.  int sqli
23080 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73  te3JournalExists
23090 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70  (sqlite3_file *p
230a0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
230b0 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  ne sqlite3Journa
230c0 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70 56  lSize(pVfs) ((pV
230d0 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20  fs)->szOsFile). 
230e0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
230f0 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29  JournalExists(p)
23100 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20   1.#endif..void 
23110 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
23120 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69  lOpen(sqlite3_fi
23130 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  le *);.int sqlit
23140 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65  e3MemJournalSize
23150 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
23160 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28  te3IsMemJournal(
23170 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
23180 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
23190 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
231a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
231b0 53 65 74 48 65 69 67 68 74 28 50 61 72 73 65 20  SetHeight(Parse 
231c0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
231d0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
231e0 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
231f0 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e  (Select *);.  in
23200 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
23210 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c  ckHeight(Parse*,
23220 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23   int);.#else.  #
23230 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
23240 70 72 53 65 74 48 65 69 67 68 74 28 78 2c 79 29  prSetHeight(x,y)
23250 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
23260 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
23270 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e  ht(x) 0.  #defin
23280 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
23290 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65  ckHeight(x,y).#e
232a0 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65  ndif..u32 sqlite
232b0 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20  3Get4byte(const 
232c0 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
232d0 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20  e3Put4byte(u8*, 
232e0 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  u32);..#ifdef SQ
232f0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
23300 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64  CK_NOTIFY.  void
23310 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
23320 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  onBlocked(sqlite
23330 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b  3 *, sqlite3 *);
23340 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
23350 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
23360 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
23370 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
23380 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73  nnectionClosed(s
23390 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c  qlite3 *db);.#el
233a0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
233b0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
233c0 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65  ocked(x,y).  #de
233d0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
233e0 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78  ectionUnlocked(x
233f0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
23400 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
23410 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  sed(x).#endif..#
23420 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
23430 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
23440 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c  3ParserTrace(FIL
23450 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e  E*, char *);.#en
23460 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68  dif../*.** If th
23470 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20  e SQLITE_ENABLE 
23480 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74  IOTRACE exists t
23490 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hen the global v
234a0 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74  ariable.** sqlit
234b0 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70  e3IoTrace is a p
234c0 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e  ointer to a prin
234d0 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20  tf-like routine 
234e0 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74  used to.** print
234f0 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73   I/O tracing mes
23500 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65  sages. .*/.#ifde
23510 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
23520 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65  IOTRACE.# define
23530 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28   IOTRACE(A)  if(
23540 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
23550 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ){ sqlite3IoTrac
23560 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71  e A; }.  void sq
23570 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
23580 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49  Sql(Vdbe*);.SQLI
23590 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28  TE_EXTERN void (
235a0 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29  *sqlite3IoTrace)
235b0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  (const char*,...
235c0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
235d0 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64  e IOTRACE(A).# d
235e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
235f0 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23  eIOTraceSql(X).#
23600 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
23610 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  se routines are 
23620 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
23630 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69  e mem2.c debuggi
23640 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ng memory alloca
23650 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  tor.** only.  Th
23660 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76  ey are used to v
23670 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65  erify that diffe
23680 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20  rent "types" of 
23690 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61  memory.** alloca
236a0 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72  tions are proper
236b0 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68  ly tracked by th
236c0 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20  e system..**.** 
236d0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
236e0 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68  etType() sets th
236f0 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61  e "type" of an a
23700 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65  llocation to one
23710 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59   of.** the MEMTY
23720 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  PE_* macros defi
23730 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20  ned below.  The 
23740 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62  type must be a b
23750 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61  itmask with.** a
23760 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e   single bit set.
23770 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
23780 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
23790 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
237a0 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20  any of the bits 
237b0 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
237c0 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
237d0 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
237e0 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
237f0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
23800 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65  ype()..** sqlite
23810 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
23820 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  () is intended f
23830 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73  or use inside as
23840 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
23850 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  s..**.** sqlite3
23860 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29  MemdebugNoType()
23870 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
23880 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74   none of the bit
23890 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
238a0 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
238b0 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
238c0 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
238d0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
238e0 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50  tType()..**.** P
238f0 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20  erhaps the most 
23900 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20  important point 
23910 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  is the differenc
23920 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50  e between MEMTYP
23930 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45  E_HEAP.** and ME
23940 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e  MTYPE_LOOKASIDE.
23950 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69    If an allocati
23960 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f  on is MEMTYPE_LO
23970 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65  OKASIDE, that me
23980 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20  ans.** it might 
23990 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
239a0 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ted by lookaside
239b0 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c  , except the all
239c0 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74  ocation was.** t
239d0 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b  oo large or look
239e0 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64  aside was alread
239f0 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69  y full.  It is i
23a00 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69  mportant to veri
23a10 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63  fy.** that alloc
23a20 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ations that migh
23a30 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69  t have been sati
23a40 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  sfied by lookasi
23a50 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61  de are not.** pa
23a60 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e  ssed back to non
23a70 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
23a80 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73  ) routines.  Ass
23a90 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65  erts such as the
23aa0 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76  .** example abov
23ab0 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20  e are placed on 
23ac0 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64  the non-lookasid
23ad0 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
23ae0 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  s to verify.** t
23af0 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  his constraint. 
23b00 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
23b10 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
23b20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
23b30 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
23b40 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
23b50 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
23b60 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
23b70 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
23b80 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
23b90 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
23ba0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
23bb0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
23bc0 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
23bd0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
23be0 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
23bf0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
23c00 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
23c10 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
23c20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
23c30 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
23c40 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
23c50 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23c60 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
23c70 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
23c80 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
23c90 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
23ca0 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
23cb0 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
23cc0 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
23cd0 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
23ce0 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
23cf0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
23d00 20 20 30 78 30 32 20 20 2f 2a 20 4d 69 67 68 74    0x02  /* Might
23d10 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61   have been looka
23d20 73 69 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23  side memory */.#
23d30 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53  define MEMTYPE_S
23d40 43 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20  CRATCH    0x04  
23d50 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63  /* Scratch alloc
23d60 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
23d70 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45  e MEMTYPE_PCACHE
23d80 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61       0x08  /* Pa
23d90 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74  ge cache allocat
23da0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
23db0 4d 45 4d 54 59 50 45 5f 44 42 20 20 20 20 20 20  MEMTYPE_DB      
23dc0 20 20 20 30 78 31 30 20 20 2f 2a 20 55 73 65 73     0x10  /* Uses
23dd0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
23de0 2c 20 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c  , not sqlite_mal
23df0 6c 6f 63 20 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f  loc */..#endif /
23e00 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20  * _SQLITEINT_H_ 
23e10 2a 2f 0a                                         */.