/ Hex Artifact Content
Login

Artifact 0f8f05ee4db4ba9120b38f7a3992b325698f6e8a:


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 0a 2f  )==0).#endif.../
44c0: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
44d0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
44e0: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  g structure is u
44f0: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
4500: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
4510: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20   callback for a 
4520: 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e  given sqlite han
4530: 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20  dle. .**.** The 
4540: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
4550: 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  er member of the
4560: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63   sqlite struct c
4570: 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79  ontains the busy
4580: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
4590: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
45a0: 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72  ndle. Each pager
45b0: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20   opened via the 
45c0: 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65  sqlite.** handle
45d0: 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69   is passed a poi
45e0: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62  nter to sqlite.b
45f0: 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20  usyHandler. The 
4600: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
4610: 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72  callback is curr
4620: 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e  ently invoked on
4630: 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70  ly from within p
4640: 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64  ager.c..*/.typed
4650: 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61  ef struct BusyHa
4660: 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65  ndler BusyHandle
4670: 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61  r;.struct BusyHa
4680: 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  ndler {.  int (*
4690: 78 46 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e  xFunc)(void *,in
46a0: 74 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79  t);  /* The busy
46b0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
46c0: 6f 69 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20  oid *pArg;      
46d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
46e0: 73 74 20 61 72 67 20 74 6f 20 62 75 73 79 20 63  st arg to busy c
46f0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74  allback */.  int
4700: 20 6e 42 75 73 79 3b 20 20 20 20 20 20 20 20 20   nBusy;         
4710: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65          /* Incre
4720: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
4730: 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b   busy call */.};
4740: 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20  ../*.** Name of 
4750: 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  the master datab
4760: 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  ase table.  The 
4770: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
4780: 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70  table.** is a sp
4790: 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74  ecial table that
47a0: 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73   holds the names
47b0: 20 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20   and attributes 
47c0: 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74  of all.** user t
47d0: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
47e0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  s..*/.#define MA
47f0: 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20  STER_NAME       
4800: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a  "sqlite_master".
4810: 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53  #define TEMP_MAS
4820: 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74  TER_NAME  "sqlit
4830: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a  e_temp_master"..
4840: 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70  /*.** The root-p
4850: 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65  age of the maste
4860: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
4870: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
4880: 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31  TER_ROOT       1
4890: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65  ../*.** The name
48a0: 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74   of the schema t
48b0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
48c0: 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29   SCHEMA_TABLE(x)
48d0: 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42    ((!OMIT_TEMPDB
48e0: 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d  )&&(x==1)?TEMP_M
48f0: 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45  ASTER_NAME:MASTE
4900: 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41  R_NAME)../*.** A
4910: 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63   convenience mac
4920: 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ro that returns 
4930: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c  the number of el
4940: 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20  ements in.** an 
4950: 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e  array..*/.#defin
4960: 65 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20  e ArraySize(X)  
4970: 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
4980: 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29  X)/sizeof(X[0]))
4990: 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  )../*.** Determi
49a0: 6e 65 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  ne if the argume
49b0: 6e 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66  nt is a power of
49c0: 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20   two.*/.#define 
49d0: 49 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20  IsPowerOfTwo(X) 
49e0: 28 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d  (((X)&((X)-1))==
49f0: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  0)../*.** The fo
4a00: 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73  llowing value as
4a10: 20 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65   a destructor me
4a20: 61 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74  ans to use sqlit
4a30: 65 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54  e3DbFree()..** T
4a40: 68 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  he sqlite3DbFree
4a50: 28 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69  () routine requi
4a60: 72 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65  res two paramete
4a70: 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68  rs instead of th
4a80: 65 20 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65  e .** one parame
4a90: 74 65 72 20 74 68 61 74 20 64 65 73 74 72 75 63  ter that destruc
4aa0: 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61  tors normally wa
4ab0: 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20  nt.  So we have 
4ac0: 74 6f 20 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a  to introduce .**
4ad0: 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75   this magic valu
4ae0: 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20  e that the code 
4af0: 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20  knows to handle 
4b00: 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e  differently.  An
4b10: 79 20 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69  y .** pointer wi
4b20: 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20  ll work here as 
4b30: 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69  long as it is di
4b40: 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49  stinct from SQLI
4b50: 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64  TE_STATIC.** and
4b60: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
4b70: 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  T..*/.#define SQ
4b80: 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28  LITE_DYNAMIC   (
4b90: 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63  (sqlite3_destruc
4ba0: 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33  tor_type)sqlite3
4bb0: 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a  MallocSize)../*.
4bc0: 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f  ** When SQLITE_O
4bd0: 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e  MIT_WSD is defin
4be0: 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  ed, it means tha
4bf0: 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61  t the target pla
4c00: 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f  tform does.** no
4c10: 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62  t support Writab
4c20: 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28  le Static Data (
4c30: 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f  WSD) such as glo
4c40: 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76  bal and static v
4c50: 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c  ariables..** All
4c60: 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20   variables must 
4c70: 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65  either be on the
4c80: 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69   stack or dynami
4c90: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
4ca0: 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70  from.** the heap
4cb0: 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75  .  When WSD is u
4cc0: 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20  nsupported, the 
4cd0: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
4ce0: 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a  tions scattered.
4cf0: 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68  ** throughout th
4d00: 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75  e SQLite code mu
4d10: 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61  st become consta
4d20: 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68  nts instead.  Th
4d30: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20  e SQLITE_WSD.** 
4d40: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
4d50: 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20  r this purpose. 
4d60: 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20   And instead of 
4d70: 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20  referencing the 
4d80: 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65  variable.** dire
4d90: 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73  ctly, we use its
4da0: 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b   constant as a k
4db0: 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65  ey to lookup the
4dc0: 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61   run-time alloca
4dd0: 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68  ted.** buffer th
4de0: 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61  at holds real va
4df0: 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e  riable.  The con
4e00: 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68  stant is also th
4e10: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a  e initializer.**
4e20: 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d   for the run-tim
4e30: 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  e allocated buff
4e40: 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  er..**.** In the
4e50: 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72   usual case wher
4e60: 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74  e WSD is support
4e70: 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57  ed, the SQLITE_W
4e80: 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a  SD and GLOBAL.**
4e90: 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e   macros become n
4ea0: 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a  o-ops and have z
4eb0: 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ero performance 
4ec0: 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65  impact..*/.#ifde
4ed0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
4ee0: 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  D.  #define SQLI
4ef0: 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23  TE_WSD const.  #
4f00: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
4f10: 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33  v) (*(t*)sqlite3
4f20: 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a  _wsd_find((void*
4f30: 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29  )&(v), sizeof(v)
4f40: 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  )).  #define sql
4f50: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
4f60: 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53   GLOBAL(struct S
4f70: 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71  qlite3Config, sq
4f80: 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69  lite3Config).  i
4f90: 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69  nt sqlite3_wsd_i
4fa0: 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a  nit(int N, int J
4fb0: 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  );.  void *sqlit
4fc0: 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64  e3_wsd_find(void
4fd0: 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c   *K, int L);.#el
4fe0: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  se.  #define SQL
4ff0: 49 54 45 5f 57 53 44 20 0a 20 20 23 64 65 66 69  ITE_WSD .  #defi
5000: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
5010: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
5020: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
5030: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
5040: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
5050: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
5060: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
5070: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
5080: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
5090: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
50a0: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
50b0: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
50c0: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
50d0: 69 62 65 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65  iberately .** le
50e0: 66 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e  ft unused within
50f0: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
5100: 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73  unction. This us
5110: 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68  ually happens wh
5120: 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e  en.** a function
5130: 20 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61   is called via a
5140: 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
5150: 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74  r. For example t
5160: 68 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74  he .** implement
5170: 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20  ation of an SQL 
5180: 61 67 67 72 65 67 61 74 65 20 73 74 65 70 20 63  aggregate step c
5190: 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20  allback may not 
51a0: 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d  use the.** param
51b0: 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20  eter indicating 
51c0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
51d0: 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74  guments passed t
51e0: 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2c  o the aggregate,
51f0: 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20  .** if it knows 
5200: 74 68 61 74 20 74 68 69 73 20 69 73 20 65 6e 66  that this is enf
5210: 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e  orced elsewhere.
5220: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75  .**.** When a fu
5230: 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72  nction parameter
5240: 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20   is not used at 
5250: 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62  all within the b
5260: 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ody of a functio
5270: 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65  n,.** it is gene
5280: 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74  rally named "Not
5290: 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65  Used" or "NotUse
52a0: 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e  d2" to make thin
52b0: 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e  gs even clearer.
52c0: 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65  .** However, the
52d0: 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c  se macros may al
52e0: 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73 75  so be used to su
52f0: 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20  ppress warnings 
5300: 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61  related to.** pa
5310: 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61  rameters that ma
5320: 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20  y or may not be 
5330: 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f  used depending o
5340: 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70  n compilation op
5350: 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78  tions..** For ex
5360: 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61  ample those para
5370: 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64  meters only used
5380: 20 69 6e 20 61 73 73 65 72 74 28 29 20 73 74 61   in assert() sta
5390: 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73  tements. In thes
53a0: 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70  e.** cases the p
53b0: 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61  arameters are na
53c0: 6d 65 64 20 61 73 20 70 65 72 20 74 68 65 20 75  med as per the u
53d0: 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73  sual conventions
53e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55  ..*/.#define UNU
53f0: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29  SED_PARAMETER(x)
5400: 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69   (void)(x).#defi
5410: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
5420: 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44  TER2(x,y) UNUSED
5430: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e  _PARAMETER(x),UN
5440: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79  USED_PARAMETER(y
5450: 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64  )../*.** Forward
5460: 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73   references to s
5470: 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70  tructures.*/.typ
5480: 65 64 65 66 20 73 74 72 75 63 74 20 41 67 67 49  edef struct AggI
5490: 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70  nfo AggInfo;.typ
54a0: 65 64 65 66 20 73 74 72 75 63 74 20 41 75 74 68  edef struct Auth
54b0: 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74  Context AuthCont
54c0: 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ext;.typedef str
54d0: 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  uct AutoincInfo 
54e0: 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70  AutoincInfo;.typ
54f0: 65 64 65 66 20 73 74 72 75 63 74 20 42 69 74 76  edef struct Bitv
5500: 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64  ec Bitvec;.typed
5510: 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  ef struct CollSe
5520: 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64  q CollSeq;.typed
5530: 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e  ef struct Column
5540: 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66   Column;.typedef
5550: 20 73 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74   struct Db Db;.t
5560: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 63  ypedef struct Sc
5570: 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70  hema Schema;.typ
5580: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
5590: 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73   Expr;.typedef s
55a0: 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 45  truct ExprList E
55b0: 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  xprList;.typedef
55c0: 20 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e   struct ExprSpan
55d0: 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64   ExprSpan;.typed
55e0: 65 66 20 73 74 72 75 63 74 20 46 4b 65 79 20 46  ef struct FKey F
55f0: 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Key;.typedef str
5600: 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74  uct FuncDestruct
5610: 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  or FuncDestructo
5620: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
5630: 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65  t FuncDef FuncDe
5640: 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  f;.typedef struc
5650: 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 46 75  t FuncDefHash Fu
5660: 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64  ncDefHash;.typed
5670: 65 66 20 73 74 72 75 63 74 20 49 64 4c 69 73 74  ef struct IdList
5680: 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66   IdList;.typedef
5690: 20 73 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e   struct Index In
56a0: 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72  dex;.typedef str
56b0: 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  uct IndexSample 
56c0: 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70  IndexSample;.typ
56d0: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 43  edef struct KeyC
56e0: 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74  lass KeyClass;.t
56f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
5700: 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74  yInfo KeyInfo;.t
5710: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
5720: 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64  okaside Lookasid
5730: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
5740: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
5750: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74  LookasideSlot;.t
5760: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f  ypedef struct Mo
5770: 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70  dule Module;.typ
5780: 65 64 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65  edef struct Name
5790: 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74  Context NameCont
57a0: 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ext;.typedef str
57b0: 75 63 74 20 50 61 72 73 65 20 50 61 72 73 65 3b  uct Parse Parse;
57c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
57d0: 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74  RowSet RowSet;.t
57e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 61  ypedef struct Sa
57f0: 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e  vepoint Savepoin
5800: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
5810: 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b  t Select Select;
5820: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5830: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
5840: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
5850: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
5860: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
5870: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
5880: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
5890: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
58a0: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
58b0: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
58c0: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
58d0: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
58e0: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
58f0: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
5900: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
5910: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
5920: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
5930: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
5940: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
5950: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
5960: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
5970: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
5980: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5990: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
59a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
59b0: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
59c0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
59d0: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
59e0: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
59f0: 65 50 6c 61 6e 20 57 68 65 72 65 50 6c 61 6e 3b  ePlan WherePlan;
5a00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5a10: 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49  WhereInfo WhereI
5a20: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
5a30: 75 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20 57  uct WhereLevel W
5a40: 68 65 72 65 4c 65 76 65 6c 3b 0a 0a 2f 2a 0a 2a  hereLevel;../*.*
5a50: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
5a60: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
5a70: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
5a80: 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a  the "u8" and .**
5a90: 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74   "BusyHandler" t
5aa0: 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20  ypedefs. vdbe.h 
5ab0: 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20  also requires a 
5ac0: 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75  few of the opaqu
5ad0: 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70  e.** pointer typ
5ae0: 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66  es (i.e. FuncDef
5af0: 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e  ) defined above.
5b00: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74  .*/.#include "bt
5b10: 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ree.h".#include 
5b20: 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64  "vdbe.h".#includ
5b30: 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63  e "pager.h".#inc
5b40: 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a  lude "pcache.h".
5b50: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
5b60: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78  .#include "mutex
5b70: 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .h".../*.** Each
5b80: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
5b90: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
5ba0: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
5bb0: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
5bc0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
5bd0: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
5be0: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
5bf0: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
5c00: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
5c10: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
5c20: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
5c30: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
5c40: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
5c50: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
5c60: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
5c70: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
5c80: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
5c90: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
5ca0: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
5cb0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
5cc0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
5cd0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
5ce0: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
5cf0: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
5d00: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
5d10: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
5d20: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
5d30: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
5d40: 38 20 69 6e 54 72 61 6e 73 3b 20 20 20 20 20 20  8 inTrans;      
5d50: 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 74 20 77 72      /* 0: not wr
5d60: 69 74 61 62 6c 65 2e 20 20 31 3a 20 54 72 61 6e  itable.  1: Tran
5d70: 73 61 63 74 69 6f 6e 2e 20 20 32 3a 20 43 68 65  saction.  2: Che
5d80: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 20 20 75 38 20  ckpoint */.  u8 
5d90: 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20  safety_level;   
5da0: 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73    /* How aggress
5db0: 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64  ive at syncing d
5dc0: 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20  ata to disk */. 
5dd0: 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
5de0: 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72  ;     /* Pointer
5df0: 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68   to database sch
5e00: 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68  ema (possibly sh
5e10: 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ared) */.};../*.
5e20: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
5e30: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
5e40: 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73  structure stores
5e50: 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65   a database sche
5e60: 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53  ma..**.** Most S
5e70: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72  chema objects ar
5e80: 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
5e90: 68 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20  h a Btree.  The 
5ea0: 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20  exception is.** 
5eb0: 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74  the Schema for t
5ec0: 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73  he TEMP databaes
5ed0: 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d   (sqlite3.aDb[1]
5ee0: 29 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d  ) which is free-
5ef0: 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20  standing..** In 
5f00: 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64  shared cache mod
5f10: 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65  e, a single Sche
5f20: 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65  ma object can be
5f30: 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69   shared by multi
5f40: 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68  ple.** Btrees th
5f50: 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  at refer to the 
5f60: 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20  same underlying 
5f70: 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e  BtShared object.
5f80: 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f  .** .** Schema o
5f90: 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d  bjects are autom
5fa0: 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63  atically dealloc
5fb0: 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61  ated when the la
5fc0: 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a  st Btree that.**
5fd0: 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d   references them
5fe0: 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20   is destroyed.  
5ff0: 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61   The TEMP Schema
6000: 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65   is manually fre
6010: 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
6020: 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41  _close()..*.** A
6030: 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20   thread must be 
6040: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
6050: 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
6060: 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72  ding Btree in or
6070: 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73  der.** to access
6080: 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e   Schema content.
6090: 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74    This implies t
60a0: 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d  hat the thread m
60b0: 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68  ust also be.** h
60c0: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
60d0: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f  n the sqlite3 co
60e0: 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  nnection pointer
60f0: 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42   that owns the B
6100: 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54  tree..** For a T
6110: 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79  EMP Schema, only
6120: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
6130: 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65  mutex is require
6140: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68  d..*/.struct Sch
6150: 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65  ema {.  int sche
6160: 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20  ma_cookie;   /* 
6170: 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  Database schema 
6180: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
6190: 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  or this file */.
61a0: 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f    int iGeneratio
61b0: 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61  n;     /* Genera
61c0: 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49  tion counter.  I
61d0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
61e0: 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20  each change */. 
61f0: 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20   Hash tblHash;  
6200: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62        /* All tab
6210: 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  les indexed by n
6220: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64  ame */.  Hash id
6230: 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  xHash;        /*
6240: 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64   All (named) ind
6250: 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  ices indexed by 
6260: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74  name */.  Hash t
6270: 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f  rigHash;       /
6280: 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69  * All triggers i
6290: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
62a0: 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73  /.  Hash fkeyHas
62b0: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
62c0: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20  foreign keys by 
62d0: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
62e0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65   name */.  Table
62f0: 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20   *pSeqTab;      
6300: 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65  /* The sqlite_se
6310: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65  quence table use
6320: 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45  d by AUTOINCREME
6330: 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f  NT */.  u8 file_
6340: 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20  format;      /* 
6350: 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65  Schema format ve
6360: 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66  rsion for this f
6370: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ile */.  u8 enc;
6380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6390: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75   Text encoding u
63a0: 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61  sed by this data
63b0: 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c  base */.  u16 fl
63c0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ags;           /
63d0: 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74  * Flags associat
63e0: 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68  ed with this sch
63f0: 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63  ema */.  int cac
6400: 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a  he_size;      /*
6410: 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
6420: 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63   to use in the c
6430: 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ache */.};../*.*
6440: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
6450: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
6460: 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
6470: 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a  r bits in the .*
6480: 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  * Db.pSchema->fl
6490: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
64a0: 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65  efine DbHasPrope
64b0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
64c0: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
64d0: 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29  hema->flags&(P))
64e0: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
64f0: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
6500: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
6510: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66  Db[I].pSchema->f
6520: 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
6530: 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65  efine DbSetPrope
6540: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
6550: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
6560: 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  ma->flags|=(P).#
6570: 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72  define DbClearPr
6580: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
6590: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
65a0: 65 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  ema->flags&=~(P)
65b0: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
65c0: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44  values for the D
65d0: 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  B.pSchema->flags
65e0: 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68   field..**.** Th
65f0: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
6600: 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61 66  d flag is set af
6610: 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ter the database
6620: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
6630: 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e  .** read into in
6640: 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c  ternal hash tabl
6650: 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72  es..**.** DB_Unr
6660: 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20  esetViews means 
6670: 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  that one or more
6680: 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75   views have colu
6690: 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a  mn names that.**
66a0: 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65   have been fille
66b0: 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73  d out.  If the s
66c0: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74  chema changes, t
66d0: 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  hese column name
66e0: 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67  s might.** chang
66f0: 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69  es and so the vi
6700: 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20  ew will need to 
6710: 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65  be reset..*/.#de
6720: 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f  fine DB_SchemaLo
6730: 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20 20  aded    0x0001  
6740: 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68 61  /* The schema ha
6750: 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f  s been loaded */
6760: 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65  .#define DB_Unre
6770: 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30 30  setViews    0x00
6780: 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77  02  /* Some view
6790: 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20 63  s have defined c
67a0: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23  olumn names */.#
67b0: 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20  define DB_Empty 
67c0: 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34            0x0004
67d0: 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73    /* The file is
67e0: 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30   empty (length 0
67f0: 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a   bytes) */../*.*
6800: 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
6810: 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20  different kinds 
6820: 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63  of things that c
6830: 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a  an be limited.**
6840: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
6850: 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72  e3_limit() inter
6860: 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  face..*/.#define
6870: 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20   SQLITE_N_LIMIT 
6880: 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52  (SQLITE_LIMIT_TR
6890: 49 47 47 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a  IGGER_DEPTH+1)..
68a0: 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  /*.** Lookaside 
68b0: 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20  malloc is a set 
68c0: 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75  of fixed-size bu
68d0: 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62  ffers that can b
68e0: 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74  e used.** to sat
68f0: 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73  isfy small trans
6900: 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ient memory allo
6910: 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20  cation requests 
6920: 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61  for objects.** a
6930: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
6940: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
6950: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
6960: 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20    The use of.** 
6970: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
6980: 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e   provides a sign
6990: 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61  ificant performa
69a0: 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a  nce enhancement.
69b0: 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20  ** (approx 10%) 
69c0: 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65  by avoiding nume
69d0: 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65  rous malloc/free
69e0: 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20   requests while 
69f0: 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73  parsing.** SQL s
6a00: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
6a10: 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73   The Lookaside s
6a20: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63  tructure holds c
6a30: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66  onfiguration inf
6a40: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
6a50: 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  he.** lookaside 
6a60: 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d  malloc subsystem
6a70: 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c  .  Each availabl
6a80: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
6a90: 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f  ion in.** the lo
6aa0: 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65  okaside subsyste
6ab0: 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61  m is stored on a
6ac0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
6ad0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a  LookasideSlot.**
6ae0: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20   objects..**.** 
6af0: 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  Lookaside alloca
6b00: 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61  tions are only a
6b10: 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63  llowed for objec
6b20: 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f  ts that are asso
6b30: 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61  ciated.** with a
6b40: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
6b50: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
6b60: 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20    Hence, schema 
6b70: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e  information cann
6b80: 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20  ot.** be stored 
6b90: 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63  in lookaside bec
6ba0: 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63  ause in shared c
6bb0: 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63  ache mode the sc
6bc0: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
6bd0: 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79  .** is shared by
6be0: 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
6bf0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20  se connections. 
6c00: 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c   Therefore, whil
6c10: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68  e parsing.** sch
6c20: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ema information,
6c30: 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62   the Lookaside.b
6c40: 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20  Enabled flag is 
6c50: 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a  cleared so that.
6c60: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** lookaside all
6c70: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74  ocations are not
6c80: 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75   used to constru
6c90: 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62  ct the schema ob
6ca0: 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  jects..*/.struct
6cb0: 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75   Lookaside {.  u
6cc0: 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20  16 sz;          
6cd0: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
6ce0: 66 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e  f each buffer in
6cf0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62   bytes */.  u8 b
6d00: 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20  Enabled;        
6d10: 20 20 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20      /* False to 
6d20: 64 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b  disable new look
6d30: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
6d40: 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f  s */.  u8 bMallo
6d50: 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ced;           /
6d60: 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74  * True if pStart
6d70: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
6d80: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
6d90: 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20  */.  int nOut;  
6da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6db0: 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72  Number of buffer
6dc0: 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63  s currently chec
6dd0: 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74  ked out */.  int
6de0: 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20   mxOut;         
6df0: 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65       /* Highwate
6e00: 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20  r mark for nOut 
6e10: 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b  */.  int anStat[
6e20: 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  3];          /* 
6e30: 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a  0: hits.  1: siz
6e40: 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75  e misses.  2: fu
6e50: 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c  ll misses */.  L
6e60: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46  ookasideSlot *pF
6e70: 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ree;   /* List o
6e80: 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66  f available buff
6e90: 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
6ea0: 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  Start;          
6eb0: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f   /* First byte o
6ec0: 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  f available memo
6ed0: 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f  ry space */.  vo
6ee0: 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  id *pEnd;       
6ef0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
6f00: 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20  yte past end of 
6f10: 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20  available space 
6f20: 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f  */.};.struct Loo
6f30: 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c  kasideSlot {.  L
6f40: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e  ookasideSlot *pN
6f50: 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  ext;    /* Next 
6f60: 62 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69  buffer in the li
6f70: 73 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65  st of free buffe
6f80: 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  rs */.};../*.** 
6f90: 41 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72  A hash table for
6fa0: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
6fb0: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73  tions..**.** Has
6fc0: 68 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73  h each FuncDef s
6fd0: 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e  tructure into on
6fe0: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
6ff0: 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a  Hash.a[] slots..
7000: 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72  ** Collisions ar
7010: 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66  e on the FuncDef
7020: 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f  .pHash chain..*/
7030: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48  .struct FuncDefH
7040: 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20  ash {.  FuncDef 
7050: 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a  *a[23];       /*
7060: 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   Hash table for 
7070: 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a  functions */.};.
7080: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
7090: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
70a0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
70b0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
70c0: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
70d0: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
70e0: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
70f0: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
7100: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
7110: 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20  /.  struct Vdbe 
7120: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
7130: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
7140: 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  ive virtual mach
7150: 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  ines */.  CollSe
7160: 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20  q *pDfltColl;   
7170: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
7180: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
7190: 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52   sequence (BINAR
71a0: 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  Y) */.  sqlite3_
71b0: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
71c0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
71d0: 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44  ion mutex */.  D
71e0: 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20  b *aDb;         
71f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7200: 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  All backends */.
7210: 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20    int nDb;      
7220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7230: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63  /* Number of bac
7240: 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20  kends currently 
7250: 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  in use */.  int 
7260: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
7270: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73            /* Mis
7280: 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73  cellaneous flags
7290: 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  . See below */. 
72a0: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20   i64 lastRowid; 
72b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
72c0: 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20  * ROWID of most 
72d0: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73  recent insert (s
72e0: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 75  ee above) */.  u
72f0: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
7300: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
7310: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
7320: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
7330: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
7340: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
7350: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
7360: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
7370: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
7380: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
7390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
73a0: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
73b0: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
73c0: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
73d0: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
73e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
73f0: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
7400: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
7410: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
7420: 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20  autoCommit;     
7430: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
7440: 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
7450: 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70  ag. */.  u8 temp
7460: 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20  _store;         
7470: 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c         /* 1: fil
7480: 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64  e 2: memory 0: d
7490: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d  efault */.  u8 m
74a0: 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20  allocFailed;    
74b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
74c0: 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65  e if we have see
74d0: 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  n a malloc failu
74e0: 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  re */.  u8 dfltL
74f0: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
7500: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
7510: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
7520: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
7530: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
7540: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
7550: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
7560: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
7570: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
7580: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
7590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
75a0: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
75b0: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
75c0: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
75d0: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
75e0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
75f0: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
7600: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
7610: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
7620: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
7630: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
7640: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
7650: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
7660: 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61   */.  int nextPa
7670: 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20  gesize;         
7680: 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20      /* Pagesize 
7690: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
76a0: 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69  >0 */.  u32 magi
76b0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
76c0: 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e        /* Magic n
76d0: 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74  umber for detect
76e0: 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20   library misuse 
76f0: 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65  */.  int nChange
7700: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7710: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
7720: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
7730: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
7740: 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b  nt nTotalChange;
7750: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7760: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
7770: 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f  y sqlite3_total_
7780: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
7790: 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  nt aLimit[SQLITE
77a0: 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20  _N_LIMIT];   /* 
77b0: 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 73 74 72 75  Limits */.  stru
77c0: 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e  ct sqlite3InitIn
77d0: 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66  fo {      /* Inf
77e0: 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75  ormation used du
77f0: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
7800: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ion */.    int n
7810: 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  ewTnum;         
7820: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61         /* Rootpa
7830: 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e  ge of table bein
7840: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
7850: 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20  .    u8 iDb;    
7860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7870: 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c   /* Which db fil
7880: 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69  e is being initi
7890: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
78a0: 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20   busy;          
78b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55            /* TRU
78c0: 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  E if currently i
78d0: 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20  nitializing */. 
78e0: 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67     u8 orphanTrig
78f0: 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ger;           /
7900: 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  * Last statement
7910: 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d   is orphaned TEM
7920: 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d  P trigger */.  }
7930: 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 61 63 74   init;.  int act
7940: 69 76 65 56 64 62 65 43 6e 74 3b 20 20 20 20 20  iveVdbeCnt;     
7950: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
7960: 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e   of VDBEs curren
7970: 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 2a 2f  tly executing */
7980: 0a 20 20 69 6e 74 20 77 72 69 74 65 56 64 62 65  .  int writeVdbe
7990: 43 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cnt;            
79a0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
79b0: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
79c0: 61 72 65 20 77 72 69 74 69 6e 67 20 2a 2f 0a 20  are writing */. 
79d0: 20 69 6e 74 20 76 64 62 65 45 78 65 63 43 6e 74   int vdbeExecCnt
79e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
79f0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
7a00: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
7a10: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
7a20: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
7a30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7a40: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
7a50: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
7a60: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
7a80: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
7a90: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
7aa0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63  /.  void (*xTrac
7ab0: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
7ac0: 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a  har*);        /*
7ad0: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
7ae0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
7af0: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7b10: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
7b20: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
7b30: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
7b40: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
7b50: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
7b60: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
7b70: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
7b80: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
7b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ba0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
7bb0: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
7bc0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
7bd0: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
7be0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
7bf0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
7c00: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  itCallback() */ 
7c10: 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d    .  int (*xComm
7c20: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
7c30: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
7c40: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
7c50: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
7c60: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
7c70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
7c80: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
7c90: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  ckCallback() */ 
7ca0: 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c    .  void (*xRol
7cb0: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
7cc0: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
7cd0: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
7ce0: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
7cf0: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
7d00: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
7d10: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
7d20: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
7d30: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
7d40: 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  t64);.#ifndef SQ
7d50: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
7d60: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
7d70: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
7d80: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
7d90: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
7da0: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
7db0: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
7dc0: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
7dd0: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
7de0: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
7df0: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
7e00: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
7e10: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
7e20: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
7e30: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
7e40: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
7e50: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
7e60: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
7e70: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
7e80: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 63 68 61  message */.  cha
7e90: 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20  r *zErrMsg;     
7ea0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
7eb0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
7ec0: 6d 65 73 73 61 67 65 20 28 55 54 46 2d 38 20 65  message (UTF-8 e
7ed0: 6e 63 6f 64 65 64 29 20 2a 2f 0a 20 20 63 68 61  ncoded) */.  cha
7ee0: 72 20 2a 7a 45 72 72 4d 73 67 31 36 3b 20 20 20  r *zErrMsg16;   
7ef0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
7f00: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
7f10: 6d 65 73 73 61 67 65 20 28 55 54 46 2d 31 36 20  message (UTF-16 
7f20: 65 6e 63 6f 64 65 64 29 20 2a 2f 0a 20 20 75 6e  encoded) */.  un
7f30: 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69  ion {.    volati
7f40: 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75  le int isInterru
7f50: 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66  pted; /* True if
7f60: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
7f70: 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  pt has been call
7f80: 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65  ed */.    double
7f90: 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20   notUsed1;      
7fa0: 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20        /* Spacer 
7fb0: 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f  */.  } u1;.  Loo
7fc0: 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65  kaside lookaside
7fd0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f  ;          /* Lo
7fe0: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63  okaside malloc c
7ff0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a  onfiguration */.
8000: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
8010: 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
8020: 4e 0a 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29  N.  int (*xAuth)
8030: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
8040: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
8050: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
8060: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20  onst char*);.   
8070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8080: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8090: 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61  Access authoriza
80a0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  tion function */
80b0: 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72  .  void *pAuthAr
80c0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
80d0: 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
80e0: 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61   to the access a
80f0: 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  uth function */.
8100: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
8110: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
8120: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
8130: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
8140: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20  void *);     /* 
8150: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
8160: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
8170: 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20  *pProgressArg;  
8180: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
8190: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67  ment to the prog
81a0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
81b0: 0a 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73  .  int nProgress
81c0: 4f 70 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ops;            
81d0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70   /* Number of op
81e0: 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65  codes for progre
81f0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  ss callback */.#
8200: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
8210: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
8220: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54  LTABLE.  int nVT
8230: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
8240: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61         /* Alloca
8250: 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72  ted size of aVTr
8260: 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d  ans */.  Hash aM
8270: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20  odule;          
8280: 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61         /* popula
8290: 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ted by sqlite3_c
82a0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
82b0: 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74  /.  VtabCtx *pVt
82c0: 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20  abCtx;          
82d0: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
82e0: 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e   active vtab con
82f0: 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20  nect/create */. 
8300: 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e   VTable **aVTran
8310: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
8320: 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  * Virtual tables
8330: 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73   with open trans
8340: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61  actions */.  VTa
8350: 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74  ble *pDisconnect
8360: 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65  ;    /* Disconne
8370: 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74  ct these in next
8380: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
8390: 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46  () */.#endif.  F
83a0: 75 6e 63 44 65 66 48 61 73 68 20 61 46 75 6e 63  uncDefHash aFunc
83b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
83c0: 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f  Hash table of co
83d0: 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  nnection functio
83e0: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f  ns */.  Hash aCo
83f0: 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20  llSeq;          
8400: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c        /* All col
8410: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
8420: 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65   */.  BusyHandle
8430: 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20  r busyHandler;  
8440: 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c      /* Busy call
8450: 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62  back */.  Db aDb
8460: 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20  Static[2];      
8470: 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69          /* Stati
8480: 63 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20  c space for the 
8490: 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e  2 default backen
84a0: 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  ds */.  Savepoin
84b0: 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20  t *pSavepoint;  
84c0: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
84d0: 20 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e   active savepoin
84e0: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79  ts */.  int busy
84f0: 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20  Timeout;        
8500: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61        /* Busy ha
8510: 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69  ndler timeout, i
8520: 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20  n msec */.  int 
8530: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  nSavepoint;     
8540: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
8550: 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73  ber of non-trans
8560: 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
8570: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74  s */.  int nStat
8580: 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20  ement;          
8590: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
85a0: 66 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65  f nested stateme
85b0: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
85c0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
85d0: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
85e0: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
85f0: 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  red constraints 
8600: 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
8610: 2e 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79  . */.  int *pnBy
8620: 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20  tesFreed;       
8630: 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e       /* If not N
8640: 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74  ULL, increment t
8650: 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20  his in DbFree() 
8660: 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  */..#ifdef SQLIT
8670: 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
8680: 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20  NOTIFY.  /* The 
8690: 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62  following variab
86a0: 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74  les are all prot
86b0: 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41  ected by the STA
86c0: 54 49 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a  TIC_MASTER .  **
86d0: 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73   mutex, not by s
86e0: 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68  qlite3.mutex. Th
86f0: 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63  ey are used by c
8700: 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e  ode in notify.c.
8710: 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e   .  **.  ** When
8720: 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63   X.pUnlockConnec
8730: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
8740: 61 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61  ans that X is wa
8750: 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20  iting for Y to. 
8760: 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68   ** unlock so th
8770: 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65  at it can procee
8780: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65  d..  **.  ** Whe
8790: 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  n X.pBlockingCon
87a0: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
87b0: 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65   means that some
87c0: 74 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69  thing that X tri
87d0: 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f  ed.  ** tried to
87e0: 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69   do recently fai
87f0: 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49  led with an SQLI
8800: 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20  TE_LOCKED error 
8810: 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a  due to locks.  *
8820: 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a  * held by Y..  *
8830: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c  /.  sqlite3 *pBl
8840: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
8850: 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20  ; /* Connection 
8860: 74 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49  that caused SQLI
8870: 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73  TE_LOCKED */.  s
8880: 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43  qlite3 *pUnlockC
8890: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20  onnection;      
88a0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
88b0: 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20  on to watch for 
88c0: 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  unlock */.  void
88d0: 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20   *pUnlockArg;   
88e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88f0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
8900: 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a   xUnlockNotify *
8910: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f  /.  void (*xUnlo
8920: 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a  ckNotify)(void *
8930: 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c  *, int);  /* Unl
8940: 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62  ock notify callb
8950: 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ack */.  sqlite3
8960: 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20   *pNextBlocked; 
8970: 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
8980: 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c  n list of all bl
8990: 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ocked connection
89a0: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  s */.#endif.};..
89b0: 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f  /*.** A macro to
89c0: 20 64 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e   discover the en
89d0: 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61  coding of a data
89e0: 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  base..*/.#define
89f0: 20 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e   ENC(db) ((db)->
8a00: 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[0].pSchema->
8a10: 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  enc)../*.** Poss
8a20: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
8a30: 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67  the sqlite3.flag
8a40: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  s..*/.#define SQ
8a50: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20  LITE_VdbeTrace  
8a60: 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20      0x00000001  
8a70: 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65  /* True to trace
8a80: 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20   VDBE execution 
8a90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8aa0: 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20  E_InternChanges 
8ab0: 20 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20   0x00000002  /* 
8ac0: 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68  Uncommitted Hash
8ad0: 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a   table changes *
8ae0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8af0: 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20  _FullColNames   
8b00: 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53  0x00000004  /* S
8b10: 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20  how full column 
8b20: 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20  names on SELECT 
8b30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8b40: 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20  E_ShortColNames 
8b50: 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20   0x00000008  /* 
8b60: 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d  Show short colum
8b70: 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  ns names */.#def
8b80: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
8b90: 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30  Rows      0x0000
8ba0: 30 30 31 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72  0010  /* Count r
8bb0: 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49  ows changed by I
8bc0: 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20  NSERT, */.      
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bf0: 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c      /*   DELETE,
8c00: 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72   or UPDATE and r
8c10: 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20  eturn */.       
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c40: 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e     /*   the coun
8c50: 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61  t using a callba
8c60: 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ck. */.#define S
8c70: 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61  QLITE_NullCallba
8c80: 63 6b 20 20 20 30 78 30 30 30 30 30 30 32 30 20  ck   0x00000020 
8c90: 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63   /* Invoke the c
8ca0: 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20  allback once if 
8cb0: 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  the */.         
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 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74   /*   result set
8cf0: 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65   is empty */.#de
8d00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54  fine SQLITE_SqlT
8d10: 72 61 63 65 20 20 20 20 20 20 20 30 78 30 30 30  race       0x000
8d20: 30 30 30 34 30 20 20 2f 2a 20 44 65 62 75 67 20  00040  /* Debug 
8d30: 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20  print SQL as it 
8d40: 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66  executes */.#def
8d50: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  ine SQLITE_VdbeL
8d60: 69 73 74 69 6e 67 20 20 20 20 30 78 30 30 30 30  isting    0x0000
8d70: 30 30 38 30 20 20 2f 2a 20 44 65 62 75 67 20 6c  0080  /* Debug l
8d80: 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20  istings of VDBE 
8d90: 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66  programs */.#def
8da0: 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65  ine SQLITE_Write
8db0: 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30  Schema    0x0000
8dc0: 30 31 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75  0100  /* OK to u
8dd0: 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53  pdate SQLITE_MAS
8de0: 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  TER */.#define S
8df0: 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54  QLITE_VdbeAddopT
8e00: 72 61 63 65 20 30 78 30 30 30 30 30 32 30 30 20  race 0x00000200 
8e10: 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65   /* Trace sqlite
8e20: 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c  3VdbeAddOp() cal
8e30: 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ls */.#define SQ
8e40: 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b  LITE_IgnoreCheck
8e50: 73 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20  s   0x00000400  
8e60: 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63  /* Do not enforc
8e70: 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  e check constrai
8e80: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
8e90: 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
8ea0: 69 74 74 65 64 20 30 78 30 30 30 30 38 30 30 20  itted 0x0000800 
8eb0: 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63   /* For shared-c
8ec0: 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65  ache mode */.#de
8ed0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61  fine SQLITE_Lega
8ee0: 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30  cyFileFmt  0x000
8ef0: 30 31 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65  01000  /* Create
8f00: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69   new databases i
8f10: 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64  n format 1 */.#d
8f20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
8f30: 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30  lFSync      0x00
8f40: 30 30 32 30 30 30 20 20 2f 2a 20 55 73 65 20 66  002000  /* Use f
8f50: 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65  ull fsync on the
8f60: 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66   backend */.#def
8f70: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46  ine SQLITE_CkptF
8f80: 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30  ullFSync  0x0000
8f90: 34 30 30 30 20 20 2f 2a 20 55 73 65 20 66 75 6c  4000  /* Use ful
8fa0: 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63  l fsync for chec
8fb0: 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  kpoint */.#defin
8fc0: 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72  e SQLITE_Recover
8fd0: 79 4d 6f 64 65 20 20 20 30 78 30 30 30 30 38 30  yMode   0x000080
8fe0: 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63  00  /* Ignore sc
8ff0: 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23  hema errors */.#
9000: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
9010: 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30  verseOrder   0x0
9020: 30 30 31 30 30 30 30 20 20 2f 2a 20 52 65 76 65  0010000  /* Reve
9030: 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45  rse unordered SE
9040: 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LECTs */.#define
9050: 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67   SQLITE_RecTrigg
9060: 65 72 73 20 20 20 20 30 78 30 30 30 32 30 30 30  ers    0x0002000
9070: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63  0  /* Enable rec
9080: 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20  ursive triggers 
9090: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
90a0: 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20  E_ForeignKeys   
90b0: 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20   0x00040000  /* 
90c0: 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20  Enforce foreign 
90d0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
90e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
90f0: 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20  TE_AutoIndex    
9100: 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a    0x00080000  /*
9110: 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69   Enable automati
9120: 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  c indexes */.#de
9130: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66  fine SQLITE_Pref
9140: 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 31  erBuiltin  0x001
9150: 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72  00000  /* Prefer
9160: 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e  ence to built-in
9170: 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e   funcs */.#defin
9180: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
9190: 65 6e 73 69 6f 6e 20 20 30 78 30 30 32 30 30 30  ension  0x002000
91a0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
91b0: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
91c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
91d0: 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78  nableTrigger  0x
91e0: 30 30 34 30 30 30 30 30 20 20 2f 2a 20 54 72 75  00400000  /* Tru
91f0: 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67  e to enable trig
9200: 67 65 72 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42  gers */../*.** B
9210: 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74  its of the sqlit
9220: 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69  e3.dbOptFlags fi
9230: 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65  eld that are use
9240: 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69  d by the.** sqli
9250: 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
9260: 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c  (SQLITE_TESTCTRL
9270: 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e  _OPTIMIZATIONS,.
9280: 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f  ..) interface to
9290: 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20  .** selectively 
92a0: 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20  disable various 
92b0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a  optimizations..*
92c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
92d0: 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20  _QueryFlattener 
92e0: 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72  0x0001   /* Quer
92f0: 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a  y flattening */.
9300: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
9310: 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78  olumnCache    0x
9320: 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  0002   /* Column
9330: 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e   cache */.#defin
9340: 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79  e SQLITE_GroupBy
9350: 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20  Order   0x0004  
9360: 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65   /* GROUPBY cove
9370: 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a  r of ORDERBY */.
9380: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
9390: 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78  actorOutConst 0x
93a0: 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61  0008   /* Consta
93b0: 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a  nt factoring */.
93c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
93d0: 64 78 52 65 61 6c 41 73 49 6e 74 20 20 20 30 78  dxRealAsInt   0x
93e0: 30 30 31 30 20 20 20 2f 2a 20 53 74 6f 72 65 20  0010   /* Store 
93f0: 52 45 41 4c 20 61 73 20 49 4e 54 20 69 6e 20 69  REAL as INT in i
9400: 6e 64 69 63 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndices */.#defin
9410: 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63  e SQLITE_Distinc
9420: 74 4f 70 74 20 20 20 20 30 78 30 30 32 30 20 20  tOpt    0x0020  
9430: 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69   /* DISTINCT usi
9440: 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ng indexes */.#d
9450: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76  efine SQLITE_Cov
9460: 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30  erIdxScan   0x00
9470: 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67  40   /* Covering
9480: 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a   index scans */.
9490: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f  #define SQLITE_O
94a0: 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78  rderByIdxJoin 0x
94b0: 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52 20  0080   /* ORDER 
94c0: 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20  BY of joins via 
94d0: 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
94e0: 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f   SQLITE_SubqCoro
94f0: 75 74 69 6e 65 20 20 30 78 30 31 30 30 20 20 20  utine  0x0100   
9500: 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62 71  /* Evaluate subq
9510: 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75 74  ueries as corout
9520: 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ines */.#define 
9530: 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76  SQLITE_Transitiv
9540: 65 20 20 20 20 20 30 78 30 32 30 30 20 20 20 2f  e     0x0200   /
9550: 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e  * Transitive con
9560: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
9570: 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70  ine SQLITE_AllOp
9580: 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66  ts        0xffff
9590: 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69     /* All optimi
95a0: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  zations */../*.*
95b0: 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73  * Macros for tes
95c0: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
95d0: 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  not optimization
95e0: 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72  s are enabled or
95f0: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69   disabled..*/.#i
9600: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
9610: 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23  T_BUILTIN_TEST.#
9620: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
9630: 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20  ionDisabled(db, 
9640: 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64  mask)  (((db)->d
9650: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
9660: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70  )!=0).#define Op
9670: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
9680: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28  d(db, mask)   ((
9690: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
96a0: 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c  &(mask))==0).#el
96b0: 73 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  se.#define Optim
96c0: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
96d0: 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65  db, mask)  0.#de
96e0: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
96f0: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
9700: 6b 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  k)   1.#endif../
9710: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
9720: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c  lues for the sql
9730: 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e  ite.magic field.
9740: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20  .** The numbers 
9750: 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20  are obtained at 
9760: 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20  random and have 
9770: 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69  no special meani
9780: 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61  ng, other.** tha
9790: 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74  n being distinct
97a0: 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65   from one anothe
97b0: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r..*/.#define SQ
97c0: 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20  LITE_MAGIC_OPEN 
97d0: 20 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20      0xa029a697  
97e0: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f  /* Database is o
97f0: 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pen */.#define S
9800: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
9810: 45 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20  ED   0x9f3c2d33 
9820: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
9830: 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  closed */.#defin
9840: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53  e SQLITE_MAGIC_S
9850: 49 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32  ICK     0x4b7712
9860: 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64  90  /* Error and
9870: 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20   awaiting close 
9880: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9890: 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20  E_MAGIC_BUSY    
98a0: 20 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20   0xf03b7906  /* 
98b0: 44 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74  Database current
98c0: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65  ly in use */.#de
98d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
98e0: 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33  C_ERROR    0xb53
98f0: 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c  57930  /* An SQL
9900: 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72  ITE_MISUSE error
9910: 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65   occurred */.#de
9920: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
9930: 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63  C_ZOMBIE   0x64c
9940: 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20  ffc7f  /* Close 
9950: 77 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d  with last statem
9960: 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a  ent close */../*
9970: 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e  .** Each SQL fun
9980: 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64  ction is defined
9990: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
99a0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
99b0: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20  .** structure.  
99c0: 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
99d0: 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73  s structure is s
99e0: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
99f0: 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73  ite.aFunc.** has
9a00: 68 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d  h table.  When m
9a10: 75 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e  ultiple function
9a20: 73 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  s have the same 
9a30: 6e 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74  name, the hash t
9a40: 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74  able.** points t
9a50: 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  o a linked list 
9a60: 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75  of these structu
9a70: 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  res..*/.struct F
9a80: 75 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e  uncDef {.  i16 n
9a90: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
9aa0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
9ab0: 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e  uments.  -1 mean
9ac0: 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20  s unlimited */. 
9ad0: 20 75 38 20 69 50 72 65 66 45 6e 63 3b 20 20 20   u8 iPrefEnc;   
9ae0: 20 20 20 20 20 20 2f 2a 20 50 72 65 66 65 72 72        /* Preferr
9af0: 65 64 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  ed text encoding
9b00: 20 28 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 31   (SQLITE_UTF8, 1
9b10: 36 4c 45 2c 20 31 36 42 45 29 20 2a 2f 0a 20 20  6LE, 16BE) */.  
9b20: 75 38 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  u8 flags;       
9b30: 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d       /* Some com
9b40: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49  bination of SQLI
9b50: 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76  TE_FUNC_* */.  v
9b60: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20  oid *pUserData; 
9b70: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
9b80: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
9b90: 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20  FuncDef *pNext; 
9ba0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e       /* Next fun
9bb0: 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20  ction with same 
9bc0: 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  name */.  void (
9bd0: 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  *xFunc)(sqlite3_
9be0: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
9bf0: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
9c00: 2a 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69  * Regular functi
9c10: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  on */.  void (*x
9c20: 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f  Step)(sqlite3_co
9c30: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
9c40: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
9c50: 41 67 67 72 65 67 61 74 65 20 73 74 65 70 20 2a  Aggregate step *
9c60: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61  /.  void (*xFina
9c70: 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f  lize)(sqlite3_co
9c80: 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20  ntext*);        
9c90: 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65          /* Aggre
9ca0: 67 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a  gate finalizer *
9cb0: 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
9cc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20           /* SQL 
9cd0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
9ce0: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44  tion. */.  FuncD
9cf0: 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20  ef *pHash;      
9d00: 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64  /* Next with a d
9d10: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75  ifferent name bu
9d20: 74 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20  t the same hash 
9d30: 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63  */.  FuncDestruc
9d40: 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
9d50: 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65  ;   /* Reference
9d60: 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63   counted destruc
9d70: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
9d80: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73  };../*.** This s
9d90: 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75  tructure encapsu
9da0: 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e  lates a user-fun
9db0: 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72  ction destructor
9dc0: 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a   callback (as.**
9dd0: 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e   configured usin
9de0: 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  g create_functio
9df0: 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65  n_v2()) and a re
9e00: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e  ference counter.
9e10: 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f   When.** create_
9e20: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73  function_v2() is
9e30: 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74   called to creat
9e40: 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  e a function wit
9e50: 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a  h a destructor,.
9e60: 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65  ** a single obje
9e70: 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
9e80: 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75  is allocated. Fu
9e90: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65  ncDestructor.nRe
9ea0: 66 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20  f is set to .** 
9eb0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75  the number of Fu
9ec0: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72  ncDef objects cr
9ed0: 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20  eated (either 1 
9ee0: 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20  or 3, depending 
9ef0: 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72  on whether.** or
9f00: 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69   not the specifi
9f10: 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53  ed encoding is S
9f20: 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20  QLITE_ANY). The 
9f30: 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63  FuncDef.pDestruc
9f40: 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66  tor.** member of
9f50: 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77   each of the new
9f60: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
9f70: 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74   is set to point
9f80: 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65   to the allocate
9f90: 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63  d.** FuncDestruc
9fa0: 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  tor..**.** There
9fb0: 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20  after, when one 
9fc0: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f  of the FuncDef o
9fd0: 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65  bjects is delete
9fe0: 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65  d, the reference
9ff0: 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69  .** count on thi
a000: 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72  s object is decr
a010: 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74  emented. When it
a020: 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20   reaches 0, the 
a030: 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73  destructor.** is
a040: 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65   invoked and the
a050: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
a060: 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e  structure freed.
a070: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
a080: 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e  estructor {.  in
a090: 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28  t nRef;.  void (
a0a0: 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
a0b0: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65  *);.  void *pUse
a0c0: 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  rData;.};../*.**
a0d0: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
a0e0: 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61   for FuncDef.fla
a0f0: 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74  gs.  Note that t
a100: 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f  he _LENGTH and _
a110: 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73  TYPEOF.** values
a120: 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   must correspond
a130: 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   to OPFLAG_LENGT
a140: 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f  HARG and OPFLAG_
a150: 54 59 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72  TYPEOFARG.  Ther
a160: 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28  e.** are assert(
a170: 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  ) statements in 
a180: 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69  the code to veri
a190: 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66  fy this..*/.#def
a1a0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
a1b0: 4c 49 4b 45 20 20 20 20 20 30 78 30 31 20 2f 2a  LIKE     0x01 /*
a1c0: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
a1d0: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
a1e0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
a1f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
a200: 20 20 20 20 20 30 78 30 32 20 2f 2a 20 43 61 73       0x02 /* Cas
a210: 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45  e-sensitive LIKE
a220: 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a  -type function *
a230: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a240: 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30  _FUNC_EPHEM    0
a250: 78 30 34 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c  x04 /* Ephemeral
a260: 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56  .  Delete with V
a270: 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  DBE */.#define S
a280: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
a290: 4f 4c 4c 20 30 78 30 38 20 2f 2a 20 73 71 6c 69  OLL 0x08 /* sqli
a2a0: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
a2b0: 71 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c  q() might be cal
a2c0: 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  led */.#define S
a2d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54  QLITE_FUNC_COUNT
a2e0: 20 20 20 20 30 78 31 30 20 2f 2a 20 42 75 69 6c      0x10 /* Buil
a2f0: 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67  t-in count(*) ag
a300: 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69  gregate */.#defi
a310: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
a320: 4f 41 4c 45 53 43 45 20 30 78 32 30 20 2f 2a 20  OALESCE 0x20 /* 
a330: 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63  Built-in coalesc
a340: 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20  e() or ifnull() 
a350: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
a360: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
a370: 4c 45 4e 47 54 48 20 20 20 30 78 34 30 20 2f 2a  LENGTH   0x40 /*
a380: 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68   Built-in length
a390: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
a3a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
a3b0: 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 38 30  NC_TYPEOF   0x80
a3c0: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70   /* Built-in typ
a3d0: 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  eof() function *
a3e0: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
a3f0: 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63  lowing three mac
a400: 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c  ros, FUNCTION(),
a410: 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20   LIKEFUNC() and 
a420: 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a  AGGREGATE() are.
a430: 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  ** used to creat
a440: 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65  e the initialize
a450: 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44  rs for the FuncD
a460: 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  ef structures..*
a470: 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28  *.**   FUNCTION(
a480: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
a490: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
a4a0: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
a4b0: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
a4c0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
a4d0: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
a4e0: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d  zName .**     im
a4f0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
a500: 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
a510: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
a520: 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
a530: 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
a540: 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
a550: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
a560: 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
a570: 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
a580: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
a590: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
a5a0: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
a5b0: 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72  n. If .**     ar
a5c0: 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72  gument bNC is tr
a5d0: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c  ue, then the SQL
a5e0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
a5f0: 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  L flag is set..*
a600: 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45  *.**   AGGREGATE
a610: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
a620: 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20  rg, bNC, xStep, 
a630: 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55  xFinal).**     U
a640: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
a650: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
a660: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
a670: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
a680: 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
a690: 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
a6a0: 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
a6b0: 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
a6c0: 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
a6d0: 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
a6e0: 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
a6f0: 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
a700: 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
a710: 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
a720: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
a730: 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67  nArg, pArg, flag
a740: 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  s).**     Used t
a750: 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
a760: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
a770: 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
a780: 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20  ion zName .**   
a790: 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e    that accepts n
a7a0: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  Arg arguments an
a7b0: 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  d is implemented
a7c0: 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20   by a call to C 
a7d0: 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e  .**     function
a7e0: 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d   likeFunc. Argum
a7f0: 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74  ent pArg is cast
a800: 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61   to a (void *) a
a810: 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61  nd made.**     a
a820: 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20  vailable as the 
a830: 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61  function user-da
a840: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
a850: 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a  _data()). The.**
a860: 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61       FuncDef.fla
a870: 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  gs variable is s
a880: 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
a890: 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c  passed as the fl
a8a0: 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d  ags.**     param
a8b0: 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eter..*/.#define
a8c0: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
a8d0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
a8e0: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
a8f0: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
a900: 20 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e   (bNC*SQLITE_FUN
a910: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
a920: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
a930: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
a940: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
a950: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
a960: 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65   FUNCTION2(zName
a970: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
a980: 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46  C, xFunc, extraF
a990: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
a9a0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 28 62   SQLITE_UTF8, (b
a9b0: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
a9c0: 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c  EEDCOLL)|extraFl
a9d0: 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  ags, \.   SQLITE
a9e0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
a9f0: 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
aa00: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
aa10: 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e  .#define STR_FUN
aa20: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
aa30: 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, pArg, bNC, xF
aa40: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
aa50: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 62 4e 43  SQLITE_UTF8, bNC
aa60: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
aa70: 44 43 4f 4c 4c 2c 20 5c 0a 20 20 20 70 41 72 67  DCOLL, \.   pArg
aa80: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
aa90: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
aaa0: 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43  #define LIKEFUNC
aab0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
aac0: 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  g, flags) \.  {n
aad0: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
aae0: 2c 20 66 6c 61 67 73 2c 20 28 76 6f 69 64 20 2a  , flags, (void *
aaf0: 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e  )arg, 0, likeFun
ab00: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
ab10: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41   0, 0}.#define A
ab20: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
ab30: 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
ab40: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a  Step, xFinal) \.
ab50: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
ab60: 55 54 46 38 2c 20 6e 63 2a 53 51 4c 49 54 45 5f  UTF8, nc*SQLITE_
ab70: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c  FUNC_NEEDCOLL, \
ab80: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
ab90: 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30  O_PTR(arg), 0, 0
aba0: 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23  , xStep,xFinal,#
abb0: 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a  zName,0,0}../*.*
abc0: 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61  * All current sa
abd0: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f  vepoints are sto
abe0: 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20  red in a linked 
abf0: 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
ac00: 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76  .** sqlite3.pSav
ac10: 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73  epoint. The firs
ac20: 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65  t element in the
ac30: 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73   list is the mos
ac40: 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70  t recently.** op
ac50: 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  ened savepoint. 
ac60: 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61  Savepoints are a
ac70: 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74  dded to the list
ac80: 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20   by the vdbe.** 
ac90: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
aca0: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  truction..*/.str
acb0: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a  uct Savepoint {.
acc0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ace0: 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69        /* Savepoi
acf0: 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72  nt name (nul-ter
ad00: 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36  minated) */.  i6
ad10: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
ad20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad30: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
ad40: 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61  eferred fk viola
ad50: 74 69 6f 6e 73 20 2a 2f 0a 20 20 53 61 76 65 70  tions */.  Savep
ad60: 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  oint *pNext;    
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ad80: 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69  * Parent savepoi
ad90: 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d  nt (if any) */.}
ada0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
adb0: 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20  lowing are used 
adc0: 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  as the second pa
add0: 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
ade0: 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a  e3Savepoint(),.*
adf0: 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20  * and as the P1 
ae00: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
ae10: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
ae20: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65  truction..*/.#de
ae30: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42  fine SAVEPOINT_B
ae40: 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66  EGIN      0.#def
ae50: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  ine SAVEPOINT_RE
ae60: 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69  LEASE    1.#defi
ae70: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  ne SAVEPOINT_ROL
ae80: 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a  LBACK   2.../*.*
ae90: 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f  * Each SQLite mo
aea0: 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61  dule (virtual ta
aeb0: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20  ble definition) 
aec0: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
aed0: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
aee0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
aef0: 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20  ructure, stored 
af00: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61  in the sqlite3.a
af10: 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74  Module.** hash t
af20: 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  able..*/.struct 
af30: 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74  Module {.  const
af40: 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
af50: 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20  *pModule;       
af60: 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e  /* Callback poin
af70: 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ters */.  const 
af80: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
af90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
afa0: 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f  * Name passed to
afb0: 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
afc0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78   */.  void *pAux
afd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
afe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41             /* pA
aff0: 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  ux passed to cre
b000: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
b010: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
b020: 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  y)(void *);     
b030: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65         /* Module
b040: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
b050: 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  tion */.};../*.*
b060: 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
b070: 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
b080: 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  of an SQL table 
b090: 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e  is held in an in
b0a0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
b0b0: 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  s structure..*/.
b0c0: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a  struct Column {.
b0d0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
b0e0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
b0f0: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45  is column */.  E
b100: 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20  xpr *pDflt;     
b110: 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65  /* Default value
b120: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
b130: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74  */.  char *zDflt
b140: 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61  ;     /* Origina
b150: 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65  l text of the de
b160: 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20  fault value */. 
b170: 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20   char *zType;   
b180: 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66    /* Data type f
b190: 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  or this column *
b1a0: 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b  /.  char *zColl;
b1b0: 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e       /* Collatin
b1c0: 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20  g sequence.  If 
b1d0: 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65  NULL, use the de
b1e0: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f  fault */.  u8 no
b1f0: 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41  tNull;      /* A
b200: 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68  n OE_ code for h
b210: 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55  andling a NOT NU
b220: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
b230: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
b240: 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68  ;   /* One of th
b250: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e  e SQLITE_AFF_...
b260: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36   values */.  u16
b270: 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 2f 2a   colFlags;    /*
b280: 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74   Boolean propert
b290: 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41  ies.  See COLFLA
b2a0: 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77  G_ defines below
b2b0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
b2c0: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f  ed values for Co
b2d0: 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a  lumn.colFlags:.*
b2e0: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
b2f0: 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30  G_PRIMKEY  0x000
b300: 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69  1    /* Column i
b310: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72  s part of the pr
b320: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
b330: 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44  fine COLFLAG_HID
b340: 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20  DEN   0x0002    
b350: 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75  /* A hidden colu
b360: 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20  mn in a virtual 
b370: 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  table */../*.** 
b380: 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71  A "Collating Seq
b390: 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65  uence" is define
b3a0: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
b3b0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
b3c0: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
b3d0: 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20  Conceptually, a 
b3e0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
b3f0: 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ce consists of a
b400: 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63   name and.** a c
b410: 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e  omparison routin
b420: 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  e that defines t
b430: 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74  he order of that
b440: 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a   sequence..**.**
b450: 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70   If CollSeq.xCmp
b460: 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61   is NULL, it mea
b470: 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63  ns that the.** c
b480: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
b490: 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  e is undefined. 
b4a0: 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f   Indices built o
b4b0: 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a  n an undefined.*
b4c0: 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
b4d0: 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ence may not be 
b4e0: 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e  read or written.
b4f0: 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53  .*/.struct CollS
b500: 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  eq {.  char *zNa
b510: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
b520: 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c  Name of the coll
b530: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
b540: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f  UTF-8 encoded */
b550: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
b560: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
b570: 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65   encoding handle
b580: 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20  d by xCmp() */. 
b590: 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20   void *pUser;   
b5a0: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
b5b0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70  argument to xCmp
b5c0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  () */.  int (*xC
b5d0: 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  mp)(void*,int, c
b5e0: 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
b5f0: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20   const void*);. 
b600: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
b610: 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75  id*);  /* Destru
b620: 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a  ctor for pUser *
b630: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f  /.};../*.** A so
b640: 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20  rt order can be 
b650: 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
b660: 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SC..*/.#define S
b670: 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20  QLITE_SO_ASC    
b680: 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e     0  /* Sort in
b690: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
b6a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b6b0: 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20  TE_SO_DESC      
b6c0: 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  1  /* Sort in as
b6d0: 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
b6e0: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61  ../*.** Column a
b6f0: 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a  ffinity types..*
b700: 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20  *.** These used 
b710: 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63  to have mnemonic
b720: 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66   name like 'i' f
b730: 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  or SQLITE_AFF_IN
b740: 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27  TEGER and.** 't'
b750: 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
b760: 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61  TEXT.  But we ca
b770: 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20  n save a little 
b780: 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76  space and improv
b790: 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61  e.** the speed a
b7a0: 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65   little by numbe
b7b0: 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20  ring the values 
b7c0: 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20  consecutively.  
b7d0: 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65  .**.** But rathe
b7e0: 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74  r than start wit
b7f0: 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67  h 0 or 1, we beg
b800: 69 6e 20 77 69 74 68 20 27 61 27 2e 20 20 54 68  in with 'a'.  Th
b810: 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20  at way,.** when 
b820: 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74  multiple affinit
b830: 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63  y types are conc
b840: 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20  atenated into a 
b850: 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73  string and.** us
b860: 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65  ed as the P4 ope
b870: 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20  rand, they will 
b880: 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65  be more readable
b890: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73  ..**.** Note als
b8a0: 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72  o that the numer
b8b0: 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f  ic types are gro
b8c0: 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f  uped together so
b8d0: 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a   that testing.**
b8e0: 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74   for a numeric t
b8f0: 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ype is a single 
b900: 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23  comparison..*/.#
b910: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
b920: 46 5f 54 45 58 54 20 20 20 20 20 27 61 27 0a 23  F_TEXT     'a'.#
b930: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
b940: 46 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23  F_NONE     'b'.#
b950: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
b960: 46 5f 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23  F_NUMERIC  'c'.#
b970: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
b980: 46 5f 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23  F_INTEGER  'd'.#
b990: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
b9a0: 46 5f 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a  F_REAL     'e'..
b9b0: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49  #define sqlite3I
b9c0: 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  sNumericAffinity
b9d0: 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54  (X)  ((X)>=SQLIT
b9e0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a  E_AFF_NUMERIC)..
b9f0: 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
ba00: 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73  _AFF_MASK values
ba10: 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73   masks off the s
ba20: 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20  ignificant bits 
ba30: 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74  of an.** affinit
ba40: 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65  y value. .*/.#de
ba50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
ba60: 4d 41 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f  MASK     0x67../
ba70: 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20  *.** Additional 
ba80: 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20  bit values that 
ba90: 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68  can be ORed with
baa0: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74   an affinity wit
bab0: 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67  hout.** changing
bac0: 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a   the affinity..*
bad0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bae0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78  _JUMPIFNULL   0x
baf0: 30 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20  08  /* jumps if 
bb00: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
bb10: 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  s NULL */.#defin
bb20: 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
bb30: 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 53        0x10  /* S
bb40: 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72  tore result in r
bb50: 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68  eg[P2] rather th
bb60: 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69  an jump */.#defi
bb70: 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  ne SQLITE_NULLEQ
bb80: 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20         0x80  /* 
bb90: 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a  NULL=NULL */../*
bba0: 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66  .** An object of
bbb0: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72   this type is cr
bbc0: 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76  eated for each v
bbd0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65  irtual table pre
bbe0: 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64  sent in.** the d
bbf0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
bc00: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61  .**.** If the da
bc10: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
bc20: 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68   shared, then th
bc30: 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61  ere is one insta
bc40: 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73  nce of this.** s
bc50: 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63  tructure for eac
bc60: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
bc70: 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29  ction (sqlite3*)
bc80: 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73   that uses the s
bc90: 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e  hared.** schema.
bca0: 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65   This is because
bcb0: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
bcc0: 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72  onnection requir
bcd0: 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75  es its own uniqu
bce0: 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  e.** instance of
bcf0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
bd00: 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74  b* handle used t
bd10: 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
bd20: 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69  tual table .** i
bd30: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73  mplementation. s
bd40: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
bd50: 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20  dles can not be 
bd60: 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a  shared between .
bd70: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
bd80: 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68  ections, even wh
bd90: 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74  en the rest of t
bda0: 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74  he in-memory dat
bdb0: 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61  abase .** schema
bdc0: 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74   is shared, as t
bdd0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
bde0: 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74  n often stores t
bdf0: 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
be00: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
be10: 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69   passed to it vi
be20: 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29  a the xConnect()
be30: 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65   or xCreate() me
be40: 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69  thod.** during i
be50: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
be60: 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64  ternally. This d
be70: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
be80: 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a  on handle may.**
be90: 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79   then be used by
bea0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
beb0: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
bec0: 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c  n to access real
bed0: 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68   tables .** with
bee0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  in the database.
bef0: 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70   So that they ap
bf00: 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20  pear as part of 
bf10: 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20  the callers .** 
bf20: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
bf30: 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64  se accesses need
bf40: 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20   to be made via 
bf50: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
bf60: 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  e .** connection
bf70: 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f   as that used to
bf80: 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65   execute SQL ope
bf90: 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76  rations on the v
bfa0: 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  irtual table..**
bfb0: 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f  .** All VTable o
bfc0: 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72  bjects that corr
bfd0: 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67  espond to a sing
bfe0: 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68  le table in a sh
bff0: 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ared.** database
c000: 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74   schema are init
c010: 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ially stored in 
c020: 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f  a linked-list po
c030: 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74  inted to by.** t
c040: 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65  he Table.pVTable
c050: 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65   member variable
c060: 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
c070: 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65  nding Table obje
c080: 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73  ct..** When an s
c090: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
c0a0: 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65   operation is re
c0b0: 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73  quired to access
c0c0: 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
c0d0: 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68  table, it search
c0e0: 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20  es the list for 
c0f0: 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20  the VTable that 
c100: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
c110: 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  he.** database c
c120: 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20  onnection doing 
c130: 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f  the preparing so
c140: 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63   as to use the c
c150: 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65  orrect.** sqlite
c160: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69  3_vtab* handle i
c170: 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  n the compiled q
c180: 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  uery..**.** When
c190: 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61   an in-memory Ta
c1a0: 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65  ble object is de
c1b0: 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70  leted (for examp
c1c0: 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73  le when the.** s
c1d0: 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72  chema is being r
c1e0: 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65  eloaded for some
c1f0: 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54   reason), the VT
c200: 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65  able objects are
c210: 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64   not .** deleted
c220: 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33   and the sqlite3
c230: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61  _vtab* handles a
c240: 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65  re not xDisconne
c250: 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64  ct()ed .** immed
c260: 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c  iately. Instead,
c270: 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20   they are moved 
c280: 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70  from the Table.p
c290: 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a  VTable list to.*
c2a0: 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64  * another linked
c2b0: 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20   list headed by 
c2c0: 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73  the sqlite3.pDis
c2d0: 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f  connect member o
c2e0: 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  f the.** corresp
c2f0: 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73  onding sqlite3 s
c300: 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61  tructure. They a
c310: 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f  re then deleted/
c320: 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a  xDisconnected .*
c330: 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74  * next time a st
c340: 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61  atement is prepa
c350: 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73  red using said s
c360: 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73  qlite3*. This is
c370: 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   done.** to avoi
c380: 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65  d deadlock issue
c390: 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74  s involving mult
c3a0: 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74  iple sqlite3.mut
c3b0: 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52  ex mutexes..** R
c3c0: 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73  efer to comments
c3d0: 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20   above function 
c3e0: 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
c3f0: 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a  kList() for an.*
c400: 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73  * explanation as
c410: 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61   to why it is sa
c420: 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74  fe to add an ent
c430: 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  ry to an sqlite3
c440: 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20  .pDisconnect.** 
c450: 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c  list without hol
c460: 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70  ding the corresp
c470: 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d  onding sqlite3.m
c480: 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a  utex mutex..**.*
c490: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72  * The memory for
c4a0: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73   objects of this
c4b0: 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20   type is always 
c4c0: 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a  allocated by .**
c4d0: 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
c4e0: 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f  (), using the co
c4f0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
c500: 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65  stored in VTable
c510: 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66  .db as .** the f
c520: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  irst argument..*
c530: 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  /.struct VTable 
c540: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
c550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c560: 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
c570: 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
c580: 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20  with this table 
c590: 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f  */.  Module *pMo
c5a0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
c5b0: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64  * Pointer to mod
c5c0: 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
c5d0: 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  on */.  sqlite3_
c5e0: 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20  vtab *pVtab;    
c5f0: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
c600: 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f  vtab instance */
c610: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
c620: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c630: 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
c640: 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
c650: 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f  ture */.  u8 bCo
c660: 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20  nstraint;       
c670: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
c680: 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73  onstraints are s
c690: 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e  upported */.  in
c6a0: 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t iSavepoint;   
c6b0: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68          /* Depth
c6c0: 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e   of the SAVEPOIN
c6d0: 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61  T stack */.  VTa
c6e0: 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ble *pNext;     
c6f0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
c700: 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73  n linked list (s
c710: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a  ee above) */.};.
c720: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
c730: 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
c740: 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
c750: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
c760: 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e   the.** followin
c770: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
c780: 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69  ** Table.zName i
c790: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
c7a0: 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61  e table.  The ca
c7b0: 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e  se of the origin
c7c0: 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42  al.** CREATE TAB
c7d0: 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  LE statement is 
c7e0: 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65  stored, but case
c7f0: 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63   is not signific
c800: 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61  ant for.** compa
c810: 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61  risons..**.** Ta
c820: 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20  ble.nCol is the 
c830: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
c840: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s in this table.
c850: 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20    Table.aCol is 
c860: 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  a.** pointer to 
c870: 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75  an array of Colu
c880: 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f  mn structures, o
c890: 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ne for each colu
c8a0: 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  mn..**.** If the
c8b0: 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e   table has an IN
c8c0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
c8d0: 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50  Y, then Table.iP
c8e0: 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64 65 78  Key is the index
c8f0: 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d   of.** the colum
c900: 6e 20 74 68 61 74 20 69 73 20 74 68 61 74 20 6b  n that is that k
c910: 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20  ey.   Otherwise 
c920: 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e  Table.iPKey is n
c930: 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a  egative.  Note.*
c940: 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61 74  * that the datat
c950: 79 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41  ype of the PRIMA
c960: 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49  RY KEY must be I
c970: 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69 73 20  NTEGER for this 
c980: 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73  field to.** be s
c990: 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20  et.  An INTEGER 
c9a0: 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75  PRIMARY KEY is u
c9b0: 73 65 64 20 61 73 20 74 68 65 20 72 6f 77 69 64  sed as the rowid
c9c0: 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
c9d0: 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20  .** the table.  
c9e0: 49 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e  If a table has n
c9f0: 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  o INTEGER PRIMAR
ca00: 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61  Y KEY, then a ra
ca10: 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73  ndom rowid.** is
ca20: 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65   generated for e
ca30: 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74  ach row of the t
ca40: 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69  able.  TF_HasPri
ca50: 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74 20 69  maryKey is set i
ca60: 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68  f.** the table h
ca70: 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b  as any PRIMARY K
ca80: 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f  EY, INTEGER or o
ca90: 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20  therwise..**.** 
caa0: 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68  Table.tnum is th
cab0: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  e page number fo
cac0: 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65  r the root BTree
cad0: 20 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62   page of the tab
cae0: 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74  le in the.** dat
caf0: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20  abase file.  If 
cb00: 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65  Table.iDb is the
cb10: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
cb20: 74 61 62 61 73 65 20 74 61 62 6c 65 20 62 61 63  tabase table bac
cb30: 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74  kend.** in sqlit
cb40: 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66  e.aDb[].  0 is f
cb50: 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  or the main data
cb60: 62 61 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f  base and 1 is fo
cb70: 72 20 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a  r the file that.
cb80: 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61  ** holds tempora
cb90: 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  ry tables and in
cba0: 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70  dices.  If TF_Ep
cbb0: 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a  hemeral is set.*
cbc0: 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  * then the table
cbd0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20   is stored in a 
cbe0: 66 69 6c 65 20 74 68 61 74 20 69 73 20 61 75 74  file that is aut
cbf0: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74  omatically delet
cc00: 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56  ed.** when the V
cc10: 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68  DBE cursor to th
cc20: 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65  e table is close
cc30: 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  d.  In this case
cc40: 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20   Table.tnum .** 
cc50: 72 65 66 65 72 73 20 56 44 42 45 20 63 75 72 73  refers VDBE curs
cc60: 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68  or number that h
cc70: 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f  olds the table o
cc80: 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20  pen, not to the 
cc90: 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d  root.** page num
cca0: 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20  ber.  Transient 
ccb0: 74 61 62 6c 65 73 20 61 72 65 20 75 73 65 64 20  tables are used 
ccc0: 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75  to hold the resu
ccd0: 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d  lts of a.** sub-
cce0: 71 75 65 72 79 20 74 68 61 74 20 61 70 70 65 61  query that appea
ccf0: 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20  rs instead of a 
cd00: 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20  real table name 
cd10: 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
cd20: 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45  se .** of a SELE
cd30: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  CT statement..*/
cd40: 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a  .struct Table {.
cd50: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
cd60: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
cd70: 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
cd80: 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20  iew */.  Column 
cd90: 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a  *aCol;        /*
cda0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
cdb0: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  ut each column *
cdc0: 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65  /.  Index *pInde
cdd0: 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  x;       /* List
cde0: 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20   of SQL indexes 
cdf0: 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a  on this table. *
ce00: 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
ce10: 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c  ect;     /* NULL
ce20: 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f   for tables.  Po
ce30: 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69  ints to definiti
ce40: 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f  on if a view. */
ce50: 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20  .  FKey *pFKey; 
ce60: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65          /* Linke
ce70: 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f  d list of all fo
ce80: 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68  reign keys in th
ce90: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68  is table */.  ch
cea0: 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
ceb0: 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
cec0: 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
ced0: 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
cee0: 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
cef0: 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20  ITE_OMIT_CHECK. 
cf00: 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63   ExprList *pChec
cf10: 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45  k;    /* All CHE
cf20: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  CK constraints *
cf30: 2f 0a 23 65 6e 64 69 66 0a 20 20 74 52 6f 77 63  /.#endif.  tRowc
cf40: 6e 74 20 6e 52 6f 77 45 73 74 3b 20 20 20 20 20  nt nRowEst;     
cf50: 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77  /* Estimated row
cf60: 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f  s in table - fro
cf70: 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  m sqlite_stat1 t
cf80: 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  able */.  int tn
cf90: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  um;            /
cfa0: 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64  * Root BTree nod
cfb0: 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65  e for this table
cfc0: 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65   (see note above
cfd0: 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79  ) */.  i16 iPKey
cfe0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
cff0: 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20  f not negative, 
d000: 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
d010: 61 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  as the primary k
d020: 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c  ey */.  i16 nCol
d030: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
d040: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
d050: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
d060: 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20  */.  u16 nRef;  
d070: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
d080: 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
d090: 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f  to this Table */
d0a0: 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20  .  u8 tabFlags; 
d0b0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
d0c0: 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a  of TF_* values *
d0d0: 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20  /.  u8 keyConf; 
d0e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74           /* What
d0f0: 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f   to do in case o
d100: 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e  f uniqueness con
d110: 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a  flict on iPKey *
d120: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
d130: 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
d140: 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66  .  int addColOff
d150: 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65  set;    /* Offse
d160: 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c  t in CREATE TABL
d170: 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20  E stmt to add a 
d180: 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65  new column */.#e
d190: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
d1a0: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
d1b0: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64  TABLE.  int nMod
d1c0: 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20  uleArg;      /* 
d1d0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
d1e0: 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  nts to the modul
d1f0: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  e */.  char **az
d200: 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54  ModuleArg;  /* T
d210: 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c  ext of all modul
d220: 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d  e args. [0] is m
d230: 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  odule name */.  
d240: 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b  VTable *pVTable;
d250: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
d260: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20  VTable objects. 
d270: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67  */.#endif.  Trig
d280: 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
d290: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67   /* List of trig
d2a0: 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70  gers stored in p
d2b0: 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65  Schema */.  Sche
d2c0: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
d2d0: 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20   /* Schema that 
d2e0: 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61  contains this ta
d2f0: 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ble */.  Table *
d300: 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a  pNextZombie;  /*
d310: 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72   Next on the Par
d320: 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69  se.pZombieTab li
d330: 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
d340: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
d350: 6f 72 20 54 61 62 65 2e 74 61 62 46 6c 61 67 73  or Tabe.tabFlags
d360: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  ..*/.#define TF_
d370: 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20  Readonly        
d380: 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d  0x01    /* Read-
d390: 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c  only system tabl
d3a0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
d3b0: 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20  Ephemeral       
d3c0: 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70  0x02    /* An ep
d3d0: 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f  hemeral table */
d3e0: 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50  .#define TF_HasP
d3f0: 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34  rimaryKey   0x04
d400: 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73      /* Table has
d410: 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a   a primary key *
d420: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74  /.#define TF_Aut
d430: 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30  oincrement   0x0
d440: 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20  8    /* Integer 
d450: 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61  primary key is a
d460: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a  utoincrement */.
d470: 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75  #define TF_Virtu
d480: 61 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20  al         0x10 
d490: 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75     /* Is a virtu
d4a0: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 0a 2f 2a  al table */.../*
d4b0: 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
d4c0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
d4d0: 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74   table is a virt
d4e0: 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ual table.  This
d4f0: 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61   is.** done as a
d500: 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69   macro so that i
d510: 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69  t will be optimi
d520: 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72  zed out when vir
d530: 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75  tual.** table su
d540: 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64  pport is omitted
d550: 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
d560: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
d570: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
d580: 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49  ABLE.#  define I
d590: 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
d5a0: 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
d5b0: 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d   & TF_Virtual)!=
d5c0: 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  0).#  define IsH
d5d0: 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28  iddenColumn(X) (
d5e0: 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
d5f0: 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
d600: 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  !=0).#else.#  de
d610: 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58  fine IsVirtual(X
d620: 29 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69  )      0.#  defi
d630: 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
d640: 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  n(X) 0.#endif../
d650: 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67  *.** Each foreig
d660: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
d670: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
d680: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
d690: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
d6a0: 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  * A foreign key 
d6b0: 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
d6c0: 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20  th two tables.  
d6d0: 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65  The "from" table
d6e0: 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   is.** the table
d6f0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
d700: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
d710: 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65  ause that create
d720: 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  s the foreign.**
d730: 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20   key.  The "to" 
d740: 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62  table is the tab
d750: 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64  le that is named
d760: 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43   in the REFERENC
d770: 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f  ES clause..** Co
d780: 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d  nsider this exam
d790: 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  ple:.**.**     C
d7a0: 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28  REATE TABLE ex1(
d7b0: 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45  .**       a INTE
d7c0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
d7d0: 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45  .**       b INTE
d7e0: 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66  GER CONSTRAINT f
d7f0: 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78  k1 REFERENCES ex
d800: 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a  2(x).**     );.*
d810: 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e  *.** For foreign
d820: 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20   key "fk1", the 
d830: 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65  from-table is "e
d840: 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74  x1" and the to-t
d850: 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a  able is "ex2"..*
d860: 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45  *.** Each REFERE
d870: 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65  NCES clause gene
d880: 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63  rates an instanc
d890: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
d8a0: 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
d8b0: 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65  which is attache
d8c0: 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61  d to the from-ta
d8d0: 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62  ble.  The to-tab
d8e0: 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73  le need not exis
d8f0: 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72  t when.** the fr
d900: 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61  om-table is crea
d910: 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65  ted.  The existe
d920: 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61  nce of the to-ta
d930: 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b  ble is not check
d940: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b  ed..*/.struct FK
d950: 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
d960: 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
d970: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
d980: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
d990: 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
d9a0: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
d9b0: 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 66  From;  /* Next f
d9c0: 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e 20 70 46  oreign key in pF
d9d0: 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  rom */.  char *z
d9e0: 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  To;        /* Na
d9f0: 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74  me of table that
da00: 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20   the key points 
da10: 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29  to (aka: Parent)
da20: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
da30: 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  tTo;    /* Next 
da40: 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74  foreign key on t
da50: 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a  able named zTo *
da60: 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54  /.  FKey *pPrevT
da70: 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75  o;    /* Previou
da80: 73 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e  s foreign key on
da90: 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f   table named zTo
daa0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20   */.  int nCol; 
dab0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
dac0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
dad0: 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a  this key */.  /*
dae0: 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39   EV: R-30323-219
daf0: 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66  17 */.  u8 isDef
db00: 65 72 72 65 64 3b 20 20 20 20 2f 2a 20 54 72 75  erred;    /* Tru
db10: 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20  e if constraint 
db20: 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65  checking is defe
db30: 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54  rred till COMMIT
db40: 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e   */.  u8 aAction
db50: 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  [2];          /*
db60: 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f   ON DELETE and O
db70: 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73  N UPDATE actions
db80: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a  , respectively *
db90: 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54  /.  Trigger *apT
dba0: 72 69 67 67 65 72 5b 32 5d 3b 20 20 2f 2a 20 54  rigger[2];  /* T
dbb0: 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74  riggers for aAct
dbc0: 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f  ion[] actions */
dbd0: 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61  .  struct sColMa
dbe0: 70 20 7b 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20  p {  /* Mapping 
dbf0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46  of columns in pF
dc00: 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  rom to columns i
dc10: 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74  n zTo */.    int
dc20: 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20   iFrom;         
dc30: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75  /* Index of colu
dc40: 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20  mn in pFrom */. 
dc50: 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20     char *zCol;  
dc60: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
dc70: 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
dc80: 20 49 66 20 30 20 75 73 65 20 50 52 49 4d 41 52   If 0 use PRIMAR
dc90: 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f  Y KEY */.  } aCo
dca0: 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  l[1];        /* 
dcb0: 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
dcc0: 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d  ch of nCol colum
dcd0: 6e 20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  n s */.};../*.**
dce0: 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
dcf0: 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20   many different 
dd00: 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20  ways to resolve 
dd10: 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  a constraint.** 
dd20: 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b  error.  ROLLBACK
dd30: 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
dd40: 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61  s that a constra
dd50: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a  int violation.**
dd60: 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72   causes the oper
dd70: 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
dd80: 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72   to fail and for
dd90: 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
dda0: 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  nsaction.** to b
ddb0: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
ddc0: 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67  ABORT processing
ddd0: 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61   means the opera
dde0: 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a  tion in process.
ddf0: 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79  ** fails and any
de00: 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66   prior changes f
de10: 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65  rom that one ope
de20: 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65  ration are backe
de30: 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68  d out,.** but th
de40: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
de50: 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b   not rolled back
de60: 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69  .  FAIL processi
de70: 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a  ng means that.**
de80: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
de90: 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73  n progress stops
dea0: 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20   and returns an 
deb0: 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74  error code.  But
dec0: 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65   prior.** change
ded0: 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d  s due to the sam
dee0: 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
def0: 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61  not backed out a
df00: 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a  nd no rollback.*
df10: 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52  * occurs.  IGNOR
df20: 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  E means that the
df30: 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20   particular row 
df40: 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
df50: 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
df60: 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72  ror is not inser
df70: 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20  ted or updated. 
df80: 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
df90: 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
dfa0: 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65  or.** is returne
dfb0: 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e  d.  REPLACE mean
dfc0: 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69  s that preexisti
dfd0: 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73  ng database rows
dfe0: 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20   that caused.** 
dff0: 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
e000: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
e010: 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61  e removed so tha
e020: 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74  t the new insert
e030: 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61   or.** update ca
e040: 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63  n proceed.  Proc
e050: 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
e060: 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73   and no error is
e070: 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a   reported..**.**
e080: 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55   RESTRICT, SETNU
e090: 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20  LL, and CASCADE 
e0a0: 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e  actions apply on
e0b0: 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65  ly to foreign ke
e0c0: 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20  ys..** RESTRICT 
e0d0: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41  is the same as A
e0e0: 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41  BORT for IMMEDIA
e0f0: 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  TE foreign keys 
e100: 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20  and the.** same 
e110: 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20  as ROLLBACK for 
e120: 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20  DEFERRED keys.  
e130: 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68  SETNULL means th
e140: 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  at the foreign.*
e150: 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20  * key is set to 
e160: 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d  NULL.  CASCADE m
e170: 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45  eans that a DELE
e180: 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20  TE or UPDATE of 
e190: 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  the.** reference
e1a0: 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70  d table row is p
e1b0: 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74  ropagated into t
e1c0: 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64  he row that hold
e1d0: 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e  s the.** foreign
e1e0: 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65   key..** .** The
e1f0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f   following symbo
e200: 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75  lic values are u
e210: 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68  sed to record wh
e220: 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61  ich type.** of a
e230: 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a  ction to take..*
e240: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e  /.#define OE_Non
e250: 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65  e     0   /* The
e260: 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61  re is no constra
e270: 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a  int to check */.
e280: 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62  #define OE_Rollb
e290: 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20  ack 1   /* Fail 
e2a0: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  the operation an
e2b0: 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  d rollback the t
e2c0: 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
e2d0: 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20  efine OE_Abort  
e2e0: 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75    2   /* Back ou
e2f0: 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f  t changes but do
e300: 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61   no rollback tra
e310: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
e320: 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20  ine OE_Fail     
e330: 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20  3   /* Stop the 
e340: 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65  operation but le
e350: 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68  ave all prior ch
e360: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
e370: 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20   OE_Ignore   4  
e380: 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65   /* Ignore the e
e390: 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20  rror. Do not do 
e3a0: 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50  the INSERT or UP
e3b0: 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
e3c0: 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20  OE_Replace  5   
e3d0: 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69  /* Delete existi
e3e0: 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20  ng record, then 
e3f0: 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  do INSERT or UPD
e400: 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ATE */..#define 
e410: 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20  OE_Restrict 6   
e420: 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20  /* OE_Abort for 
e430: 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f  IMMEDIATE, OE_Ro
e440: 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52  llback for DEFER
e450: 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  RED */.#define O
e460: 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f  E_SetNull  7   /
e470: 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
e480: 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e  n key value to N
e490: 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ULL */.#define O
e4a0: 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f  E_SetDflt  8   /
e4b0: 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
e4c0: 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69  n key value to i
e4d0: 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64  ts default */.#d
e4e0: 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65  efine OE_Cascade
e4f0: 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65    9   /* Cascade
e500: 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a   the changes */.
e510: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61  .#define OE_Defa
e520: 75 6c 74 20 20 39 39 20 20 2f 2a 20 44 6f 20 77  ult  99  /* Do w
e530: 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61  hatever the defa
e540: 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f  ult action is */
e550: 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  .../*.** An inst
e560: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
e570: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
e580: 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
e590: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
e5a0: 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  nt to sqlite3Vdb
e5b0: 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20  eKeyCompare and 
e5c0: 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  is used to contr
e5d0: 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61  ol the .** compa
e5e0: 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f  rison of the two
e5f0: 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2f 0a   index keys..*/.
e600: 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b  struct KeyInfo {
e610: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
e620: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
e630: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
e640: 6e 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  n */.  u8 enc;  
e650: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
e660: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e  xt encoding - on
e670: 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
e680: 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  UTF* values */. 
e690: 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
e6a0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
e6b0: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  f entries in aCo
e6c0: 6c 6c 5b 5d 20 2a 2f 0a 20 20 75 38 20 2a 61 53  ll[] */.  u8 *aS
e6d0: 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a  ortOrder;     /*
e6e0: 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20   Sort order for 
e6f0: 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 4d 61  each column.  Ma
e700: 79 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 43  y be NULL */.  C
e710: 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d  ollSeq *aColl[1]
e720: 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20  ;  /* Collating 
e730: 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63  sequence for eac
e740: 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65  h term of the ke
e750: 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  y */.};../*.** A
e760: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
e770: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
e780: 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
e790: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a  rmation about a.
e7a0: 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20  ** single index 
e7b0: 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20  record that has 
e7c0: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70 61 72  already been par
e7d0: 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64  sed out into ind
e7e0: 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65  ividual.** value
e7f0: 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72  s..**.** A recor
e800: 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74  d is an object t
e810: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  hat contains one
e820: 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20   or more fields 
e830: 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f  of data..** Reco
e840: 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  rds are used to 
e850: 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  store the conten
e860: 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77  t of a table row
e870: 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a   and to store.**
e880: 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69   the key of an i
e890: 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e  ndex.  A blob en
e8a0: 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f  coding of a reco
e8b0: 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79  rd is created by
e8c0: 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52  .** the OP_MakeR
e8d0: 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20  ecord opcode of 
e8e0: 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20  the VDBE and is 
e8f0: 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20  disassembled by 
e900: 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  the.** OP_Column
e910: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
e920: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 68 6f  his structure ho
e930: 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74 68 61  lds a record tha
e940: 74 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  t has already be
e950: 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a  en disassembled.
e960: 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73  ** into its cons
e970: 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a  tituent fields..
e980: 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b  */.struct Unpack
e990: 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79  edRecord {.  Key
e9a0: 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20  Info *pKeyInfo; 
e9b0: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e   /* Collation an
e9c0: 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66  d sort-order inf
e9d0: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31  ormation */.  u1
e9e0: 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  6 nField;       
e9f0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
ea00: 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b  ntries in apMem[
ea10: 5d 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 3b  ] */.  u8 flags;
ea20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 6f             /* Bo
ea30: 6f 6c 65 61 6e 20 73 65 74 74 69 6e 67 73 2e 20  olean settings. 
ea40: 20 55 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20 62 65   UNPACKED_... be
ea50: 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77  low */.  i64 row
ea60: 69 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  id;          /* 
ea70: 55 73 65 64 20 62 79 20 55 4e 50 41 43 4b 45 44  Used by UNPACKED
ea80: 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48 20 2a  _PREFIX_SEARCH *
ea90: 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20  /.  Mem *aMem;  
eaa0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
eab0: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
eac0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 6f 66  llowed values of
ead0: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2e   UnpackedRecord.
eae0: 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  flags.*/.#define
eaf0: 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45   UNPACKED_INCRKE
eb00: 59 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  Y       0x01  /*
eb10: 20 4d 61 6b 65 20 74 68 69 73 20 6b 65 79 20 61   Make this key a
eb20: 6e 20 65 70 73 69 6c 6f 6e 20 6c 61 72 67 65 72  n epsilon larger
eb30: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41   */.#define UNPA
eb40: 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43  CKED_PREFIX_MATC
eb50: 48 20 20 30 78 30 32 20 20 2f 2a 20 41 20 70 72  H  0x02  /* A pr
eb60: 65 66 69 78 20 6d 61 74 63 68 20 69 73 20 63 6f  efix match is co
eb70: 6e 73 69 64 65 72 65 64 20 4f 4b 20 2a 2f 0a 23  nsidered OK */.#
eb80: 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f  define UNPACKED_
eb90: 50 52 45 46 49 58 5f 53 45 41 52 43 48 20 30 78  PREFIX_SEARCH 0x
eba0: 30 34 20 20 2f 2a 20 49 67 6e 6f 72 65 20 66 69  04  /* Ignore fi
ebb0: 6e 61 6c 20 28 72 6f 77 69 64 29 20 66 69 65 6c  nal (rowid) fiel
ebc0: 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  d */../*.** Each
ebd0: 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65   SQL index is re
ebe0: 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
ebf0: 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ory by an.** ins
ec00: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
ec10: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
ec20: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75  ..**.** The colu
ec30: 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  mns of the table
ec40: 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20   that are to be 
ec50: 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63  indexed are desc
ec60: 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20  ribed.** by the 
ec70: 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64  aiColumn[] field
ec80: 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
ec90: 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  re.  For example
eca0: 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20  , suppose.** we 
ecb0: 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  have the followi
ecc0: 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64  ng table and ind
ecd0: 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  ex:.**.**     CR
ece0: 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63  EATE TABLE Ex1(c
ecf0: 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63  1 int, c2 int, c
ed00: 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20  3 text);.**     
ed10: 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32  CREATE INDEX Ex2
ed20: 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a   ON Ex1(c3,c1);.
ed30: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62  **.** In the Tab
ed40: 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73  le structure des
ed50: 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f  cribing Ex1, nCo
ed60: 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65  l==3 because the
ed70: 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20  re are.** three 
ed80: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
ed90: 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e  able.  In the In
eda0: 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65  dex structure de
edb0: 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c  scribing.** Ex2,
edc0: 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63   nColumn==2 sinc
edd0: 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c  e 2 of the 3 col
ede0: 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20  umns of Ex1 are 
edf0: 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20  indexed..** The 
ee00: 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d  value of aiColum
ee10: 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69  n is {2, 0}.  ai
ee20: 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63  Column[0]==2 bec
ee30: 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72  ause the .** fir
ee40: 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  st column to be 
ee50: 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73  indexed (c3) has
ee60: 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69   an index of 2 i
ee70: 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a  n Ex1.aCol[]..**
ee80: 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75   The second colu
ee90: 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
eea0: 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64   (c1) has an ind
eeb0: 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78  ex of 0 in.** Ex
eec0: 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20  1.aCol[], hence 
eed0: 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d  Ex2.aiColumn[1]=
eee0: 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e  =0..**.** The In
eef0: 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c  dex.onError fiel
ef00: 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65  d determines whe
ef10: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
ef20: 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a  indexed columns.
ef30: 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75  ** must be uniqu
ef40: 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f  e and what to do
ef50: 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74   if they are not
ef60: 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e  .  When Index.on
ef70: 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a  Error=OE_None,.*
ef80: 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20  * it means this 
ef90: 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20  is not a unique 
efa0: 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73  index.  Otherwis
efb0: 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65  e it is a unique
efc0: 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68   index.** and th
efd0: 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78  e value of Index
efe0: 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74  .onError indicat
eff0: 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66  e the which conf
f000: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
f010: 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f  .** algorithm to
f020: 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72   employ whenever
f030: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
f040: 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20  ade to insert a 
f050: 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c  non-unique.** el
f060: 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ement..*/.struct
f070: 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20   Index {.  char 
f080: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
f090: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
f0a0: 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  his index */.  i
f0b0: 6e 74 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20  nt *aiColumn;   
f0c0: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
f0d0: 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
f0e0: 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e  d by this index.
f0f0: 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20    1st is 0 */.  
f100: 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73  tRowcnt *aiRowEs
f110: 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 72 6f 6d  t;       /* From
f120: 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72   ANALYZE: Est. r
f130: 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20  ows selected by 
f140: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
f150: 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20   Table *pTable; 
f160: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
f170: 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67   SQL table being
f180: 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68   indexed */.  ch
f190: 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
f1a0: 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
f1b0: 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
f1c0: 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
f1d0: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
f1e0: 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
f1f0: 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
f200: 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64  index associated
f210: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74   with the same t
f220: 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  able */.  Schema
f230: 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
f240: 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
f250: 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64  taining this ind
f260: 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  ex */.  u8 *aSor
f270: 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
f280: 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c   /* for each col
f290: 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c  umn: True==DESC,
f2a0: 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20   False==ASC */. 
f2b0: 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20   char **azColl; 
f2c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
f2d0: 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20  ay of collation 
f2e0: 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66  sequence names f
f2f0: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
f300: 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
f310: 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67         /* DB Pag
f320: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f  e containing roo
f330: 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  t of this index 
f340: 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e  */.  u16 nColumn
f350: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
f360: 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
f370: 6e 73 20 69 6e 20 74 61 62 6c 65 20 75 73 65 64  ns in table used
f380: 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 20 2a   by this index *
f390: 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20  /.  u8 onError; 
f3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f3b0: 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e  OE_Abort, OE_Ign
f3c0: 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c  ore, OE_Replace,
f3d0: 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20   or OE_None */. 
f3e0: 20 75 6e 73 69 67 6e 65 64 20 61 75 74 6f 49 6e   unsigned autoIn
f3f0: 64 65 78 3a 32 3b 20 20 20 20 2f 2a 20 31 3d 3d  dex:2;    /* 1==
f400: 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41  UNIQUE, 2==PRIMA
f410: 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54  RY KEY, 0==CREAT
f420: 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73  E INDEX */.  uns
f430: 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64  igned bUnordered
f440: 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69  :1;   /* Use thi
f450: 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f  s index for == o
f460: 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c  r IN queries onl
f470: 79 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  y */.#ifdef SQLI
f480: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a  TE_ENABLE_STAT3.
f490: 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20    int nSample;  
f4a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
f4b0: 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73  mber of elements
f4c0: 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f   in aSample[] */
f4d0: 0a 20 20 74 52 6f 77 63 6e 74 20 61 76 67 45 71  .  tRowcnt avgEq
f4e0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
f4f0: 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65  verage nEq value
f500: 20 66 6f 72 20 6b 65 79 20 76 61 6c 75 65 73 20   for key values 
f510: 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a  not in aSample *
f520: 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  /.  IndexSample 
f530: 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20  *aSample;    /* 
f540: 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c  Samples of the l
f550: 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a  eft-most key */.
f560: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
f570: 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f   Each sample sto
f580: 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
f590: 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73  e_stat3 table is
f5a0: 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
f5b0: 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67  memory .** using
f5c0: 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20   a structure of 
f5d0: 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20  this type.  See 
f5e0: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74  documentation at
f5f0: 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a   the top of the.
f600: 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75  ** analyze.c sou
f610: 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64  rce file for add
f620: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
f630: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ion..*/.struct I
f640: 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 75  ndexSample {.  u
f650: 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20  nion {.    char 
f660: 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61  *z;        /* Va
f670: 6c 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20  lue if eType is 
f680: 53 51 4c 49 54 45 5f 54 45 58 54 20 6f 72 20 53  SQLITE_TEXT or S
f690: 51 4c 49 54 45 5f 42 4c 4f 42 20 2a 2f 0a 20 20  QLITE_BLOB */.  
f6a0: 20 20 64 6f 75 62 6c 65 20 72 3b 20 20 20 20 20    double r;     
f6b0: 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65 54    /* Value if eT
f6c0: 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f 46 4c  ype is SQLITE_FL
f6d0: 4f 41 54 20 2a 2f 0a 20 20 20 20 69 36 34 20 69  OAT */.    i64 i
f6e0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61  ;          /* Va
f6f0: 6c 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20  lue if eType is 
f700: 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 2a  SQLITE_INTEGER *
f710: 2f 0a 20 20 7d 20 75 3b 0a 20 20 75 38 20 65 54  /.  } u;.  u8 eT
f720: 79 70 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ype;         /* 
f730: 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 53 51 4c  SQLITE_NULL, SQL
f740: 49 54 45 5f 49 4e 54 45 47 45 52 20 2e 2e 2e 20  ITE_INTEGER ... 
f750: 65 74 63 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  etc. */.  int nB
f760: 79 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 53  yte;        /* S
f770: 69 7a 65 20 69 6e 20 62 79 74 65 20 6f 66 20 74  ize in byte of t
f780: 65 78 74 20 6f 72 20 62 6c 6f 62 2e 20 2a 2f 0a  ext or blob. */.
f790: 20 20 74 52 6f 77 63 6e 74 20 6e 45 71 3b 20 20    tRowcnt nEq;  
f7a0: 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
f7b0: 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
f7c0: 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20   the key equals 
f7d0: 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
f7e0: 20 74 52 6f 77 63 6e 74 20 6e 4c 74 3b 20 20 20   tRowcnt nLt;   
f7f0: 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
f800: 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
f810: 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
f820: 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
f830: 20 20 74 52 6f 77 63 6e 74 20 6e 44 4c 74 3b 20    tRowcnt nDLt; 
f840: 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
f850: 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b  er of distinct k
f860: 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68  eys less than th
f870: 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a  is sample */.};.
f880: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65  ./*.** Each toke
f890: 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20  n coming out of 
f8a0: 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20  the lexer is an 
f8b0: 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74  instance of.** t
f8c0: 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
f8d0: 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20  Tokens are also 
f8e0: 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  used as part of 
f8f0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a  an expression..*
f900: 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b  *.** Note if Tok
f910: 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b  en.z==0 then Tok
f920: 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e  en.dyn and Token
f930: 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  .n are undefined
f940: 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74   and.** may cont
f950: 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65  ain random value
f960: 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20  s.  Do not make 
f970: 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20  any assumptions 
f980: 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a  about Token.dyn.
f990: 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77  ** and Token.n w
f9a0: 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a  hen Token.z==0..
f9b0: 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  */.struct Token 
f9c0: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
f9d0: 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f  z;     /* Text o
f9e0: 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f  f the token.  No
f9f0: 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65  t NULL-terminate
fa00: 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  d! */.  unsigned
fa10: 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75   int n;    /* Nu
fa20: 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
fa30: 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e  rs in this token
fa40: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
fa50: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
fa60: 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  s structure cont
fa70: 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
fa80: 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
fa90: 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
faa0: 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f  a SELECT that co
fab0: 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
fac0: 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
fad0: 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b  * If Expr.op==TK
fae0: 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54  _AGG_COLUMN or T
faf0: 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74  K_AGG_FUNCTION t
fb00: 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66  hen Expr.pAggInf
fb10: 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  o is a.** pointe
fb20: 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
fb30: 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69  ure.  The Expr.i
fb40: 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20  Column field is 
fb50: 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20  the index in.** 
fb60: 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f  AggInfo.aCol[] o
fb70: 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b  r AggInfo.aFunc[
fb80: 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ] of information
fb90: 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
fba0: 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
fbb0: 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a  that node..**.**
fbc0: 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42   AggInfo.pGroupB
fbd0: 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46  y and AggInfo.aF
fbe0: 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20  unc.pExpr point 
fbf0: 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e  to fields within
fc00: 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
fc10: 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72   Select structur
fc20: 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
fc30: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
fc40: 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a  ement.  These.**
fc50: 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e   fields do not n
fc60: 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20  eed to be freed 
fc70: 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e  when deallocatin
fc80: 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74  g the AggInfo st
fc90: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
fca0: 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75  ct AggInfo {.  u
fcb0: 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20  8 directMode;   
fcc0: 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74         /* Direct
fcd0: 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20   rendering mode 
fce0: 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20  means take data 
fcf0: 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20  directly.       
fd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd10: 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63     ** from sourc
fd20: 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20  e tables rather 
fd30: 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75  than from accumu
fd40: 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75  lators */.  u8 u
fd50: 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  seSortingIdx;   
fd60: 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74      /* In direct
fd70: 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65   mode, reference
fd80: 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
fd90: 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20  ex rather.      
fda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdb0: 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20      ** than the 
fdc0: 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
fdd0: 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
fde0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  ;         /* Cur
fdf0: 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
fe00: 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
fe10: 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
fe20: 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20  IdxPTab;     /* 
fe30: 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
fe40: 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f   pseudo-table */
fe50: 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43  .  int nSortingC
fe60: 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75  olumn;     /* Nu
fe70: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
fe80: 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
fe90: 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ndex */.  ExprLi
fea0: 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
feb0: 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62    /* The group b
fec0: 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74  y clause */.  st
fed0: 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c  ruct AggInfo_col
fee0: 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63   {    /* For eac
fef0: 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e  h column used in
ff00: 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a   source tables *
ff10: 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
ff20: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  b;             /
ff30: 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  * Source table *
ff40: 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  /.    int iTable
ff50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
ff60: 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
ff70: 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  of the source ta
ff80: 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
ff90: 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
ffa0: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
ffb0: 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20  mber within the 
ffc0: 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
ffd0: 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43      int iSorterC
ffe0: 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20  olumn;       /* 
fff0: 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  Column number in
10000 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
10010 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  ex */.    int iM
10020 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
10030 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
10040 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
10050 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
10060 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
10070 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
10080 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  * The original e
10090 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d  xpression */.  }
100a0 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43   *aCol;.  int nC
100b0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
100c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
100d0 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61  sed entries in a
100e0 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
100f0 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20  Accumulator;    
10100 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10110 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f  columns that sho
10120 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  w through to the
10130 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20   output..       
10140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10150 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c     ** Additional
10160 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
10170 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65  d only as parame
10180 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20  ters to.        
10190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101a0 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66    ** aggregate f
101b0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74  unctions */.  st
101c0 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e  ruct AggInfo_fun
101d0 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63  c {   /* For eac
101e0 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  h aggregate func
101f0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  tion */.    Expr
10200 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
10210 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
10220 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20  on encoding the 
10230 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
10240 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
10250 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
10260 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
10270 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
10280 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  n */.    int iMe
10290 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
102a0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
102b0 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
102c0 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
102d0 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e  .    int iDistin
102e0 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ct;           /*
102f0 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   Ephemeral table
10300 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65   used to enforce
10310 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d   DISTINCT */.  }
10320 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e   *aFunc;.  int n
10330 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
10340 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10350 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63  entries in aFunc
10360 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  [] */.};../*.** 
10370 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56  The datatype ynV
10380 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69  ar is a signed i
10390 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31  nteger, either 1
103a0 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e  6-bit or 32-bit.
103b0 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69  .** Usually it i
103c0 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20  s 16-bits.  But 
103d0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
103e0 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73  RIABLE_NUMBER is
103f0 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e   greater.** than
10400 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74   32767 we have t
10410 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74  o make it 32-bit
10420 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65  .  16-bit is pre
10430 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a  ferred because.*
10440 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d  * it uses less m
10450 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70  emory in the Exp
10460 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20  r object, which 
10470 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20  is a big memory 
10480 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65  user.** in syste
10490 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20  ms with lots of 
104a0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
104b0 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70  nts.  And few ap
104c0 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65  plications.** ne
104d0 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f  ed more than abo
104e0 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69  ut 10 or 20 vari
104f0 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65  ables.  But some
10500 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77   extreme users w
10510 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70  ant.** to have p
10520 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
10530 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37  ts with over 327
10540 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e  67 variables, an
10550 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68  d for them.** th
10560 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69  e option is avai
10570 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c  lable (at compil
10580 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20  e-time)..*/.#if 
10590 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
105a0 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36  BLE_NUMBER<=3276
105b0 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e  7.typedef i16 yn
105c0 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64  Var;.#else.typed
105d0 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65  ef int ynVar;.#e
105e0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
105f0 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72   node of an expr
10600 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61  ession in the pa
10610 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69  rse tree is an i
10620 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
10630 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  is structure..**
10640 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74  .** Expr.op is t
10650 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69  he opcode. The i
10660 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f  nteger parser to
10670 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65  ken codes are re
10680 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64  used.** as opcod
10690 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61  es here. For exa
106a0 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72  mple, the parser
106b0 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74   defines TK_GE t
106c0 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a  o be an integer.
106d0 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e  ** code represen
106e0 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70  ting the ">=" op
106f0 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d  erator. This sam
10700 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69  e integer code i
10710 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72  s reused.** to r
10720 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65  epresent the gre
10730 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75  ater-than-or-equ
10740 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69  al-to operator i
10750 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
10760 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  .** tree..**.** 
10770 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
10780 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65  n is an SQL lite
10790 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c  ral (TK_INTEGER,
107a0 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c   TK_FLOAT, TK_BL
107b0 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54  OB, .** or TK_ST
107c0 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72  RING), then Expr
107d0 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
107e0 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  the text of the 
107f0 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a  SQL literal. If.
10800 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
10810 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20  n is a variable 
10820 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74  (TK_VARIABLE), t
10830 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
10840 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20  ontains the .** 
10850 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46  variable name. F
10860 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65  inally, if the e
10870 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
10880 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b  SQL function (TK
10890 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74  _FUNCTION),.** t
108a0 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
108b0 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65  ontains the name
108c0 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
108d0 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69  ..**.** Expr.pRi
108e0 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65  ght and Expr.pLe
108f0 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20  ft are the left 
10900 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70  and right subexp
10910 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a  ressions of a.**
10920 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72   binary operator
10930 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68  . Either or both
10940 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a   may be NULL..**
10950 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  .** Expr.x.pList
10960 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72   is a list of ar
10970 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65  guments if the e
10980 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
10990 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a  SQL function,.**
109a0 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69   a CASE expressi
109b0 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72  on or an IN expr
109c0 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f  ession of the fo
109d0 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79  rm "<lhs> IN (<y
109e0 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20  >, <z>...)"..** 
109f0 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
10a00 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78  s used if the ex
10a10 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75  pression is a su
10a20 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65  b-select or an e
10a30 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20  xpression of.** 
10a40 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20  the form "<lhs> 
10a50 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22  IN (SELECT ...)"
10a60 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53  . If the EP_xIsS
10a70 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74  elect bit is set
10a80 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e   in the.** Expr.
10a90 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
10aa0 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
10ab0 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77  is valid. Otherw
10ac0 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73  ise, Expr.x.pLis
10ad0 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a  t is .** valid..
10ae0 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73  **.** An express
10af0 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
10b00 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65  ID or ID.ID refe
10b10 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69  rs to a column i
10b20 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f  n a table..** Fo
10b30 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f  r such expressio
10b40 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73  ns, Expr.op is s
10b50 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20  et to TK_COLUMN 
10b60 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20  and Expr.iTable 
10b70 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65  is.** the intege
10b80 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  r cursor number 
10b90 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72  of a VDBE cursor
10ba0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61   pointing to tha
10bb0 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45  t table and.** E
10bc0 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74  xpr.iColumn is t
10bd0 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  he column number
10be0 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
10bf0 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68  c column.  If th
10c00 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  e.** expression 
10c10 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73  is used as a res
10c20 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67  ult in an aggreg
10c30 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e  ate SELECT, then
10c40 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73   the.** value is
10c50 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20   also stored in 
10c60 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f  the Expr.iAgg co
10c70 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72  lumn in the aggr
10c80 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a  egate so that.**
10c90 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73   it can be acces
10ca0 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67  sed after all ag
10cb0 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d  gregates are com
10cc0 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  puted..**.** If 
10cd0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
10ce0 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72  s an unbound var
10cf0 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20  iable marker (a 
10d00 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a  question mark .*
10d10 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20  * character '?' 
10d20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  in the original 
10d30 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78  SQL) then the Ex
10d40 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20  pr.iTable holds 
10d50 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75  the index .** nu
10d60 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61  mber for that va
10d70 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  riable..**.** If
10d80 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
10d90 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68  is a subquery th
10da0 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  en Expr.iColumn 
10db0 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
10dc0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  .** register num
10dd0 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ber containing t
10de0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
10df0 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74   subquery.  If t
10e00 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67  he.** subquery g
10e10 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  ives a constant 
10e20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61  result, then iTa
10e30 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74  ble is -1.  If t
10e40 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67  he subquery.** g
10e50 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  ives a different
10e60 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65   answer at diffe
10e70 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e  rent times durin
10e80 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63  g statement proc
10e90 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69  essing.** then i
10ea0 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64  Table is the add
10eb0 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75  ress of a subrou
10ec0 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74  tine that comput
10ed0 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  es the subquery.
10ee0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78  .**.** If the Ex
10ef0 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50  pr is of type OP
10f00 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65  _Column, and the
10f10 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c   table it is sel
10f20 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69  ecting from.** i
10f30 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f  s a disk table o
10f40 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73  r the "old.*" ps
10f50 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e  eudo-table, then
10f60 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20   pTab points to 
10f70 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
10f80 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e  ding table defin
10f90 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c  ition..**.** ALL
10fa0 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a  OCATION NOTES:.*
10fb0 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74  *.** Expr object
10fc0 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20  s can use a lot 
10fd0 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  of memory space 
10fe0 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65  in database sche
10ff0 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20  ma.  To.** help 
11000 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65  reduce memory re
11010 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65  quirements, some
11020 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62  times an Expr ob
11030 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20  ject will be.** 
11040 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20  truncated.  And 
11050 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  to reduce the nu
11060 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61  mber of memory a
11070 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65  llocations, some
11080 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20  times.** two or 
11090 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74  more Expr object
110a0 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  s will be stored
110b0 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d   in a single mem
110c0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a  ory allocation,.
110d0 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ** together with
110e0 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72   Expr.zToken str
110f0 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ings..**.** If t
11100 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e  he EP_Reduced an
11110 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  d EP_TokenOnly f
11120 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65  lags are set whe
11130 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a  n.** an Expr obj
11140 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64  ect is truncated
11150 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63  .  When EP_Reduc
11160 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ed is set, then 
11170 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64  all.** the child
11180 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e   Expr objects in
11190 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20   the Expr.pLeft 
111a0 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20  and Expr.pRight 
111b0 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20  subtrees.** are 
111c0 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
111d0 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79   the same memory
111e0 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
111f0 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61  te, however, tha
11200 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65  t.** the subtree
11210 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73  s in Expr.x.pLis
11220 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c  t or Expr.x.pSel
11230 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73  ect are always s
11240 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c  eparately.** all
11250 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65  ocated, regardle
11260 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
11270 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20   not EP_Reduced 
11280 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63  is set..*/.struc
11290 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70  t Expr {.  u8 op
112a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
112b0 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70    /* Operation p
112c0 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73  erformed by this
112d0 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20   node */.  char 
112e0 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  affinity;       
112f0 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
11300 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  y of the column 
11310 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f  or 0 if not a co
11320 6c 75 6d 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c  lumn */.  u16 fl
11330 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
11340 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67   /* Various flag
11350 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c  s.  EP_* See bel
11360 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ow */.  union {.
11370 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e      char *zToken
11380 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  ;          /* To
11390 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20  ken value. Zero 
113a0 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64  terminated and d
113b0 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69  equoted */.    i
113c0 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20  nt iValue;      
113d0 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67        /* Non-neg
113e0 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61  ative integer va
113f0 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c  lue if EP_IntVal
11400 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20  ue */.  } u;..  
11410 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b  /* If the EP_Tok
11420 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73  enOnly flag is s
11430 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
11440 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
11450 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
11460 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
11470 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
11480 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
11490 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
114a0 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
114b0 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
114c0 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
114d0 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  ion. .  ********
114e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
114f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11500 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11510 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
11520 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20    Expr *pLeft;  
11530 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74           /* Left
11540 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78   subnode */.  Ex
11550 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20  pr *pRight;     
11560 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75       /* Right su
11570 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  bnode */.  union
11580 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20   {.    ExprList 
11590 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 46  *pList;     /* F
115a0 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
115b0 73 20 6f 72 20 69 6e 20 22 3c 65 78 70 72 3e 20  s or in "<expr> 
115c0 49 4e 20 28 3c 65 78 70 72 2d 6c 69 73 74 29 22  IN (<expr-list)"
115d0 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
115e0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
115f0 55 73 65 64 20 66 6f 72 20 73 75 62 2d 73 65 6c  Used for sub-sel
11600 65 63 74 73 20 61 6e 64 20 22 3c 65 78 70 72 3e  ects and "<expr>
11610 20 49 4e 20 28 3c 73 65 6c 65 63 74 3e 29 22 20   IN (<select>)" 
11620 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20  */.  } x;..  /* 
11630 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
11640 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  d flag is set in
11650 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
11660 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
11670 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
11680 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
11690 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
116a0 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
116b0 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
116c0 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
116d0 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
116e0 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
116f0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
11700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11720 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11730 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51  *******/..#if SQ
11740 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45  LITE_MAX_EXPR_DE
11750 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69  PTH>0.  int nHei
11760 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ght;           /
11770 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20  * Height of the 
11780 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74  tree headed by t
11790 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64  his node */.#end
117a0 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  if.  int iTable;
117b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
117c0 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72  K_COLUMN: cursor
117d0 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   number of table
117e0 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a   holding column.
117f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11800 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52           ** TK_R
11810 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65  EGISTER: registe
11820 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20  r number.       
11830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11840 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a    ** TK_TRIGGER:
11850 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20   1 -> new, 0 -> 
11860 6f 6c 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69  old */.  ynVar i
11870 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
11880 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f  /* TK_COLUMN: co
11890 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20  lumn index.  -1 
118a0 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20  for rowid..     
118b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118c0 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42      ** TK_VARIAB
118d0 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d  LE: variable num
118e0 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31  ber (always >= 1
118f0 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67  ). */.  i16 iAgg
11900 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
11910 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e  * Which entry in
11920 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b   pAggInfo->aCol[
11930 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a  ] or ->aFunc[] *
11940 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f  /.  i16 iRightJo
11950 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66  inTable;   /* If
11960 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68   EP_FromJoin, th
11970 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66  e right table of
11980 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75   the join */.  u
11990 38 20 66 6c 61 67 73 32 3b 20 20 20 20 20 20 20  8 flags2;       
119a0 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20        /* Second 
119b0 73 65 74 20 6f 66 20 66 6c 61 67 73 2e 20 20 45  set of flags.  E
119c0 50 32 5f 2e 2e 2e 20 2a 2f 0a 20 20 75 38 20 6f  P2_... */.  u8 o
119d0 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  p2;             
119e0 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45     /* TK_REGISTE
119f0 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75  R: original valu
11a00 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20  e of Expr.op.   
11a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55        ** TK_COLU
11a30 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  MN: the value of
11a40 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d   p5 for OP_Colum
11a50 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
11a60 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
11a70 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e  _AGG_FUNCTION: n
11a80 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a  esting depth */.
11a90 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
11aa0 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64  nfo;     /* Used
11ab0 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d   by TK_AGG_COLUM
11ac0 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e  N and TK_AGG_FUN
11ad0 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65  CTION */.  Table
11ae0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
11af0 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54    /* Table for T
11b00 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73  K_COLUMN express
11b10 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ions. */.};../*.
11b20 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
11b30 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67   are the meaning
11b40 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65  s of bits in the
11b50 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
11b60 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  d..*/.#define EP
11b70 5f 46 72 6f 6d 4a 6f 69 6e 20 20 20 30 78 30 30  _FromJoin   0x00
11b80 30 31 20 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65  01  /* Originate
11b90 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e 47  d in ON or USING
11ba0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
11bb0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
11bc0 41 67 67 20 20 20 20 20 20 20 20 30 78 30 30 30  Agg        0x000
11bd0 32 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f  2  /* Contains o
11be0 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
11bf0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
11c00 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73  /.#define EP_Res
11c10 6f 6c 76 65 64 20 20 20 30 78 30 30 30 34 20 20  olved   0x0004  
11c20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e  /* IDs have been
11c30 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c   resolved to COL
11c40 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  UMNs */.#define 
11c50 45 50 5f 45 72 72 6f 72 20 20 20 20 20 20 30 78  EP_Error      0x
11c60 30 30 30 38 20 20 2f 2a 20 45 78 70 72 65 73 73  0008  /* Express
11c70 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  ion contains one
11c80 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20   or more errors 
11c90 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69  */.#define EP_Di
11ca0 73 74 69 6e 63 74 20 20 20 30 78 30 30 31 30 20  stinct   0x0010 
11cb0 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
11cc0 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54  nction with DIST
11cd0 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  INCT keyword */.
11ce0 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65  #define EP_VarSe
11cf0 6c 65 63 74 20 20 30 78 30 30 32 30 20 20 2f 2a  lect  0x0020  /*
11d00 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72   pSelect is corr
11d10 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73  elated, not cons
11d20 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tant */.#define 
11d30 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 20 30 78  EP_DblQuoted  0x
11d40 30 30 34 30 20 20 2f 2a 20 74 6f 6b 65 6e 2e 7a  0040  /* token.z
11d50 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
11d60 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66  in "..." */.#def
11d70 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63  ine EP_InfixFunc
11d80 20 20 30 78 30 30 38 30 20 20 2f 2a 20 54 72 75    0x0080  /* Tru
11d90 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66  e for an infix f
11da0 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47  unction: LIKE, G
11db0 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66  LOB, etc */.#def
11dc0 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20  ine EP_Collate  
11dd0 20 20 30 78 30 31 30 30 20 20 2f 2a 20 54 72 65    0x0100  /* Tre
11de0 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
11df0 43 4f 4c 4c 41 54 45 20 6f 70 65 61 72 74 6f 72  COLLATE opeartor
11e00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46   */.#define EP_F
11e10 69 78 65 64 44 65 73 74 20 20 30 78 30 32 30 30  ixedDest  0x0200
11e20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6e 65 65 64    /* Result need
11e30 65 64 20 69 6e 20 61 20 73 70 65 63 69 66 69 63  ed in a specific
11e40 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 23 64 65   register */.#de
11e50 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
11e60 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 49 6e     0x0400  /* In
11e70 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
11e80 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
11e90 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
11ea0 78 49 73 53 65 6c 65 63 74 20 20 30 78 30 38 30  xIsSelect  0x080
11eb0 30 20 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  0  /* x.pSelect 
11ec0 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
11ed0 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
11ee0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48 69  */.#define EP_Hi
11ef0 6e 74 20 20 20 20 20 20 20 30 78 31 30 30 30 20  nt       0x1000 
11f00 20 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f 0a   /* Not used */.
11f10 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
11f20 65 64 20 20 20 20 30 78 32 30 30 30 20 20 2f 2a  ed    0x2000  /*
11f30 20 45 78 70 72 20 73 74 72 75 63 74 20 69 73 20   Expr struct is 
11f40 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
11f50 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
11f60 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f  define EP_TokenO
11f70 6e 6c 79 20 20 30 78 34 30 30 30 20 20 2f 2a 20  nly  0x4000  /* 
11f80 45 78 70 72 20 73 74 72 75 63 74 20 69 73 20 45  Expr struct is E
11f90 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
11fa0 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
11fb0 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69  #define EP_Stati
11fc0 63 20 20 20 20 20 30 78 38 30 30 30 20 20 2f 2a  c     0x8000  /*
11fd0 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20   Held in memory 
11fe0 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  not obtained fro
11ff0 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 0a 2f  m malloc() */../
12000 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
12010 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69  ng are the meani
12020 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74  ngs of bits in t
12030 68 65 20 45 78 70 72 2e 66 6c 61 67 73 32 20 66  he Expr.flags2 f
12040 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
12050 20 45 50 32 5f 4d 61 6c 6c 6f 63 65 64 54 6f 6b   EP2_MallocedTok
12060 65 6e 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4e  en  0x0001  /* N
12070 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62  eed to sqlite3Db
12080 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b  Free() Expr.zTok
12090 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  en */.#define EP
120a0 32 5f 49 72 72 65 64 75 63 69 62 6c 65 20 20 20  2_Irreducible   
120b0 20 30 78 30 30 30 32 20 20 2f 2a 20 43 61 6e 6e   0x0002  /* Cann
120c0 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ot EXPRDUP_REDUC
120d0 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 0a  E this Expr */..
120e0 2f 2a 0a 2a 2a 20 54 68 65 20 70 73 65 75 64 6f  /*.** The pseudo
120f0 2d 72 6f 75 74 69 6e 65 20 73 71 6c 69 74 65 33  -routine sqlite3
12100 45 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62  ExprSetIrreducib
12110 6c 65 20 73 65 74 73 20 74 68 65 20 45 50 32 5f  le sets the EP2_
12120 49 72 72 65 64 75 63 69 62 6c 65 0a 2a 2a 20 66  Irreducible.** f
12130 6c 61 67 20 6f 6e 20 61 6e 20 65 78 70 72 65 73  lag on an expres
12140 73 69 6f 6e 20 73 74 72 75 63 74 75 72 65 2e 20  sion structure. 
12150 20 54 68 69 73 20 66 6c 61 67 20 69 73 20 75 73   This flag is us
12160 65 64 20 66 6f 72 20 56 56 26 41 20 6f 6e 6c 79  ed for VV&A only
12170 2e 20 20 54 68 65 0a 2a 2a 20 72 6f 75 74 69 6e  .  The.** routin
12180 65 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  e is implemented
12190 20 61 73 20 61 20 6d 61 63 72 6f 20 74 68 61 74   as a macro that
121a0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 77 68 65 6e   only works when
121b0 20 69 6e 20 64 65 62 75 67 67 69 6e 67 20 6d 6f   in debugging mo
121c0 64 65 2c 0a 2a 2a 20 73 6f 20 61 73 20 6e 6f 74  de,.** so as not
121d0 20 74 6f 20 62 75 72 64 65 6e 20 70 72 6f 64 75   to burden produ
121e0 63 74 69 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23  ction code..*/.#
121f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
12200 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  UG.# define Expr
12210 53 65 74 49 72 72 65 64 75 63 69 62 6c 65 28 58  SetIrreducible(X
12220 29 20 20 28 58 29 2d 3e 66 6c 61 67 73 32 20 7c  )  (X)->flags2 |
12230 3d 20 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c  = EP2_Irreducibl
12240 65 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  e.#else.# define
12250 20 45 78 70 72 53 65 74 49 72 72 65 64 75 63 69   ExprSetIrreduci
12260 62 6c 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  ble(X).#endif../
12270 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
12280 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
12290 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
122a0 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
122b0 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20   .** Expr.flags 
122c0 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
122d0 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74  e ExprHasPropert
122e0 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29  y(E,P)     (((E)
122f0 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  ->flags&(P))==(P
12300 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  )).#define ExprH
12310 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 45 2c  asAnyProperty(E,
12320 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73  P)  (((E)->flags
12330 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
12340 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
12350 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e  y(E,P)     (E)->
12360 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  flags|=(P).#defi
12370 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70  ne ExprClearProp
12380 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d  erty(E,P)   (E)-
12390 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  >flags&=~(P)../*
123a0 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
123b0 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62  termine the numb
123c0 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75  er of bytes requ
123d0 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c  ired by a normal
123e0 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74   Expr .** struct
123f0 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  , an Expr struct
12400 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64   with the EP_Red
12410 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e  uced flag set in
12420 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20   Expr.flags .** 
12430 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75  and an Expr stru
12440 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54  ct with the EP_T
12450 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65  okenOnly flag se
12460 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  t..*/.#define EX
12470 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20  PR_FULLSIZE     
12480 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70        sizeof(Exp
12490 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r)           /* 
124a0 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65  Full size */.#de
124b0 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45  fine EXPR_REDUCE
124c0 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66  DSIZE        off
124d0 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c  setof(Expr,iTabl
124e0 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65  e)  /* Common fe
124f0 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e  atures */.#defin
12500 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  e EXPR_TOKENONLY
12510 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74  SIZE      offset
12520 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20  of(Expr,pLeft)  
12530 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72   /* Fewer featur
12540 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  es */../*.** Fla
12550 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  gs passed to the
12560 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
12570 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20  ) function. See 
12580 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
12590 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c  nt .** above sql
125a0 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f  ite3ExprDup() fo
125b0 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64  r details..*/.#d
125c0 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45  efine EXPRDUP_RE
125d0 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30  DUCE         0x0
125e0 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64  001  /* Used red
125f0 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e  uced-size Expr n
12600 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  odes */../*.** A
12610 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
12620 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72  ions.  Each expr
12630 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f  ession may optio
12640 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20  nally have a.** 
12650 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e  name.  An expr/n
12660 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ame combination 
12670 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73  can be used in s
12680 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63  everal ways, suc
12690 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74  h.** as the list
126a0 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22   of "expr AS ID"
126b0 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e   fields followin
126c0 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20  g a "SELECT" or 
126d0 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f  in the.** list o
126e0 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74  f "ID = expr" it
126f0 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45  ems in an UPDATE
12700 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  .  A list of exp
12710 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20  ressions can.** 
12720 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20  also be used as 
12730 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  the argument to 
12740 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77  a function, in w
12750 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e  hich case the a.
12760 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69  zName.** field i
12770 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
12780 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65  * By default the
12790 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c   Expr.zSpan fiel
127a0 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d  d holds a human-
127b0 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70  readable descrip
127c0 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65  tion of.** the e
127d0 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
127e0 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65  s used in the ge
127f0 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f  neration of erro
12800 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a  r messages and.*
12810 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e  * column labels.
12820 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
12830 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79  Expr.zSpan is ty
12840 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74  pically the text
12850 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20   of a.** column 
12860 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74  expression as it
12870 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c   exists in a SEL
12880 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
12890 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74  However, if.** t
128a0 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c  he bSpanIsTab fl
128b0 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
128c0 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61  zSpan is overloa
128d0 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20  ded to mean the 
128e0 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72  name.** of the r
128f0 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20  esult column in 
12900 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41  the form: DATABA
12910 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e  SE.TABLE.COLUMN.
12920 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20    This later.** 
12930 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72  form is used for
12940 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e   name resolution
12950 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f   with nested FRO
12960 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74  M clauses..*/.st
12970 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a  ruct ExprList {.
12980 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20    int nExpr;    
12990 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
129a0 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  er of expression
129b0 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
129c0 0a 20 20 69 6e 74 20 69 45 43 75 72 73 6f 72 3b  .  int iECursor;
129d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 44 42            /* VDB
129e0 45 20 43 75 72 73 6f 72 20 61 73 73 6f 63 69 61  E Cursor associa
129f0 74 65 64 20 77 69 74 68 20 74 68 69 73 20 45 78  ted with this Ex
12a00 70 72 4c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75  prList */.  stru
12a10 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d  ct ExprList_item
12a20 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65   { /* For each e
12a30 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
12a40 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70   list */.    Exp
12a50 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
12a60 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74       /* The list
12a70 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
12a80 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
12a90 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
12aa0 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74  * Token associat
12ab0 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70  ed with this exp
12ac0 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63  ression */.    c
12ad0 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20  har *zSpan;     
12ae0 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e         /* Origin
12af0 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65  al text of the e
12b00 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
12b10 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20   u8 sortOrder;  
12b20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f           /* 1 fo
12b30 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20  r DESC or 0 for 
12b40 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ASC */.    unsig
12b50 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20  ned done :1;    
12b60 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20     /* A flag to 
12b70 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72  indicate when pr
12b80 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69  ocessing is fini
12b90 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  shed */.    unsi
12ba0 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20  gned bSpanIsTab 
12bb0 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c  :1; /* zSpan hol
12bc0 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55  ds DB.TABLE.COLU
12bd0 4d 4e 20 2a 2f 0a 20 20 20 20 75 31 36 20 69 4f  MN */.    u16 iO
12be0 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20  rderByCol;      
12bf0 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42    /* For ORDER B
12c00 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  Y, column number
12c10 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a   in result set *
12c20 2f 0a 20 20 20 20 75 31 36 20 69 41 6c 69 61 73  /.    u16 iAlias
12c30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12c40 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73   Index into Pars
12c50 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a  e.aAlias[] for z
12c60 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 20  Name */.  } *a; 
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c80 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65   /* Alloc a powe
12c90 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72  r of two greater
12ca0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78   or equal to nEx
12cb0 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  pr */.};../*.** 
12cc0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
12cd0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
12ce0 20 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72   used by the par
12cf0 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f  ser to record bo
12d00 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20  th.** the parse 
12d10 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72  tree for an expr
12d20 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73  ession and the s
12d30 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78  pan of input tex
12d40 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72  t for an.** expr
12d50 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  ession..*/.struc
12d60 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45  t ExprSpan {.  E
12d70 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
12d80 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72       /* The expr
12d90 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65  ession parse tre
12da0 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
12db0 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20  r *zStart;   /* 
12dc0 46 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20  First character 
12dd0 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f  of input text */
12de0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
12df0 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20  End;     /* One 
12e00 63 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74  character past t
12e10 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20  he end of input 
12e20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  text */.};../*.*
12e30 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
12e40 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
12e50 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c  can hold a simpl
12e60 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69  e list of identi
12e70 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61  fiers,.** such a
12e80 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c  s the list "a,b,
12e90 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  c" in the follow
12ea0 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a  ing statements:.
12eb0 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52  **.**      INSER
12ec0 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20  T INTO t(a,b,c) 
12ed0 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20  VALUES ...;.**  
12ee0 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
12ef0 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29   idx ON t(a,b,c)
12f00 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
12f10 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45   TRIGGER trig BE
12f20 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74  FORE UPDATE ON t
12f30 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a  (a,b,c) ...;.**.
12f40 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e  ** The IdList.a.
12f50 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65  idx field is use
12f60 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73  d when the IdLis
12f70 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  t represents the
12f80 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75   list of.** colu
12f90 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61  mn names after a
12fa0 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61   table name in a
12fb0 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
12fc0 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74  nt.  In the stat
12fd0 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ement.**.**     
12fe0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
12ff0 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49  b,c) ....**.** I
13000 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74  f "a" is the k-t
13010 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c  h column of tabl
13020 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69  e "t", then IdLi
13030 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a  st.a[0].idx==k..
13040 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74  */.struct IdList
13050 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69   {.  struct IdLi
13060 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68  st_item {.    ch
13070 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
13080 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69  /* Name of the i
13090 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20  dentifier */.   
130a0 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20   int idx;       
130b0 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
130c0 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d  ome Table.aCol[]
130d0 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d   of a column nam
130e0 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20  ed zName */.  } 
130f0 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20  *a;.  int nId;  
13100 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13110 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20   of identifiers 
13120 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
13130 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74  ;../*.** The bit
13140 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65  mask datatype de
13150 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75  fined below is u
13160 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20  sed for various 
13170 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a  optimizations..*
13180 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68  *.** Changing th
13190 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74  is from a 64-bit
131a0 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70   to a 32-bit typ
131b0 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d  e limits the num
131c0 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73  ber of.** tables
131d0 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32   in a join to 32
131e0 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20   instead of 64. 
131f0 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64   But it also red
13200 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a  uces the size.**
13210 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20   of the library 
13220 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20  by 738 bytes on 
13230 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  ix86..*/.typedef
13240 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f   u64 Bitmask;../
13250 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
13260 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74  of bits in a Bit
13270 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61  mask.  "BMS" mea
13280 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65  ns "BitMask Size
13290 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d  "..*/.#define BM
132a0 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66  S  ((int)(sizeof
132b0 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f  (Bitmask)*8))../
132c0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
132d0 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ng structure des
132e0 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20  cribes the FROM 
132f0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
13300 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
13310 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73   Each table or s
13320 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46  ubquery in the F
13330 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20  ROM clause is a 
13340 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74  separate element
13350 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69   of.** the SrcLi
13360 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a  st.a[] array..**
13370 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64  .** With the add
13380 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c  ition of multipl
13390 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f  e database suppo
133a0 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  rt, the followin
133b0 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63  g structure.** c
133c0 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  an also be used 
133d0 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61  to describe a pa
133e0 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73  rticular table s
133f0 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65  uch as the table
13400 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69   that.** is modi
13410 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52  fied by an INSER
13420 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50  T, DELETE, or UP
13430 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  DATE statement. 
13440 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c   In standard SQL
13450 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c  ,.** such a tabl
13460 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70  e must be a simp
13470 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75  le name: ID.  Bu
13480 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65  t in SQLite, the
13490 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f   table can.** no
134a0 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20  w be identified 
134b0 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61  by a database na
134c0 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20  me, a dot, then 
134d0 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20  the table name: 
134e0 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ID.ID..**.** The
134f0 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73   jointype starts
13500 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65   out showing the
13510 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65   join type betwe
13520 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
13530 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20  able.** and the 
13540 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68  next table on th
13550 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72  e list.  The par
13560 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c  ser builds the l
13570 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a  ist this way..**
13580 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c   But sqlite3SrcL
13590 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
135a0 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20  () later shifts 
135b0 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f  the jointypes so
135c0 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f   that each.** jo
135d0 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73  intype expresses
135e0 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65   the join betwee
135f0 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20  n the table and 
13600 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62  the previous tab
13610 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  le..**.** In the
13620 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20   colUsed field, 
13630 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  the high-order b
13640 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73  it (bit 63) is s
13650 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a  et if the table.
13660 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65  ** contains more
13670 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73   than 63 columns
13680 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f   and the 64-th o
13690 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69  r later column i
136a0 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  s used..*/.struc
136b0 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 31  t SrcList {.  i1
136c0 36 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f  6 nSrc;        /
136d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
136e0 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
136f0 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
13700 75 73 65 20 2a 2f 0a 20 20 69 31 36 20 6e 41 6c  use */.  i16 nAl
13710 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  loc;      /* Num
13720 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61  ber of entries a
13730 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20  llocated in a[] 
13740 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63  below */.  struc
13750 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b  t SrcList_item {
13760 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63  .    Schema *pSc
13770 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61  hema;  /* Schema
13780 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
13790 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a  tem is fixed */.
137a0 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62      char *zDatab
137b0 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ase;  /* Name of
137c0 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
137d0 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  g this table */.
137e0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
137f0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
13800 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
13810 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20    char *zAlias; 
13820 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70      /* The "B" p
13830 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42  art of a "A AS B
13840 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65  " phrase.  zName
13850 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20   is the "A" */. 
13860 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
13870 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74       /* An SQL t
13880 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  able correspondi
13890 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ng to zName */. 
138a0 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
138b0 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54  ct;  /* A SELECT
138c0 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20   statement used 
138d0 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61  in place of a ta
138e0 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20  ble name */.    
138f0 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b  int addrFillSub;
13900 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
13910 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61  subroutine to ma
13920 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72  nifest a subquer
13930 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  y */.    int reg
13940 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65  Return;    /* Re
13950 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
13960 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66  eturn address of
13970 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a   addrFillSub */.
13980 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b      u8 jointype;
13990 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
139a0 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
139b0 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20  is able and the 
139c0 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20  previous */.    
139d0 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65  unsigned notInde
139e0 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72  xed :1;    /* Tr
139f0 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
13a00 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
13a10 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  use */.    unsig
13a20 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64  ned isCorrelated
13a30 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66   :1;  /* True if
13a40 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f   sub-query is co
13a50 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20  rrelated */.    
13a60 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f  unsigned viaCoro
13a70 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d  utine :1;  /* Im
13a80 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63  plemented as a c
13a90 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 23 69 66  o-routine */.#if
13aa0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
13ab0 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20  _EXPLAIN.    u8 
13ac0 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f  iSelectId;     /
13ad0 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c  * If pSelect!=0,
13ae0 20 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73   the id of the s
13af0 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50  ub-select in EQP
13b00 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69   */.#endif.    i
13b10 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20  nt iCursor;     
13b20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
13b30 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20  sor number used 
13b40 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74  to access this t
13b50 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72  able */.    Expr
13b60 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a   *pOn;        /*
13b70 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f   The ON clause o
13b80 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
13b90 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20  IdList *pUsing; 
13ba0 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63    /* The USING c
13bb0 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
13bc0 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63  */.    Bitmask c
13bd0 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20  olUsed;  /* Bit 
13be0 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20  N (1<<N) set if 
13bf0 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62  column N of pTab
13c00 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20   is used */.    
13c10 63 68 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20  char *zIndex;   
13c20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20    /* Identifier 
13c30 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59  from "INDEXED BY
13c40 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73   <zIndex>" claus
13c50 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a  e */.    Index *
13c60 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e  pIndex;    /* In
13c70 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f  dex structure co
13c80 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a  rresponding to z
13c90 49 6e 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f  Index, if any */
13ca0 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
13cb0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
13cc0 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65  try for each ide
13cd0 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c  ntifier on the l
13ce0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
13cf0 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65   Permitted value
13d00 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74  s of the SrcList
13d10 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c  .a.jointype fiel
13d20 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d.*/.#define JT_
13d30 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31  INNER     0x0001
13d40 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20      /* Any kind 
13d50 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73  of inner or cros
13d60 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  s join */.#defin
13d70 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30  e JT_CROSS     0
13d80 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c  x0002    /* Expl
13d90 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20  icit use of the 
13da0 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f  CROSS keyword */
13db0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55  .#define JT_NATU
13dc0 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20  RAL   0x0004    
13dd0 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e  /* True for a "n
13de0 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a  atural" join */.
13df0 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20  #define JT_LEFT 
13e00 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f       0x0008    /
13e10 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69  * Left outer joi
13e20 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
13e30 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30  RIGHT     0x0010
13e40 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74      /* Right out
13e50 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
13e60 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20  ne JT_OUTER     
13e70 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65  0x0020    /* The
13e80 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64   "OUTER" keyword
13e90 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23   is present */.#
13ea0 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20  define JT_ERROR 
13eb0 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a      0x0040    /*
13ec0 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75   unknown or unsu
13ed0 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70  pported join typ
13ee0 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 57  e */.../*.** A W
13ef0 68 65 72 65 50 6c 61 6e 20 6f 62 6a 65 63 74 20  herePlan object 
13f00 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  holds informatio
13f10 6e 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  n that describes
13f20 20 61 20 6c 6f 6f 6b 75 70 0a 2a 2a 20 73 74 72   a lookup.** str
13f30 61 74 65 67 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ategy..**.** Thi
13f40 73 20 6f 62 6a 65 63 74 20 69 73 20 69 6e 74 65  s object is inte
13f50 6e 64 65 64 20 74 6f 20 62 65 20 6f 70 61 71 75  nded to be opaqu
13f60 65 20 6f 75 74 73 69 64 65 20 6f 66 20 74 68 65  e outside of the
13f70 20 77 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 2e   where.c module.
13f80 0a 2a 2a 20 49 74 20 69 73 20 69 6e 63 6c 75 64  .** It is includ
13f90 65 64 20 68 65 72 65 20 6f 6e 6c 79 20 73 6f 20  ed here only so 
13fa0 74 68 61 74 20 74 68 61 74 20 63 6f 6d 70 69 6c  that that compil
13fb0 65 72 20 77 69 6c 6c 20 6b 6e 6f 77 20 68 6f 77  er will know how
13fc0 20 62 69 67 20 69 74 0a 2a 2a 20 69 73 2e 20 20   big it.** is.  
13fd0 4e 6f 6e 65 20 6f 66 20 74 68 65 20 66 69 65 6c  None of the fiel
13fe0 64 73 20 69 6e 20 74 68 69 73 20 6f 62 6a 65 63  ds in this objec
13ff0 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
14000 20 6f 75 74 73 69 64 65 20 6f 66 0a 2a 2a 20 74   outside of.** t
14010 68 65 20 77 68 65 72 65 2e 63 20 6d 6f 64 75 6c  he where.c modul
14020 65 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 69 6e 20  e..**.** Within 
14030 74 68 65 20 75 6e 69 6f 6e 2c 20 70 49 64 78 20  the union, pIdx 
14040 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
14050 6e 20 77 73 46 6c 61 67 73 26 57 48 45 52 45 5f  n wsFlags&WHERE_
14060 49 4e 44 45 58 45 44 20 69 73 20 74 72 75 65 2e  INDEXED is true.
14070 0a 2a 2a 20 70 54 65 72 6d 20 69 73 20 6f 6e 6c  .** pTerm is onl
14080 79 20 75 73 65 64 20 77 68 65 6e 20 77 73 46 6c  y used when wsFl
14090 61 67 73 26 57 48 45 52 45 5f 4d 55 4c 54 49 5f  ags&WHERE_MULTI_
140a0 4f 52 20 69 73 20 74 72 75 65 2e 20 20 41 6e 64  OR is true.  And
140b0 20 70 56 74 61 62 49 64 78 0a 2a 2a 20 69 73 20   pVtabIdx.** is 
140c0 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 20 77  only used when w
140d0 73 46 6c 61 67 73 26 57 48 45 52 45 5f 56 49 52  sFlags&WHERE_VIR
140e0 54 55 41 4c 54 41 42 4c 45 20 69 73 20 74 72 75  TUALTABLE is tru
140f0 65 2e 20 20 49 74 20 69 73 20 6e 65 76 65 72 20  e.  It is never 
14100 74 68 65 0a 2a 2a 20 63 61 73 65 20 74 68 61 74  the.** case that
14110 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 6f   more than one o
14120 66 20 74 68 65 73 65 20 63 6f 6e 64 69 74 69 6f  f these conditio
14130 6e 73 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 73  ns is true..*/.s
14140 74 72 75 63 74 20 57 68 65 72 65 50 6c 61 6e 20  truct WherePlan 
14150 7b 0a 20 20 75 33 32 20 77 73 46 6c 61 67 73 3b  {.  u32 wsFlags;
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 20 20 20 2f 2a 20 57 48 45 52 45 5f 2a 20 66 6c     /* WHERE_* fl
14180 61 67 73 20 74 68 61 74 20 64 65 73 63 72 69 62  ags that describ
14190 65 20 74 68 65 20 73 74 72 61 74 65 67 79 20 2a  e the strategy *
141a0 2f 0a 20 20 75 31 36 20 6e 45 71 3b 20 20 20 20  /.  u16 nEq;    
141b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
141d0 3d 3d 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  == constraints *
141e0 2f 0a 20 20 75 31 36 20 6e 4f 42 53 61 74 3b 20  /.  u16 nOBSat; 
141f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14200 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14210 4f 52 44 45 52 20 42 59 20 74 65 72 6d 73 20 73  ORDER BY terms s
14220 61 74 69 73 66 69 65 64 20 2a 2f 0a 20 20 64 6f  atisfied */.  do
14230 75 62 6c 65 20 6e 52 6f 77 3b 20 20 20 20 20 20  uble nRow;      
14240 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14250 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
14260 20 6f 66 20 72 6f 77 73 20 28 66 6f 72 20 45 51   of rows (for EQ
14270 50 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  P) */.  union {.
14280 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
14290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142a0 20 20 20 2f 2a 20 49 6e 64 65 78 20 77 68 65 6e     /* Index when
142b0 20 57 48 45 52 45 5f 49 4e 44 45 58 45 44 20 69   WHERE_INDEXED i
142c0 73 20 74 72 75 65 20 2a 2f 0a 20 20 20 20 73 74  s true */.    st
142d0 72 75 63 74 20 57 68 65 72 65 54 65 72 6d 20 2a  ruct WhereTerm *
142e0 70 54 65 72 6d 3b 20 20 20 20 20 20 20 2f 2a 20  pTerm;       /* 
142f0 57 48 45 52 45 20 63 6c 61 75 73 65 20 74 65 72  WHERE clause ter
14300 6d 20 66 6f 72 20 4f 52 2d 73 65 61 72 63 68 20  m for OR-search 
14310 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69  */.    sqlite3_i
14320 6e 64 65 78 5f 69 6e 66 6f 20 2a 70 56 74 61 62  ndex_info *pVtab
14330 49 64 78 3b 20 20 2f 2a 20 56 69 72 74 75 61 6c  Idx;  /* Virtual
14340 20 74 61 62 6c 65 20 69 6e 64 65 78 20 74 6f 20   table index to 
14350 75 73 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b  use */.  } u;.};
14360 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 65 61 63 68  ../*.** For each
14370 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 69 6e 20   nested loop in 
14380 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  a WHERE clause i
14390 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
143a0 68 65 20 57 68 65 72 65 49 6e 66 6f 0a 2a 2a 20  he WhereInfo.** 
143b0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
143c0 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74  ns a single inst
143d0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
143e0 75 63 74 75 72 65 2e 20 20 54 68 69 73 20 73 74  ucture.  This st
143f0 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 69 6e  ructure.** is in
14400 74 65 6e 64 65 64 20 74 6f 20 62 65 20 70 72 69  tended to be pri
14410 76 61 74 65 20 74 6f 20 74 68 65 20 77 68 65 72  vate to the wher
14420 65 2e 63 20 6d 6f 64 75 6c 65 20 61 6e 64 20 73  e.c module and s
14430 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20  hould not be.** 
14440 61 63 63 65 73 73 20 6f 72 20 6d 6f 64 69 66 69  access or modifi
14450 65 64 20 62 79 20 6f 74 68 65 72 20 6d 6f 64 75  ed by other modu
14460 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  les..**.** The p
14470 49 64 78 49 6e 66 6f 20 66 69 65 6c 64 20 69 73  IdxInfo field is
14480 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 70 69   used to help pi
14490 63 6b 20 74 68 65 20 62 65 73 74 20 69 6e 64 65  ck the best inde
144a0 78 20 6f 6e 20 61 0a 2a 2a 20 76 69 72 74 75 61  x on a.** virtua
144b0 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 20 70 49  l table.  The pI
144c0 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65 72 20 63  dxInfo pointer c
144d0 6f 6e 74 61 69 6e 73 20 69 6e 64 65 78 69 6e 67  ontains indexing
144e0 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
144f0 66 6f 72 20 74 68 65 20 69 2d 74 68 20 74 61 62  for the i-th tab
14500 6c 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  le in the FROM c
14510 6c 61 75 73 65 20 62 65 66 6f 72 65 20 72 65 6f  lause before reo
14520 72 64 65 72 69 6e 67 2e 0a 2a 2a 20 41 6c 6c 20  rdering..** All 
14530 74 68 65 20 70 49 64 78 49 6e 66 6f 20 70 6f 69  the pIdxInfo poi
14540 6e 74 65 72 73 20 61 72 65 20 66 72 65 65 64 20  nters are freed 
14550 62 79 20 77 68 65 72 65 49 6e 66 6f 46 72 65 65  by whereInfoFree
14560 28 29 20 69 6e 20 77 68 65 72 65 2e 63 2e 0a 2a  () in where.c..*
14570 2a 20 41 6c 6c 20 6f 74 68 65 72 20 69 6e 66 6f  * All other info
14580 72 6d 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 69  rmation in the i
14590 2d 74 68 20 57 68 65 72 65 4c 65 76 65 6c 20 6f  -th WhereLevel o
145a0 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 69 2d  bject for the i-
145b0 74 68 20 74 61 62 6c 65 0a 2a 2a 20 61 66 74 65  th table.** afte
145c0 72 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 72  r FROM clause or
145d0 64 65 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63  dering..*/.struc
145e0 74 20 57 68 65 72 65 4c 65 76 65 6c 20 7b 0a 20  t WhereLevel {. 
145f0 20 57 68 65 72 65 50 6c 61 6e 20 70 6c 61 6e 3b   WherePlan plan;
14600 20 20 20 20 20 20 20 2f 2a 20 71 75 65 72 79 20         /* query 
14610 70 6c 61 6e 20 66 6f 72 20 74 68 69 73 20 65 6c  plan for this el
14620 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 46 52 4f  ement of the FRO
14630 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 69 6e  M clause */.  in
14640 74 20 69 4c 65 66 74 4a 6f 69 6e 3b 20 20 20 20  t iLeftJoin;    
14650 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 63 65      /* Memory ce
14660 6c 6c 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  ll used to imple
14670 6d 65 6e 74 20 4c 45 46 54 20 4f 55 54 45 52 20  ment LEFT OUTER 
14680 4a 4f 49 4e 20 2a 2f 0a 20 20 69 6e 74 20 69 54  JOIN */.  int iT
14690 61 62 43 75 72 3b 20 20 20 20 20 20 20 20 20 20  abCur;          
146a0 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
146b0 6f 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  or used to acces
146c0 73 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  s the table */. 
146d0 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20 20   int iIdxCur;   
146e0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
146f0 42 45 20 63 75 72 73 6f 72 20 75 73 65 64 20 74  BE cursor used t
14700 6f 20 61 63 63 65 73 73 20 70 49 64 78 20 2a 2f  o access pIdx */
14710 0a 20 20 69 6e 74 20 61 64 64 72 42 72 6b 3b 20  .  int addrBrk; 
14720 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70           /* Jump
14730 20 68 65 72 65 20 74 6f 20 62 72 65 61 6b 20 6f   here to break o
14740 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a  ut of the loop *
14750 2f 0a 20 20 69 6e 74 20 61 64 64 72 4e 78 74 3b  /.  int addrNxt;
14760 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d            /* Jum
14770 70 20 68 65 72 65 20 74 6f 20 73 74 61 72 74 20  p here to start 
14780 74 68 65 20 6e 65 78 74 20 49 4e 20 63 6f 6d 62  the next IN comb
14790 69 6e 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  ination */.  int
147a0 20 61 64 64 72 43 6f 6e 74 3b 20 20 20 20 20 20   addrCont;      
147b0 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20     /* Jump here 
147c0 74 6f 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68  to continue with
147d0 20 74 68 65 20 6e 65 78 74 20 6c 6f 6f 70 20 63   the next loop c
147e0 79 63 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 61 64  ycle */.  int ad
147f0 64 72 46 69 72 73 74 3b 20 20 20 20 20 20 20 20  drFirst;        
14800 2f 2a 20 46 69 72 73 74 20 69 6e 73 74 72 75 63  /* First instruc
14810 74 69 6f 6e 20 6f 66 20 69 6e 74 65 72 69 6f 72  tion of interior
14820 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a   of the loop */.
14830 20 20 75 38 20 69 46 72 6f 6d 3b 20 20 20 20 20    u8 iFrom;     
14840 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
14850 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 46 52   entry in the FR
14860 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  OM clause */.  u
14870 38 20 6f 70 2c 20 70 35 3b 20 20 20 20 20 20 20  8 op, p5;       
14880 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 61       /* Opcode a
14890 6e 64 20 50 35 20 6f 66 20 74 68 65 20 6f 70 63  nd P5 of the opc
148a0 6f 64 65 20 74 68 61 74 20 65 6e 64 73 20 74 68  ode that ends th
148b0 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20  e loop */.  int 
148c0 70 31 2c 20 70 32 3b 20 20 20 20 20 20 20 20 20  p1, p2;         
148d0 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 6f 66    /* Operands of
148e0 20 74 68 65 20 6f 70 63 6f 64 65 20 75 73 65 64   the opcode used
148f0 20 74 6f 20 65 6e 64 73 20 74 68 65 20 6c 6f 6f   to ends the loo
14900 70 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20  p */.  union {  
14910 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14920 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  Information that
14930 20 64 65 70 65 6e 64 73 20 6f 6e 20 70 6c 61 6e   depends on plan
14940 2e 77 73 46 6c 61 67 73 20 2a 2f 0a 20 20 20 20  .wsFlags */.    
14950 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 69  struct {.      i
14960 6e 74 20 6e 49 6e 3b 20 20 20 20 20 20 20 20 20  nt nIn;         
14970 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14980 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 49 6e  f entries in aIn
14990 4c 6f 6f 70 5b 5d 20 2a 2f 0a 20 20 20 20 20 20  Loop[] */.      
149a0 73 74 72 75 63 74 20 49 6e 4c 6f 6f 70 20 7b 0a  struct InLoop {.
149b0 20 20 20 20 20 20 20 20 69 6e 74 20 69 43 75 72          int iCur
149c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
149d0 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
149e0 72 20 75 73 65 64 20 62 79 20 74 68 69 73 20 49  r used by this I
149f0 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20  N operator */.  
14a00 20 20 20 20 20 20 69 6e 74 20 61 64 64 72 49 6e        int addrIn
14a10 54 6f 70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Top;         /* 
14a20 54 6f 70 20 6f 66 20 74 68 65 20 49 4e 20 6c 6f  Top of the IN lo
14a30 6f 70 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 38  op */.        u8
14a40 20 65 45 6e 64 4c 6f 6f 70 4f 70 3b 20 20 20 20   eEndLoopOp;    
14a50 20 20 20 20 20 2f 2a 20 49 4e 20 4c 6f 6f 70 20       /* IN Loop 
14a60 74 65 72 6d 69 6e 61 74 6f 72 2e 20 4f 50 5f 4e  terminator. OP_N
14a70 65 78 74 20 6f 72 20 4f 50 5f 50 72 65 76 20 2a  ext or OP_Prev *
14a80 2f 0a 20 20 20 20 20 20 7d 20 2a 61 49 6e 4c 6f  /.      } *aInLo
14a90 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  op;           /*
14aa0 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
14ab0 75 74 20 65 61 63 68 20 6e 65 73 74 65 64 20 49  ut each nested I
14ac0 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20  N operator */.  
14ad0 20 20 7d 20 69 6e 3b 20 20 20 20 20 20 20 20 20    } in;         
14ae0 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
14af0 77 68 65 6e 20 70 6c 61 6e 2e 77 73 46 6c 61 67  when plan.wsFlag
14b00 73 26 57 48 45 52 45 5f 49 4e 5f 41 42 4c 45 20  s&WHERE_IN_ABLE 
14b10 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 43  */.    Index *pC
14b20 6f 76 69 64 78 3b 20 20 20 20 20 20 20 2f 2a 20  ovidx;       /* 
14b30 50 6f 73 73 69 62 6c 65 20 63 6f 76 65 72 69 6e  Possible coverin
14b40 67 20 69 6e 64 65 78 20 66 6f 72 20 57 48 45 52  g index for WHER
14b50 45 5f 4d 55 4c 54 49 5f 4f 52 20 2a 2f 0a 20 20  E_MULTI_OR */.  
14b60 7d 20 75 3b 0a 20 20 64 6f 75 62 6c 65 20 72 4f  } u;.  double rO
14b70 70 74 43 6f 73 74 3b 20 20 20 20 20 20 2f 2a 20  ptCost;      /* 
14b80 22 4f 70 74 69 6d 61 6c 22 20 63 6f 73 74 20 66  "Optimal" cost f
14b90 6f 72 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f  or this level */
14ba0 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  ..  /* The follo
14bb0 77 69 6e 67 20 66 69 65 6c 64 20 69 73 20 72 65  wing field is re
14bc0 61 6c 6c 79 20 6e 6f 74 20 70 61 72 74 20 6f 66  ally not part of
14bd0 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 65 76   the current lev
14be0 65 6c 2e 20 20 42 75 74 0a 20 20 2a 2a 20 77 65  el.  But.  ** we
14bf0 20 6e 65 65 64 20 61 20 70 6c 61 63 65 20 74 6f   need a place to
14c00 20 63 61 63 68 65 20 76 69 72 74 75 61 6c 20 74   cache virtual t
14c10 61 62 6c 65 20 69 6e 64 65 78 20 69 6e 66 6f 72  able index infor
14c20 6d 61 74 69 6f 6e 20 66 6f 72 20 65 61 63 68 0a  mation for each.
14c30 20 20 2a 2a 20 76 69 72 74 75 61 6c 20 74 61 62    ** virtual tab
14c40 6c 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  le in the FROM c
14c50 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 57 68  lause and the Wh
14c60 65 72 65 4c 65 76 65 6c 20 73 74 72 75 63 74 75  ereLevel structu
14c70 72 65 20 69 73 0a 20 20 2a 2a 20 61 20 63 6f 6e  re is.  ** a con
14c80 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 20 73 69  venient place si
14c90 6e 63 65 20 74 68 65 72 65 20 69 73 20 6f 6e 65  nce there is one
14ca0 20 57 68 65 72 65 4c 65 76 65 6c 20 66 6f 72 20   WhereLevel for 
14cb0 65 61 63 68 20 46 52 4f 4d 20 63 6c 61 75 73 65  each FROM clause
14cc0 0a 20 20 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 20  .  ** element.. 
14cd0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
14ce0 64 65 78 5f 69 6e 66 6f 20 2a 70 49 64 78 49 6e  dex_info *pIdxIn
14cf0 66 6f 3b 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e  fo;  /* Index in
14d00 66 6f 20 66 6f 72 20 6e 2d 74 68 20 73 6f 75 72  fo for n-th sour
14d10 63 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  ce table */.};..
14d20 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72  /*.** Flags appr
14d30 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20  opriate for the 
14d40 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d  wctrlFlags param
14d50 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57  eter of sqlite3W
14d60 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61  hereBegin().** a
14d70 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f  nd the WhereInfo
14d80 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62  .wctrlFlags memb
14d90 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  er..*/.#define W
14da0 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52  HERE_ORDERBY_NOR
14db0 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20  MAL   0x0000 /* 
14dc0 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65  No-op */.#define
14dd0 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
14de0 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f  IN      0x0001 /
14df0 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
14e00 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20  ssing for min() 
14e10 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
14e20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41  WHERE_ORDERBY_MA
14e30 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a  X      0x0002 /*
14e40 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
14e50 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66  sing for max() f
14e60 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
14e70 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53  HERE_ONEPASS_DES
14e80 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20  IRED  0x0004 /* 
14e90 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70  Want to do one-p
14ea0 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54  ass UPDATE/DELET
14eb0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  E */.#define WHE
14ec0 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b  RE_DUPLICATES_OK
14ed0 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b      0x0008 /* Ok
14ee0 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77   to return a row
14ef0 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20   more than once 
14f00 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
14f10 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45  _OMIT_OPEN_CLOSE
14f20 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c    0x0010 /* Tabl
14f30 65 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  e cursors are al
14f40 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64  ready open */.#d
14f50 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43  efine WHERE_FORC
14f60 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78 30  E_TABLE      0x0
14f70 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73  020 /* Do not us
14f80 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20  e an index-only 
14f90 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e  search */.#defin
14fa0 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45  e WHERE_ONETABLE
14fb0 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20  _ONLY    0x0040 
14fc0 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65  /* Only code the
14fd0 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54   1st table in pT
14fe0 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e  abList */.#defin
14ff0 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59  e WHERE_AND_ONLY
15000 20 20 20 20 20 20 20 20 20 30 78 30 30 38 30 20           0x0080 
15010 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20 69 6e 64  /* Don't use ind
15020 69 63 65 73 20 66 6f 72 20 4f 52 20 74 65 72 6d  ices for OR term
15030 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  s */../*.** The 
15040 57 48 45 52 45 20 63 6c 61 75 73 65 20 70 72 6f  WHERE clause pro
15050 63 65 73 73 69 6e 67 20 72 6f 75 74 69 6e 65 20  cessing routine 
15060 68 61 73 20 74 77 6f 20 68 61 6c 76 65 73 2e 20  has two halves. 
15070 20 54 68 65 0a 2a 2a 20 66 69 72 73 74 20 70 61   The.** first pa
15080 72 74 20 64 6f 65 73 20 74 68 65 20 73 74 61 72  rt does the star
15090 74 20 6f 66 20 74 68 65 20 57 48 45 52 45 20 6c  t of the WHERE l
150a0 6f 6f 70 20 61 6e 64 20 74 68 65 20 73 65 63 6f  oop and the seco
150b0 6e 64 0a 2a 2a 20 68 61 6c 66 20 64 6f 65 73 20  nd.** half does 
150c0 74 68 65 20 74 61 69 6c 20 6f 66 20 74 68 65 20  the tail of the 
150d0 57 48 45 52 45 20 6c 6f 6f 70 2e 20 20 41 6e 20  WHERE loop.  An 
150e0 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74  instance of.** t
150f0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
15100 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
15110 20 66 69 72 73 74 20 68 61 6c 66 20 61 6e 64 20   first half and 
15120 70 61 73 73 65 64 0a 2a 2a 20 69 6e 74 6f 20 74  passed.** into t
15130 68 65 20 73 65 63 6f 6e 64 20 68 61 6c 66 20 74  he second half t
15140 6f 20 67 69 76 65 20 73 6f 6d 65 20 63 6f 6e 74  o give some cont
15150 69 6e 75 69 74 79 2e 0a 2a 2f 0a 73 74 72 75 63  inuity..*/.struc
15160 74 20 57 68 65 72 65 49 6e 66 6f 20 7b 0a 20 20  t WhereInfo {.  
15170 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
15180 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
15190 73 69 6e 67 20 61 6e 64 20 63 6f 64 65 20 67 65  sing and code ge
151a0 6e 65 72 61 74 69 6e 67 20 63 6f 6e 74 65 78 74  nerating context
151b0 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
151c0 54 61 62 4c 69 73 74 3b 20 20 20 20 20 20 20 20  TabList;        
151d0 2f 2a 20 4c 69 73 74 20 6f 66 20 74 61 62 6c 65  /* List of table
151e0 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e 20 2a 2f  s in the join */
151f0 0a 20 20 75 31 36 20 6e 4f 42 53 61 74 3b 20 20  .  u16 nOBSat;  
15200 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15210 4e 75 6d 62 65 72 20 6f 66 20 4f 52 44 45 52 20  Number of ORDER 
15220 42 59 20 74 65 72 6d 73 20 73 61 74 69 73 66 69  BY terms satisfi
15230 65 64 20 62 79 20 69 6e 64 69 63 65 73 20 2a 2f  ed by indices */
15240 0a 20 20 75 31 36 20 77 63 74 72 6c 46 6c 61 67  .  u16 wctrlFlag
15250 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
15260 46 6c 61 67 73 20 6f 72 69 67 69 6e 61 6c 6c 79  Flags originally
15270 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74   passed to sqlit
15280 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 20 2a  e3WhereBegin() *
15290 2f 0a 20 20 75 38 20 6f 6b 4f 6e 65 50 61 73 73  /.  u8 okOnePass
152a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
152b0 20 4f 6b 20 74 6f 20 75 73 65 20 6f 6e 65 2d 70   Ok to use one-p
152c0 61 73 73 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f  ass algorithm fo
152d0 72 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20  r UPDATE/DELETE 
152e0 2a 2f 0a 20 20 75 38 20 75 6e 74 65 73 74 65 64  */.  u8 untested
152f0 54 65 72 6d 73 3b 20 20 20 20 20 20 20 20 20 2f  Terms;         /
15300 2a 20 4e 6f 74 20 61 6c 6c 20 57 48 45 52 45 20  * Not all WHERE 
15310 74 65 72 6d 73 20 72 65 73 6f 6c 76 65 64 20 62  terms resolved b
15320 79 20 6f 75 74 65 72 20 6c 6f 6f 70 20 2a 2f 0a  y outer loop */.
15330 20 20 75 38 20 65 44 69 73 74 69 6e 63 74 3b 20    u8 eDistinct; 
15340 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
15350 6e 65 20 6f 66 20 74 68 65 20 57 48 45 52 45 5f  ne of the WHERE_
15360 44 49 53 54 49 4e 43 54 5f 2a 20 76 61 6c 75 65  DISTINCT_* value
15370 73 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 6e 74  s below */.  int
15380 20 69 54 6f 70 3b 20 20 20 20 20 20 20 20 20 20   iTop;          
15390 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 65         /* The ve
153a0 72 79 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  ry beginning of 
153b0 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 20 2a  the WHERE loop *
153c0 2f 0a 20 20 69 6e 74 20 69 43 6f 6e 74 69 6e 75  /.  int iContinu
153d0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
153e0 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 63 6f   Jump here to co
153f0 6e 74 69 6e 75 65 20 77 69 74 68 20 6e 65 78 74  ntinue with next
15400 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
15410 20 69 42 72 65 61 6b 3b 20 20 20 20 20 20 20 20   iBreak;        
15420 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68         /* Jump h
15430 65 72 65 20 74 6f 20 62 72 65 61 6b 20 6f 75 74  ere to break out
15440 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a   of the loop */.
15450 20 20 69 6e 74 20 6e 4c 65 76 65 6c 3b 20 20 20    int nLevel;   
15460 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15470 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
15480 6c 6f 6f 70 20 2a 2f 0a 20 20 73 74 72 75 63 74  loop */.  struct
15490 20 57 68 65 72 65 43 6c 61 75 73 65 20 2a 70 57   WhereClause *pW
154a0 43 3b 20 20 2f 2a 20 44 65 63 6f 6d 70 6f 73 69  C;  /* Decomposi
154b0 74 69 6f 6e 20 6f 66 20 74 68 65 20 57 48 45 52  tion of the WHER
154c0 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 64 6f  E clause */.  do
154d0 75 62 6c 65 20 73 61 76 65 64 4e 51 75 65 72 79  uble savedNQuery
154e0 4c 6f 6f 70 3b 20 20 20 2f 2a 20 70 50 61 72 73  Loop;   /* pPars
154f0 65 2d 3e 6e 51 75 65 72 79 4c 6f 6f 70 20 6f 75  e->nQueryLoop ou
15500 74 73 69 64 65 20 74 68 65 20 57 48 45 52 45 20  tside the WHERE 
15510 6c 6f 6f 70 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  loop */.  double
15520 20 6e 52 6f 77 4f 75 74 3b 20 20 20 20 20 20 20   nRowOut;       
15530 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
15540 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74 70 75   number of outpu
15550 74 20 72 6f 77 73 20 2a 2f 0a 20 20 57 68 65 72  t rows */.  Wher
15560 65 4c 65 76 65 6c 20 61 5b 31 5d 3b 20 20 20 20  eLevel a[1];    
15570 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
15580 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
15590 6e 65 73 74 20 6c 6f 6f 70 20 69 6e 20 57 48 45  nest loop in WHE
155a0 52 45 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  RE */.};../* All
155b0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
155c0 57 68 65 72 65 49 6e 66 6f 2e 65 44 69 73 74 69  WhereInfo.eDisti
155d0 6e 63 74 20 61 6e 64 20 44 69 73 74 69 6e 63 74  nct and Distinct
155e0 43 74 78 2e 65 54 6e 63 74 54 79 70 65 20 2a 2f  Ctx.eTnctType */
155f0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
15600 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20  ISTINCT_NOOP    
15610 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54    0  /* DISTINCT
15620 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65   keyword not use
15630 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  d */.#define WHE
15640 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51  RE_DISTINCT_UNIQ
15650 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64  UE    1  /* No d
15660 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65  uplicates */.#de
15670 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
15680 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20  NCT_ORDERED   2 
15690 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74   /* All duplicat
156a0 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20  es are adjacent 
156b0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
156c0 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45  _DISTINCT_UNORDE
156d0 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63  RED 3  /* Duplic
156e0 61 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72  ates are scatter
156f0 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e  ed */../*.** A N
15700 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e  ameContext defin
15710 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20  es a context in 
15720 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65  which to resolve
15730 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d   table and colum
15740 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65  n.** names.  The
15750 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74   context consist
15760 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74  s of a list of t
15770 61 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c  ables (the pSrcL
15780 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a  ist) field and.*
15790 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  * a list of name
157a0 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45  d expression (pE
157b0 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65  List).  The name
157c0 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  d expression lis
157d0 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c  t may.** be NULL
157e0 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72  .  The pSrc corr
157f0 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46  esponds to the F
15800 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
15810 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20  SELECT or.** to 
15820 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
15830 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49  operated on by I
15840 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f  NSERT, UPDATE, o
15850 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a  r DELETE.  The.*
15860 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70  * pEList corresp
15870 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75  onds to the resu
15880 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45  lt set of a SELE
15890 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66  CT and is NULL f
158a0 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74  or.** other stat
158b0 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61  ements..**.** Na
158c0 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62  meContexts can b
158d0 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20  e nested.  When 
158e0 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c  resolving names,
158f0 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20   the inner-most 
15900 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73  .** context is s
15910 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20  earched first.  
15920 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66  If no match is f
15930 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f  ound, the next o
15940 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  uter.** context 
15950 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20  is checked.  If 
15960 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e  there is still n
15970 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78  o match, the nex
15980 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20  t context.** is 
15990 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70  checked.  This p
159a0 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73  rocess continues
159b0 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20   until either a 
159c0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a  match is found.*
159d0 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74  * or all context
159e0 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68  s are check.  Wh
159f0 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  en a match is fo
15a00 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65  und, the nRef me
15a10 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63  mber of.** the c
15a20 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e  ontext containin
15a30 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69  g the match is i
15a40 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a  ncremented. .**.
15a50 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79  ** Each subquery
15a60 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65   gets a new Name
15a70 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e  Context.  The pN
15a80 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73  ext field points
15a90 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43   to the.** NameC
15aa0 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61  ontext in the pa
15ab0 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75  rent query.  Thu
15ac0 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66  s the process of
15ad0 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a   scanning the.**
15ae0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73   NameContext lis
15af0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
15b00 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75   searching throu
15b10 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20  gh successively 
15b20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72  outer.** subquer
15b30 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ies looking for 
15b40 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75  a match..*/.stru
15b50 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b  ct NameContext {
15b60 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
15b70 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  ;       /* The p
15b80 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69  arser */.  SrcLi
15b90 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
15ba0 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74  /* One or more t
15bb0 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65  ables used to re
15bc0 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20  solve names */. 
15bd0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
15be0 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61  t;    /* Optiona
15bf0 6c 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  l list of named 
15c00 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
15c10 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
15c20 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  fo;   /* Informa
15c30 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65  tion about aggre
15c40 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65  gates at this le
15c50 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e  vel */.  NameCon
15c60 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  text *pNext;  /*
15c70 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65   Next outer name
15c80 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20   context.  NULL 
15c90 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f  for outermost */
15ca0 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
15cb0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15cc0 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c  r of names resol
15cd0 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74  ved by this cont
15ce0 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ext */.  int nEr
15cf0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
15d00 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
15d10 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68  s encountered wh
15d20 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61  ile resolving na
15d30 6d 65 73 20 2a 2f 0a 20 20 75 38 20 6e 63 46 6c  mes */.  u8 ncFl
15d40 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
15d50 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43   Zero or more NC
15d60 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64  _* flags defined
15d70 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
15d80 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
15d90 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43  es for the NameC
15da0 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20  ontext, ncFlags 
15db0 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
15dc0 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30  e NC_AllowAgg  0
15dd0 78 30 31 20 20 20 20 2f 2a 20 41 67 67 72 65 67  x01    /* Aggreg
15de0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ate functions ar
15df0 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
15e00 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73  /.#define NC_Has
15e10 41 67 67 20 20 20 20 30 78 30 32 20 20 20 20 2f  Agg    0x02    /
15e20 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  * One or more ag
15e30 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
15e40 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s seen */.#defin
15e50 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30  e NC_IsCheck   0
15e60 78 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 69  x04    /* True i
15e70 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  f resolving name
15e80 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e  s in a CHECK con
15e90 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
15ea0 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20  ne NC_InAggFunc 
15eb0 30 78 30 38 20 20 20 20 2f 2a 20 54 72 75 65 20  0x08    /* True 
15ec0 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67  if analyzing arg
15ed0 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  uments to an agg
15ee0 20 66 75 6e 63 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   func */../*.** 
15ef0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
15f00 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
15f10 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
15f20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  all information.
15f30 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  ** needed to gen
15f40 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61  erate code for a
15f50 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73   single SELECT s
15f60 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  tatement..**.** 
15f70 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f  nLimit is set to
15f80 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20   -1 if there is 
15f90 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e  no LIMIT clause.
15fa0 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74    nOffset is set
15fb0 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65   to 0..** If the
15fc0 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c  re is a LIMIT cl
15fd0 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72  ause, the parser
15fe0 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20   sets nLimit to 
15ff0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
16000 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f  .** limit and nO
16010 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  ffset to the val
16020 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74  ue of the offset
16030 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20   (or 0 if there 
16040 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74  is not.** offset
16050 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e  ).  But later on
16060 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  , nLimit and nOf
16070 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20  fset become the 
16080 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73  memory locations
16090 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20  .** in the VDBE 
160a0 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20  that record the 
160b0 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74  limit and offset
160c0 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a   counters..**.**
160d0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20   addrOpenEphm[] 
160e0 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20  entries contain 
160f0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f  the address of O
16100 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
16110 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73  opcodes..** Thes
16120 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74  e addresses must
16130 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68   be stored so th
16140 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63  at we can go bac
16150 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a  k and fill in.**
16160 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20   the P4_KEYINFO 
16170 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72  and P2 parameter
16180 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65  s later.  Neithe
16190 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f  r the KeyInfo no
161a0 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  r.** the number 
161b0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32  of columns in P2
161c0 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64   can be computed
161d0 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
161e0 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f  e.** as the OP_O
161f0 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74  penEphm instruct
16200 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63  ion is coded bec
16210 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75  ause not.** enou
16220 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  gh information a
16230 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e  bout the compoun
16240 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e  d query is known
16250 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a   at that point..
16260 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  ** The KeyInfo f
16270 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b  or addrOpenTran[
16280 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61  0] and [1] conta
16290 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ins collating se
162a0 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74  quences.** for t
162b0 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20  he result set.  
162c0 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
162d0 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20  addrOpenEphm[2] 
162e0 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
162f0 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20  ng.** sequences 
16300 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  for the ORDER BY
16310 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
16320 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78  ct Select {.  Ex
16330 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
16340 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c       /* The fiel
16350 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ds of the result
16360 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
16370 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16380 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e  One of: TK_UNION
16390 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52   TK_ALL TK_INTER
163a0 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a  SECT TK_EXCEPT *
163b0 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61 67 73  /.  u16 selFlags
163c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61  ;          /* Va
163d0 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65  rious SF_* value
163e0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69  s */.  int iLimi
163f0 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a  t, iOffset;   /*
16400 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
16410 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20  s holding LIMIT 
16420 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72  & OFFSET counter
16430 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f  s */.  int addrO
16440 70 65 6e 45 70 68 6d 5b 33 5d 3b 20 20 20 2f 2a  penEphm[3];   /*
16450 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70   OP_OpenEphem op
16460 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f  codes related to
16470 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a   this select */.
16480 20 20 64 6f 75 62 6c 65 20 6e 53 65 6c 65 63 74    double nSelect
16490 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
164a0 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  mated number of 
164b0 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20  result rows */. 
164c0 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20   SrcList *pSrc; 
164d0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46          /* The F
164e0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
164f0 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
16500 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
16510 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ERE clause */.  
16520 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
16530 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52  By;    /* The GR
16540 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  OUP BY clause */
16550 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67  .  Expr *pHaving
16560 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
16570 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a   HAVING clause *
16580 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
16590 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68  rderBy;    /* Th
165a0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
165b0 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  e */.  Select *p
165c0 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a  Prior;        /*
165d0 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e   Prior select in
165e0 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65   a compound sele
165f0 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ct statement */.
16600 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b    Select *pNext;
16610 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
16620 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c   select to the l
16630 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  eft in a compoun
16640 64 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  d */.  Select *p
16650 52 69 67 68 74 6d 6f 73 74 3b 20 20 20 20 2f 2a  Rightmost;    /*
16660 20 52 69 67 68 74 2d 6d 6f 73 74 20 73 65 6c 65   Right-most sele
16670 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
16680 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
16690 74 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69  t */.  Expr *pLi
166a0 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  mit;          /*
166b0 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
166c0 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
166d0 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70  t used. */.  Exp
166e0 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20  r *pOffset;     
166f0 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78      /* OFFSET ex
16700 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
16710 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
16720 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
16730 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
16740 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
16750 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
16760 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
16770 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f  Select Flag"..*/
16780 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
16790 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30  inct        0x00
167a0 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
167b0 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
167c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
167d0 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30  esolved        0
167e0 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69  x0002  /* Identi
167f0 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  fiers have been 
16800 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66  resolved */.#def
16810 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65  ine SF_Aggregate
16820 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
16830 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
16840 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
16850 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
16860 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30  sEphemeral   0x0
16870 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65  008  /* Uses the
16880 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
16890 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
168a0 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
168b0 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73      0x0010  /* s
168c0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
168d0 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
168e0 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
168f0 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
16900 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f    0x0020  /* FRO
16910 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
16920 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
16930 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55   */.#define SF_U
16940 73 65 53 6f 72 74 65 72 20 20 20 20 20 20 20 30  seSorter       0
16950 78 30 30 34 30 20 20 2f 2a 20 53 6f 72 74 20 75  x0040  /* Sort u
16960 73 69 6e 67 20 61 20 73 6f 72 74 65 72 20 2a 2f  sing a sorter */
16970 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75  .#define SF_Valu
16980 65 73 20 20 20 20 20 20 20 20 20 20 30 78 30 30  es          0x00
16990 38 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a  80  /* Synthesiz
169a0 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63  ed from VALUES c
169b0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
169c0 20 53 46 5f 4d 61 74 65 72 69 61 6c 69 7a 65 20   SF_Materialize 
169d0 20 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20 46      0x0100  /* F
169e0 6f 72 63 65 20 6d 61 74 65 72 69 61 6c 69 7a 61  orce materializa
169f0 74 69 6f 6e 20 6f 66 20 76 69 65 77 73 20 2a 2f  tion of views */
16a00 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74  .#define SF_Nest
16a10 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30 32  edFrom      0x02
16a20 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  00  /* Part of a
16a30 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46   parenthesized F
16a40 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 0a 0a  ROM clause */...
16a50 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  /*.** The result
16a60 73 20 6f 66 20 61 20 73 65 6c 65 63 74 20 63 61  s of a select ca
16a70 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64  n be distributed
16a80 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
16a90 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52 54 22 20  .  The.** "SRT" 
16aa0 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45  prefix means "SE
16ab0 4c 45 43 54 20 52 65 73 75 6c 74 20 54 79 70 65  LECT Result Type
16ac0 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  "..*/.#define SR
16ad0 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31  T_Union        1
16ae0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
16af0 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  t as keys in an 
16b00 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
16b10 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
16b20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72    2  /* Remove r
16b30 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49  esult from a UNI
16b40 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ON index */.#def
16b50 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20  ine SRT_Exists  
16b60 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65       3  /* Store
16b70 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74   1 if the result
16b80 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f   is not empty */
16b90 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
16ba0 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20  card      4  /* 
16bb0 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20  Do not save the 
16bc0 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65  results anywhere
16bd0 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45   */../* The ORDE
16be0 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69  R BY clause is i
16bf0 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f  gnored for all o
16c00 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23  f the above */.#
16c10 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65  define Ignorable
16c20 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e  Orderby(X) ((X->
16c30 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 63  eDest)<=SRT_Disc
16c40 61 72 64 29 0a 0a 23 64 65 66 69 6e 65 20 53 52  ard)..#define SR
16c50 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 35  T_Output       5
16c60 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68    /* Output each
16c70 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
16c80 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65  /.#define SRT_Me
16c90 6d 20 20 20 20 20 20 20 20 20 20 36 20 20 2f 2a  m          6  /*
16ca0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
16cb0 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a   a memory cell *
16cc0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65  /.#define SRT_Se
16cd0 74 20 20 20 20 20 20 20 20 20 20 37 20 20 2f 2a  t          7  /*
16ce0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
16cf0 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
16d00 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
16d10 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 20 38  T_Table        8
16d20 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
16d30 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
16d40 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
16d50 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  d */.#define SRT
16d60 5f 45 70 68 65 6d 54 61 62 20 20 20 20 20 39 20  _EphemTab     9 
16d70 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73   /* Create trans
16d80 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f  ient tab and sto
16d90 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  re like SRT_Tabl
16da0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
16db0 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 30 20  _Coroutine   10 
16dc0 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73   /* Generate a s
16dd0 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
16de0 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ult */../*.** An
16df0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
16e00 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62  s object describ
16e10 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20  es where to put 
16e20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  of the results o
16e30 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74  f.** a SELECT st
16e40 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
16e50 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a  ct SelectDest {.
16e60 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20    u8 eDest;     
16e70 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69      /* How to di
16e80 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73  spose of the res
16e90 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54  ults.  On of SRT
16ea0 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63  _* above. */.  c
16eb0 68 61 72 20 61 66 66 53 64 73 74 3b 20 20 20 20  har affSdst;    
16ec0 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65   /* Affinity use
16ed0 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52  d when eDest==SR
16ee0 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69  T_Set */.  int i
16ef0 53 44 50 61 72 6d 3b 20 20 20 20 20 20 2f 2a 20  SDParm;      /* 
16f00 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64  A parameter used
16f10 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69   by the eDest di
16f20 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f  sposal method */
16f30 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20  .  int iSdst;   
16f40 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
16f50 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
16f60 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
16f70 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
16f80 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16f90 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
16fa0 6c 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  located */.};../
16fb0 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65  *.** During code
16fc0 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73   generation of s
16fd0 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64  tatements that d
16fe0 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41  o inserts into A
16ff0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a  UTOINCREMENT .**
17000 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c   tables, the fol
17010 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
17020 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74  on is attached t
17030 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75  o the Table.u.au
17040 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74  toInc.p.** point
17050 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69  er of each autoi
17060 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74  ncrement table t
17070 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69  o record some si
17080 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  de information t
17090 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20  hat.** the code 
170a0 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e  generator needs.
170b0 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65    We have to kee
170c0 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f  p per-table auto
170d0 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66  increment.** inf
170e0 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65  ormation in case
170f0 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77   inserts are dow
17100 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  n within trigger
17110 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20  s.  Triggers do 
17120 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20  not.** normally 
17130 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72  coordinate their
17140 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74   activities, but
17150 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63   we do need to c
17160 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a  oordinate the.**
17170 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76   loading and sav
17180 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65  ing of autoincre
17190 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ment information
171a0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f  ..*/.struct Auto
171b0 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f  incInfo {.  Auto
171c0 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20  incInfo *pNext; 
171d0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62    /* Next info b
171e0 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f  lock in a list o
171f0 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20  f them all */.  
17200 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
17210 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
17220 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72  his info block r
17230 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e  efers to */.  in
17240 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
17250 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
17260 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
17270 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
17280 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20  g pTab */.  int 
17290 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20  regCtr;         
172a0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
172b0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65  ster holding the
172c0 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a   rowid counter *
172d0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  /.};../*.** Size
172e0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   of the column c
172f0 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ache.*/.#ifndef 
17300 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
17310 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
17320 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a  E_N_COLCACHE 10.
17330 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74  #endif../*.** At
17340 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61   least one insta
17350 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
17360 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
17370 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
17380 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74  ch .** trigger t
17390 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64  hat may be fired
173a0 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   while parsing a
173b0 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  n INSERT, UPDATE
173c0 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74   or DELETE.** st
173d0 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63  atement. All suc
173e0 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74  h objects are st
173f0 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b  ored in the link
17400 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61  ed list headed a
17410 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67  t.** Parse.pTrig
17420 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74  gerPrg and delet
17430 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e  ed once statemen
17440 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61  t compilation ha
17450 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65  s been.** comple
17460 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62  ted..**.** A Vdb
17470 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
17480 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
17490 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20  e body and WHEN 
174a0 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65  clause of trigge
174b0 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  r.** TriggerPrg.
174c0 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69  pTrigger, assumi
174d0 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20  ng a default ON 
174e0 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
174f0 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  of.** TriggerPrg
17500 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72  .orconf, is stor
17510 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65  ed in the Trigge
17520 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61  rPrg.pProgram va
17530 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50  riable..** The P
17540 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
17550 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74   list never cont
17560 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73  ains two entries
17570 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a   with the same.*
17580 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74  * values for bot
17590 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f  h pTrigger and o
175a0 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rconf..**.** The
175b0 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
175c0 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65  mask[0] variable
175d0 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73   is set to a mas
175e0 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
175f0 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28  ns.** accessed (
17600 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20  or set to 0 for 
17610 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61  triggers fired a
17620 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  s a result of IN
17630 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65  SERT .** stateme
17640 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c  nts). Similarly,
17650 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
17660 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69  aColmask[1] vari
17670 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a  able is set to.*
17680 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e  * a mask of new.
17690 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62  * columns used b
176a0 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  y the program..*
176b0 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
176c0 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20  Prg {.  Trigger 
176d0 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20  *pTrigger;      
176e0 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20  /* Trigger this 
176f0 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65  program was code
17700 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67  d from */.  Trig
17710 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20  gerPrg *pNext;  
17720 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
17730 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67  y in Parse.pTrig
17740 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20  gerPrg list */. 
17750 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
17760 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67  ogram;   /* Prog
17770 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ram implementing
17780 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66   pTrigger/orconf
17790 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66   */.  int orconf
177a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
177b0 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
177c0 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20  LICT policy */. 
177d0 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d   u32 aColmask[2]
177e0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
177f0 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e  s of old.*, new.
17800 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73  * columns access
17810 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ed */.};../*.** 
17820 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61  The yDbMask data
17830 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74  type for the bit
17840 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61  mask of all atta
17850 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
17860 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
17870 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
17880 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 33 5f  typedef sqlite3_
17890 75 69 6e 74 36 34 20 79 44 62 4d 61 73 6b 3b 0a  uint64 yDbMask;.
178a0 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
178b0 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62  unsigned int yDb
178c0 4d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  Mask;.#endif../*
178d0 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65  .** An SQL parse
178e0 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f  r context.  A co
178f0 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  py of this struc
17900 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74  ture is passed t
17910 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61  hrough.** the pa
17920 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e  rser and down in
17930 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65  to all the parse
17940 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65  r action routine
17950 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
17960 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66  carry around inf
17970 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73  ormation that is
17980 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65   global to the e
17990 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a  ntire parse..**.
179a0 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65  ** The structure
179b0 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f   is divided into
179c0 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65   two parts.  Whe
179d0 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  n the parser and
179e0 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74   code.** generat
179f0 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65  e call themselve
17a00 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74  s recursively, t
17a10 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66  he first part of
17a20 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a   the structure.*
17a30 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75  * is constant bu
17a40 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  t the second par
17a50 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68  t is reset at th
17a60 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20  e beginning and 
17a70 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72  end of.** each r
17a80 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ecursion..**.** 
17a90 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61  The nTableLock a
17aa0 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61  nd aTableLock va
17ab0 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
17ac0 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61   used if the sha
17ad0 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65  red-cache .** fe
17ae0 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
17af0 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28   (if sqlite3Tsd(
17b00 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  )->useSharedData
17b10 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20   is true). They 
17b20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  are.** used to s
17b30 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20  tore the set of 
17b40 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75  table-locks requ
17b50 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74  ired by the stat
17b60 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63  ement being.** c
17b70 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f  ompiled. Functio
17b80 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  n sqlite3TableLo
17b90 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  ck() is used to 
17ba0 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74  add entries to t
17bb0 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73  he.** list..*/.s
17bc0 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20  truct Parse {.  
17bd0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
17be0 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
17bf0 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74   database struct
17c00 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ure */.  char *z
17c10 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a  ErrMsg;       /*
17c20 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
17c30 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64  e */.  Vdbe *pVd
17c40 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  be;         /* A
17c50 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65  n engine for exe
17c60 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  cuting database 
17c70 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  bytecode */.  in
17c80 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
17c90 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64     /* Return cod
17ca0 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e  e from execution
17cb0 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65   */.  u8 colName
17cc0 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52  sSet;      /* TR
17cd0 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75  UE after OP_Colu
17ce0 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20  mnName has been 
17cf0 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20  issued to pVdbe 
17d00 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68  */.  u8 checkSch
17d10 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75  ema;      /* Cau
17d20 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  ses schema cooki
17d30 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e  e check after an
17d40 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e   error */.  u8 n
17d50 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20  ested;          
17d60 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
17d70 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  sted calls to th
17d80 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65  e parser/code ge
17d90 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20  nerator */.  u8 
17da0 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20  nTempReg;       
17db0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
17dc0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
17dd0 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d  rs in aTempReg[]
17de0 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 49 6e   */.  u8 nTempIn
17df0 55 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  Use;       /* Nu
17e00 6d 62 65 72 20 6f 66 20 61 54 65 6d 70 52 65 67  mber of aTempReg
17e10 5b 5d 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65  [] currently che
17e20 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 75 38  cked out */.  u8
17e30 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20   nColCache;     
17e40 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17e50 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 43  entries in aColC
17e60 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 75 38 20 69  ache[] */.  u8 i
17e70 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20  ColCache;       
17e80 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69   /* Next entry i
17e90 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 74 6f  n aColCache[] to
17ea0 20 72 65 70 6c 61 63 65 20 2a 2f 0a 20 20 75 38   replace */.  u8
17eb0 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20   isMultiWrite;  
17ec0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
17ed0 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69  atement may modi
17ee0 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70  fy/insert multip
17ef0 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20  le rows */.  u8 
17f00 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20  mayAbort;       
17f10 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
17f20 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77  tement may throw
17f30 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
17f40 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65  ion */.  int aTe
17f50 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a  mpReg[8];     /*
17f60 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f   Holding area fo
17f70 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  r temporary regi
17f80 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  sters */.  int n
17f90 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
17fa0 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74  /* Size of the t
17fb0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
17fc0 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
17fd0 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   iRangeReg;     
17fe0 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
17ff0 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  ter in temporary
18000 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
18010 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
18020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
18030 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65  ber of errors se
18040 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62  en */.  int nTab
18050 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18060 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f  Number of previo
18070 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56  usly allocated V
18080 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  DBE cursors */. 
18090 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
180a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
180b0 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
180c0 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
180d0 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20   int nSet;      
180e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
180f0 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f 20  of sets used so 
18100 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e  far */.  int nOn
18110 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ce;           /*
18120 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e   Number of OP_On
18130 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  ce instructions 
18140 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
18150 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  ckBase;         
18160 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
18170 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67  r of data during
18180 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
18190 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  ts */.  int iCac
181a0 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  heLevel;     /* 
181b0 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77  ColCache valid w
181c0 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  hen aColCache[].
181d0 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65  iLevel<=iCacheLe
181e0 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  vel */.  int iCa
181f0 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a  cheCnt;       /*
18200 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f   Counter used to
18210 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61   generate aColCa
18220 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73  che[].lru values
18230 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f   */.  struct yCo
18240 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74  lCache {.    int
18250 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
18260 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73     /* Table curs
18270 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
18280 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   int iColumn;   
18290 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
182a0 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f  column number */
182b0 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b  .    u8 tempReg;
182c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52             /* iR
182d0 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65 67  eg is a temp reg
182e0 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64 73  ister that needs
182f0 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a   to be freed */.
18300 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20      int iLevel; 
18310 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73            /* Nes
18320 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  ting level */.  
18330 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20    int iReg;     
18340 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77          /* Reg w
18350 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ith value of thi
18360 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e  s column. 0 mean
18370 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69  s none. */.    i
18380 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20  nt lru;         
18390 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65       /* Least re
183a0 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72  cently used entr
183b0 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65  y has the smalle
183c0 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  st value */.  } 
183d0 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45  aColCache[SQLITE
183e0 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f  _N_COLCACHE];  /
183f0 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63  * One for each c
18400 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72  olumn cache entr
18410 79 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77  y */.  yDbMask w
18420 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53  riteMask;   /* S
18430 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61  tart a write tra
18440 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73  nsaction on thes
18450 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  e databases */. 
18460 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d   yDbMask cookieM
18470 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b  ask;  /* Bitmask
18480 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66   of schema verif
18490 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ied databases */
184a0 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 47 6f 74  .  int cookieGot
184b0 6f 3b 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65  o;      /* Addre
184c0 73 73 20 6f 66 20 4f 50 5f 47 6f 74 6f 20 74 6f  ss of OP_Goto to
184d0 20 63 6f 6f 6b 69 65 20 76 65 72 69 66 69 65 72   cookie verifier
184e0 20 73 75 62 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   subroutine */. 
184f0 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65   int cookieValue
18500 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  [SQLITE_MAX_ATTA
18510 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c  CHED+2];  /* Val
18520 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74  ues of cookies t
18530 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e  o verify */.  in
18540 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20  t regRowid;     
18550 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
18560 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20  olding rowid of 
18570 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74  CREATE TABLE ent
18580 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  ry */.  int regR
18590 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  oot;         /* 
185a0 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
185b0 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
185c0 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74  r for new object
185d0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41  s */.  int nMaxA
185e0 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  rg;         /* M
185f0 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74  ax args passed t
18600 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  o user function 
18610 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  by sub-program *
18620 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72  /.  Token constr
18630 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65  aintName;/* Name
18640 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69   of the constrai
18650 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  nt currently bei
18660 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66  ng parsed */.#if
18670 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
18680 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
18690 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20  int nTableLock; 
186a0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
186b0 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61   of locks in aTa
186c0 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62  bleLock */.  Tab
186d0 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f  leLock *aTableLo
186e0 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20  ck; /* Required 
186f0 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20  table locks for 
18700 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
18710 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75  e */.#endif.  Au
18720 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63  toincInfo *pAinc
18730 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  ;  /* Informatio
18740 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52  n about AUTOINCR
18750 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a  EMENT counters *
18760 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  /..  /* Informat
18770 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63  ion used while c
18780 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72  oding trigger pr
18790 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72  ograms. */.  Par
187a0 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20  se *pToplevel;  
187b0 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63    /* Parse struc
187c0 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72  ture for main pr
187d0 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20  ogram (or NULL) 
187e0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69  */.  Table *pTri
187f0 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62  ggerTab;  /* Tab
18800 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20  le triggers are 
18810 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20  being coded for 
18820 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 51 75 65  */.  double nQue
18830 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20 45 73 74  ryLoop;   /* Est
18840 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
18850 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61   iterations of a
18860 20 71 75 65 72 79 20 2a 2f 0a 20 20 75 33 32 20   query */.  u32 
18870 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  oldmask;        
18880 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e   /* Mask of old.
18890 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
188a0 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65  nced */.  u32 ne
188b0 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  wmask;         /
188c0 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  * Mask of new.* 
188d0 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
188e0 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67  ed */.  u8 eTrig
188f0 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20  gerOp;       /* 
18900 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
18910 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54  SERT or TK_DELET
18920 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e  E */.  u8 eOrcon
18930 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  f;          /* D
18940 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
18950 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72  CT policy for tr
18960 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20  igger steps */. 
18970 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67   u8 disableTrigg
18980 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f  ers;  /* True to
18990 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72   disable trigger
189a0 73 20 2a 2f 0a 0a 20 20 2f 2a 20 41 62 6f 76 65  s */..  /* Above
189b0 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74   is constant bet
189c0 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e  ween recursions.
189d0 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74    Below is reset
189e0 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65   before and afte
189f0 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75  r.  ** each recu
18a00 72 73 69 6f 6e 20 2a 2f 0a 0a 20 20 69 6e 74 20  rsion */..  int 
18a10 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  nVar;           
18a20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
18a30 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73  of '?' variables
18a40 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c   seen in the SQL
18a50 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
18a60 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20   nzVar;         
18a70 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
18a80 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c   of available sl
18a90 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a  ots in azVar[] *
18aa0 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20  /.  u8 explain; 
18ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18ac0 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50   True if the EXP
18ad0 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75  LAIN flag is fou
18ae0 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20  nd on the query 
18af0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
18b00 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
18b10 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65  BLE.  u8 declare
18b20 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  Vtab;           
18b30 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64  /* True if insid
18b40 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  e sqlite3_declar
18b50 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e  e_vtab() */.  in
18b60 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  t nVtabLock;    
18b70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18b80 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62  r of virtual tab
18b90 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23  les to lock */.#
18ba0 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69  endif.  int nAli
18bb0 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  as;             
18bc0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
18bd0 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20 73 65  liased result se
18be0 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69  t columns */.  i
18bf0 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
18c00 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
18c10 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67  ession tree heig
18c20 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75  ht of current su
18c30 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e  b-select */.#ifn
18c40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
18c50 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53  EXPLAIN.  int iS
18c60 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20  electId;        
18c70 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72      /* ID of cur
18c80 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20  rent select for 
18c90 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a  EXPLAIN output *
18ca0 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c  /.  int iNextSel
18cb0 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a  ectId;        /*
18cc0 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20   Next available 
18cd0 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58  select ID for EX
18ce0 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
18cf0 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 2a  #endif.  char **
18d00 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20  azVar;          
18d10 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74     /* Pointers t
18d20 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72 61 6d  o names of param
18d30 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20  eters */.  Vdbe 
18d40 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20 20  *pReprepare;    
18d50 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67       /* VM being
18d60 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c   reprepared (sql
18d70 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29  ite3Reprepare())
18d80 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 41 6c 69 61   */.  int *aAlia
18d90 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
18da0 2f 2a 20 52 65 67 69 73 74 65 72 20 75 73 65 64  /* Register used
18db0 20 74 6f 20 68 6f 6c 64 20 61 6c 69 61 73 65 64   to hold aliased
18dc0 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 63 6f 6e   result */.  con
18dd0 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20  st char *zTail; 
18de0 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51         /* All SQ
18df0 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20  L text past the 
18e00 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70  last semicolon p
18e10 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65  arsed */.  Table
18e20 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20   *pNewTable;    
18e30 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20       /* A table 
18e40 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65  being constructe
18e50 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c  d by CREATE TABL
18e60 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  E */.  Trigger *
18e70 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20  pNewTrigger;    
18e80 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65   /* Trigger unde
18e90 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61  r construct by a
18ea0 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
18eb0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
18ec0 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f  *zAuthContext; /
18ed0 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65  * The 6th parame
18ee0 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68  ter to db->xAuth
18ef0 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20   callbacks */.  
18f00 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e  Token sNameToken
18f10 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b  ;         /* Tok
18f20 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66  en with unqualif
18f30 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  ied schema objec
18f40 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65  t name */.  Toke
18f50 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20  n sLastToken;   
18f60 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73        /* The las
18f70 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a  t token parsed *
18f80 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
18f90 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
18fa0 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b  LE.  Token sArg;
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18fc0 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  * Complete text 
18fd0 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75  of a module argu
18fe0 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ment */.  Table 
18ff0 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20  **apVtabLock;   
19000 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
19010 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  o virtual tables
19020 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67   needing locking
19030 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62   */.#endif.  Tab
19040 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20  le *pZombieTab; 
19050 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
19060 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20  f Table objects 
19070 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20  to delete after 
19080 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72  code gen */.  Tr
19090 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67  iggerPrg *pTrigg
190a0 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65  erPrg;  /* Linke
190b0 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20  d list of coded 
190c0 74 72 69 67 67 65 72 73 20 2a 2f 0a 7d 3b 0a 0a  triggers */.};..
190d0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
190e0 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  e if currently i
190f0 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33  nside an sqlite3
19100 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
19110 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  call..*/.#ifdef 
19120 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
19130 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69  UALTABLE.  #defi
19140 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
19150 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65  AB 0.#else.  #de
19160 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
19170 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65  VTAB (pParse->de
19180 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69  clareVtab).#endi
19190 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
191a0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
191b0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
191c0 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20  can be declared 
191d0 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75  on a stack and u
191e0 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74  sed.** to save t
191f0 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  he Parse.zAuthCo
19200 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74  ntext value so t
19210 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
19220 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f  stored later..*/
19230 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74  .struct AuthCont
19240 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ext {.  const ch
19250 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
19260 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64  ;   /* Put saved
19270 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
19280 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61  ext here */.  Pa
19290 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
192a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
192b0 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
192c0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69   */.};../*.** Bi
192d0 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72  tfield flags for
192e0 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72   P5 value in var
192f0 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f  ious opcodes..*/
19300 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
19310 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78  NCHANGE       0x
19320 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  01    /* Set to 
19330 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e  update db->nChan
19340 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ge */.#define OP
19350 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
19360 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65     0x02    /* Se
19370 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
19380 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
19390 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
193a0 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
193b0 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
193c0 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
193d0 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
193e0 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
193f0 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
19400 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
19410 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
19420 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
19430 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
19440 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
19450 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
19460 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
19470 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
19480 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20 20 30  _CLEARCACHE    0
19490 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61 72 20  x20    /* Clear 
194a0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 61 63  pseudo-table cac
194b0 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he in OP_Column 
194c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
194d0 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20  G_LENGTHARG     
194e0 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x40    /* OP_Co
194f0 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
19500 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23  or length() */.#
19510 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59  define OPFLAG_TY
19520 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30  PEOFARG     0x80
19530 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
19540 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   only used for t
19550 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69  ypeof() */.#defi
19560 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  ne OPFLAG_BULKCS
19570 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  R       0x01    
19580 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65  /* OP_Open** use
19590 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63  d to open bulk c
195a0 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ursor */.#define
195b0 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20   OPFLAG_P2ISREG 
195c0 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
195d0 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a   P2 to OP_Open**
195e0 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e   is a register n
195f0 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  umber */.#define
19600 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
19610 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
19620 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65   OP_Compare: use
19630 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
19640 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20   */../*. * Each 
19650 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20  trigger present 
19660 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
19670 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64  schema is stored
19680 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   as an instance 
19690 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69  of. * struct Tri
196a0 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69  gger. . *. * Poi
196b0 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63  nters to instanc
196c0 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
196d0 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20  gger are stored 
196e0 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20  in two ways.. * 
196f0 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48  1. In the "trigH
19700 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20  ash" hash table 
19710 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c  (part of the sql
19720 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65  ite3* that repre
19730 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20  sents the . *   
19740 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73   database). This
19750 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20   allows Trigger 
19760 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65  structures to be
19770 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61   retrieved by na
19780 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72  me.. * 2. All tr
19790 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
197a0 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  d with a single 
197b0 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e  table form a lin
197c0 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20  ked list, using 
197d0 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20  the. *    pNext 
197e0 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74  member of struct
197f0 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e   Trigger. A poin
19800 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
19810 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a   element of the.
19820 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73   *    linked lis
19830 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74  t is stored as t
19840 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65  he "pTrigger" me
19850 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f  mber of the asso
19860 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72  ciated. *    str
19870 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a  uct Table.. *. *
19880 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   The "step_list"
19890 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74   member points t
198a0 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
198b0 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20  ent of a linked 
198c0 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69  list. * containi
198d0 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
198e0 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
198f0 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70  as the trigger p
19900 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75  rogram.. */.stru
19910 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
19920 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
19930 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
19940 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
19950 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
19960 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
19970 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
19980 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
19990 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
199a0 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
199b0 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20  applies */.  u8 
199c0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
199d0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
199e0 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
199f0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
19a00 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74         */.  u8 t
19a10 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20  r_tm;           
19a20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52      /* One of TR
19a30 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52  IGGER_BEFORE, TR
19a40 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20  IGGER_AFTER */. 
19a50 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20   Expr *pWhen;   
19a60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
19a70 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
19a80 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d  he expression (m
19a90 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
19aa0 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e   IdList *pColumn
19ab0 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  s;       /* If t
19ac0 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45  his is an UPDATE
19ad0 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   OF <column-list
19ae0 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20  > trigger,.     
19af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b00 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c          the <col
19b10 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f  umn-list> is sto
19b20 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  red here */.  Sc
19b30 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
19b40 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
19b50 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
19b60 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
19b70 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
19b80 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
19b90 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
19ba0 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
19bb0 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
19bc0 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
19bd0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
19be0 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
19bf0 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
19c00 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
19c10 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
19c20 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
19c30 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
19c40 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
19c50 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
19c60 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
19c70 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
19c80 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
19c90 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
19ca0 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ich. .**.** If t
19cb0 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c  here are multipl
19cc0 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20  e triggers, you 
19cd0 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45  might of some BE
19ce0 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46  FORE and some AF
19cf0 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20  TER..** In that 
19d00 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74  cases, the const
19d10 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62  ants below can b
19d20 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e  e ORed together.
19d30 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47  .*/.#define TRIG
19d40 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64  GER_BEFORE  1.#d
19d50 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46  efine TRIGGER_AF
19d60 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41  TER   2../*. * A
19d70 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74  n instance of st
19d80 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
19d90 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
19da0 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73  e a single SQL s
19db0 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74  tatement. * that
19dc0 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20   is a part of a 
19dd0 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
19de0 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65   . *. * Instance
19df0 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
19e00 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72  gerStep are stor
19e10 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c  ed in a singly l
19e20 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b  inked list (link
19e30 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20  ed. * using the 
19e40 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20  "pNext" member) 
19e50 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68  referenced by th
19e60 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
19e70 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20  mber of the . * 
19e80 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63  associated struc
19e90 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e  t Trigger instan
19ea0 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  ce. The first el
19eb0 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e  ement of the lin
19ec0 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74  ked list is. * t
19ed0 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66  he first step of
19ee0 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f   the trigger-pro
19ef0 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65  gram.. * . * The
19f00 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64   "op" member ind
19f10 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74  icates whether t
19f20 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45  his is a "DELETE
19f30 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50  ", "INSERT", "UP
19f40 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c  DATE" or. * "SEL
19f50 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20  ECT" statement. 
19f60 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  The meanings of 
19f70 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72  the other member
19f80 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
19f90 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65  by the . * value
19fa0 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c   of "op" as foll
19fb0 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ows:. *. * (op =
19fc0 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20  = TK_INSERT). * 
19fd0 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f  orconf    -> sto
19fe0 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  res the ON CONFL
19ff0 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a  ICT algorithm. *
1a000 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66   pSelect   -> If
1a010 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
1a020 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45  RT INTO ... SELE
1a030 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  CT ... statement
1a040 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
1a050 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
1a060 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  es a pointer to 
1a070 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
1a080 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20  ment. Otherwise 
1a090 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20  NULL.. * target 
1a0a0 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f     -> A token ho
1a0b0 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64  lding the quoted
1a0c0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1a0d0 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74  le to insert int
1a0e0 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  o.. * pExprList 
1a0f0 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
1a100 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
1a110 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74   VALUES ... stat
1a120 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
1a130 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1a140 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74   stores values t
1a150 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f  o be inserted. O
1a160 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1a170 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49  * pIdList   -> I
1a180 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1a190 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63  ERT INTO ... (<c
1a1a0 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41  olumn-names>) VA
1a1b0 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20  LUES ... . *    
1a1c0 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
1a1d0 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
1a1e0 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
1a1f0 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
1a200 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
1a210 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
1a220 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
1a230 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20  TE). * target   
1a240 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
1a250 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e  ing the quoted n
1a260 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1a270 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e   to delete from.
1a280 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
1a290 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1a2a0 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20  e of the DELETE 
1a2b0 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
1a2c0 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
1a2d0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
1a2e0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1a2f0 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f  * . * (op == TK_
1a300 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67 65  UPDATE). * targe
1a310 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
1a320 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74  holding the quot
1a330 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1a340 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20 72  able to update r
1a350 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72  ows of.. * pWher
1a360 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
1a370 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
1a380 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
1a390 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
1a3a0 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
1a3b0 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
1a3c0 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69  NULL.. * pExprLi
1a3d0 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20  st -> A list of 
1a3e0 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75  the columns to u
1a3f0 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78  pdate and the ex
1a400 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64  pressions to upd
1a410 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ate. *          
1a420 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65      them to. See
1a430 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29   sqlite3Update()
1a440 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
1a450 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20  f "pChanges". * 
1a460 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
1a470 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73  ument.. * . */.s
1a480 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1a490 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  p {.  u8 op;    
1a4a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1a4b0 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20  e of TK_DELETE, 
1a4c0 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
1a4d0 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20  SERT, TK_SELECT 
1a4e0 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20  */.  u8 orconf; 
1a4f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
1a500 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f  Rollback etc. */
1a510 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
1a520 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74  g;      /* The t
1a530 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73  rigger that this
1a540 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20   step is a part 
1a550 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  of */.  Select *
1a560 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
1a570 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74 20  SELECT statment 
1a580 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54  or RHS of INSERT
1a590 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54 20   INTO .. SELECT 
1a5a0 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74  ... */.  Token t
1a5b0 61 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f 2a  arget;        /*
1a5c0 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f   Target table fo
1a5d0 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45  r DELETE, UPDATE
1a5e0 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78  , INSERT */.  Ex
1a5f0 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
1a600 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
1a610 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54  clause for DELET
1a620 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70  E or UPDATE step
1a630 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
1a640 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53  *pExprList; /* S
1a650 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50  ET clause for UP
1a660 44 41 54 45 2e 20 20 56 41 4c 55 45 53 20 63 6c  DATE.  VALUES cl
1a670 61 75 73 65 20 66 6f 72 20 49 4e 53 45 52 54 20  ause for INSERT 
1a680 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64  */.  IdList *pId
1a690 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  List;     /* Col
1a6a0 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e  umn names for IN
1a6b0 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65  SERT */.  Trigge
1a6c0 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f  rStep *pNext;  /
1a6d0 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69  * Next in the li
1a6e0 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69  nk-list */.  Tri
1a6f0 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b  ggerStep *pLast;
1a700 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e    /* Last elemen
1a710 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20  t in link-list. 
1a720 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c  Valid for 1st el
1a730 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f  em only */.};../
1a740 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1a750 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
1a760 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
1a770 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71  n used by the sq
1a780 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f  liteFix....** ro
1a790 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77  utines as they w
1a7a0 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72  alk the parse tr
1a7b0 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62  ee to make datab
1a7c0 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a  ase references.*
1a7d0 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f  * explicit.  .*/
1a7e0 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
1a7f0 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b  DbFixer DbFixer;
1a800 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20  .struct DbFixer 
1a810 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
1a820 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  e;      /* The p
1a830 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20  arsing context. 
1a840 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   Error messages 
1a850 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
1a860 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1a870 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65  a;    /* Fix ite
1a880 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d  ms to this schem
1a890 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  a */.  const cha
1a8a0 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61  r *zDb;    /* Ma
1a8b0 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65  ke sure all obje
1a8c0 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  cts are containe
1a8d0 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61  d in this databa
1a8e0 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  se */.  const ch
1a8f0 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54  ar *zType;  /* T
1a900 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ype of the conta
1a910 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
1a920 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
1a930 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  /.  const Token 
1a940 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20  *pName; /* Name 
1a950 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
1a960 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
1a970 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b  r messages */.};
1a980 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
1a990 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75  ted used to accu
1a9a0 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20  mulate the text 
1a9b0 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72  of a string wher
1a9c0 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e  e we.** do not n
1a9d0 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20  ecessarily know 
1a9e0 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69  how big the stri
1a9f0 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68  ng will be in th
1aa00 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
1aa10 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71   StrAccum {.  sq
1aa20 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
1aa30 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64     /* Optional d
1aa40 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b  atabase for look
1aa50 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e  aside.  Can be N
1aa60 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ULL */.  char *z
1aa70 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Base;         /*
1aa80 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69   A base allocati
1aa90 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61  on.  Not from ma
1aaa0 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20  lloc. */.  char 
1aab0 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20  *zText;         
1aac0 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f  /* The string co
1aad0 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a  llected so far *
1aae0 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20  /.  int  nChar; 
1aaf0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
1ab00 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  th of the string
1ab10 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1ab20 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20    nAlloc;       
1ab30 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73    /* Amount of s
1ab40 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69  pace allocated i
1ab50 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74  n zText */.  int
1ab60 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20    mxAlloc;      
1ab70 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c    /* Maximum all
1ab80 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65 6e 67  owed string leng
1ab90 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 6d 61 6c  th */.  u8   mal
1aba0 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 2f 2a 20  locFailed;   /* 
1abb0 42 65 63 6f 6d 65 73 20 74 72 75 65 20 69 66 20  Becomes true if 
1abc0 61 6e 79 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  any memory alloc
1abd0 61 74 69 6f 6e 20 66 61 69 6c 73 20 2a 2f 0a 20  ation fails */. 
1abe0 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b   u8   useMalloc;
1abf0 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65        /* 0: none
1ac00 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44 62 4d  ,  1: sqlite3DbM
1ac10 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69 74  alloc,  2: sqlit
1ac20 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75  e3_malloc */.  u
1ac30 38 20 20 20 74 6f 6f 42 69 67 3b 20 20 20 20 20  8   tooBig;     
1ac40 20 20 20 20 2f 2a 20 42 65 63 6f 6d 65 73 20 74      /* Becomes t
1ac50 72 75 65 20 69 66 20 73 74 72 69 6e 67 20 73 69  rue if string si
1ac60 7a 65 20 65 78 63 65 65 64 73 20 6c 69 6d 69 74  ze exceeds limit
1ac70 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
1ac80 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
1ac90 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
1aca0 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74  ed to communicat
1acb0 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  e information.**
1acc0 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69   from sqlite3Ini
1acd0 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63  t and OP_ParseSc
1ace0 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71  hema into the sq
1acf0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
1ad00 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  k..*/.typedef st
1ad10 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33  ruct {.  sqlite3
1ad20 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
1ad30 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69  The database bei
1ad40 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
1ad50 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  /.  char **pzErr
1ad60 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72  Msg;    /* Error
1ad70 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20   message stored 
1ad80 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44  here */.  int iD
1ad90 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
1ada0 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61   0 for main data
1adb0 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d  base.  1 for TEM
1adc0 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43  P, 2.. for ATTAC
1add0 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  Hed */.  int rc;
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1adf0 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72  Result code stor
1ae00 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69  ed here */.} Ini
1ae10 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74  tData;../*.** St
1ae20 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69  ructure containi
1ae30 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67  ng global config
1ae40 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72  uration data for
1ae50 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
1ae60 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ary..**.** This 
1ae70 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63  structure also c
1ae80 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61  ontains some sta
1ae90 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  te information..
1aea0 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65  */.struct Sqlite
1aeb0 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20  3Config {.  int 
1aec0 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20  bMemstat;       
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1aee0 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1aef0 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f  memory status */
1af00 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65  .  int bCoreMute
1af10 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
1af20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1af30 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65  enable core mute
1af40 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46  xing */.  int bF
1af50 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20  ullMutex;       
1af60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1af70 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75  rue to enable fu
1af80 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  ll mutexing */. 
1af90 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20   int bOpenUri;  
1afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afb0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e     /* True to in
1afc0 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65  terpret filename
1afd0 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69  s as URIs */.  i
1afe0 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20 20  nt bUseCis;     
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b000 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67   /* Use covering
1b010 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c   indices for ful
1b020 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74  l-scans */.  int
1b030 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20   mxStrlen;      
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b050 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67  * Maximum string
1b060 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74   length */.  int
1b070 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20   szLookaside;   
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b090 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
1b0a0 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20  ide buffer size 
1b0b0 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73  */.  int nLookas
1b0c0 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
1b0d0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1b0e0 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
1b0f0 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71  er count */.  sq
1b100 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
1b110 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  s m;            
1b120 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d  /* Low-level mem
1b130 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
1b140 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
1b150 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
1b160 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20  ods mutex;      
1b170 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74  /* Low-level mut
1b180 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  ex interface */.
1b190 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65    sqlite3_pcache
1b1a0 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65  _methods2 pcache
1b1b0 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c  2;  /* Low-level
1b1c0 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65   page-cache inte
1b1d0 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  rface */.  void 
1b1e0 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20  *pHeap;         
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b200 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61  Heap storage spa
1b210 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61  ce */.  int nHea
1b220 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1b230 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
1b240 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a  e of pHeap[] */.
1b250 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52    int mnReq, mxR
1b260 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
1b270 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d      /* Min and m
1b280 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73  ax heap requests
1b290 20 73 69 7a 65 73 20 2a 2f 0a 20 20 76 6f 69 64   sizes */.  void
1b2a0 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20 20   *pScratch;     
1b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b2c0 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20   Scratch memory 
1b2d0 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74  */.  int szScrat
1b2e0 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
1b2f0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1b300 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20 62  f each scratch b
1b310 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  uffer */.  int n
1b320 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
1b330 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b340 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63  Number of scratc
1b350 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76  h buffers */.  v
1b360 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20  oid *pPage;     
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b380 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d   /* Page cache m
1b390 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
1b3a0 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  zPage;          
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 65 61 63 68 20 70 61 67  Size of each pag
1b3d0 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  e in pPage[] */.
1b3e0 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20    int nPage;    
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b400 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b410 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b   pages in pPage[
1b420 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72  ] */.  int mxPar
1b430 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20  serStack;       
1b440 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69           /* maxi
1b450 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65  mum depth of the
1b460 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f   parser stack */
1b470 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63  .  int sharedCac
1b480 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20  heEnabled;      
1b490 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20       /* true if 
1b4a0 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
1b4b0 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 2f  e enabled */.  /
1b4c0 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68  * The above migh
1b4d0 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
1b4e0 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54   to non-zero.  T
1b4f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65  he following nee
1b500 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a  d to always.  **
1b510 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65   initially be ze
1b520 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a  ro, however. */.
1b530 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20    int isInit;   
1b540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b550 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1b560 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  r initialization
1b570 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f   has finished */
1b580 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73  .  int inProgres
1b590 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1b5a0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69       /* True whi
1b5b0 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  le initializatio
1b5c0 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f  n in progress */
1b5d0 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e  .  int isMutexIn
1b5e0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1b5f0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1b600 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69  er mutexes are i
1b610 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1b620 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74  int isMallocInit
1b630 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b640 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1b650 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
1b660 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
1b670 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20  sPCacheInit;    
1b680 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b690 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
1b6a0 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
1b6b0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
1b6c0 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b  tex *pInitMutex;
1b6d0 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78          /* Mutex
1b6e0 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
1b6f0 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f  _initialize() */
1b700 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d  .  int nRefInitM
1b710 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1b720 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b730 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74  f users of pInit
1b740 4d 75 74 65 78 20 2a 2f 0a 20 20 76 6f 69 64 20  Mutex */.  void 
1b750 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e  (*xLog)(void*,in
1b760 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20  t,const char*); 
1b770 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20  /* Function for 
1b780 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69  logging */.  voi
1b790 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20  d *pLogArg;     
1b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7b0 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
1b7c0 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f  ent to xLog() */
1b7d0 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d  .  int bLocaltim
1b7e0 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20  eFault;         
1b7f0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1b800 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29  fail localtime()
1b810 20 63 61 6c 6c 73 20 2a 2f 0a 23 69 66 64 65 66   calls */.#ifdef
1b820 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
1b830 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53  QLLOG.  void(*xS
1b840 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c  qllog)(void*,sql
1b850 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1b860 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
1b870 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e  *pSqllogArg;.#en
1b880 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f  dif.};../*.** Co
1b890 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61  ntext pointer pa
1b8a0 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67  ssed down throug
1b8b0 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e  h the tree-walk.
1b8c0 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65  .*/.struct Walke
1b8d0 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78 70  r {.  int (*xExp
1b8e0 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  rCallback)(Walke
1b8f0 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20  r*, Expr*);     
1b900 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
1b910 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
1b920 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61   int (*xSelectCa
1b930 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
1b940 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61  Select*);  /* Ca
1b950 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
1b960 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  Ts */.  Parse *p
1b970 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
1b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b990 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74    /* Parser cont
1b9a0 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77  ext.  */.  int w
1b9b0 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20  alkerDepth;     
1b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b9e0 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a  f subqueries */.
1b9f0 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20    union {       
1ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
1ba20 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61  xtra data for ca
1ba30 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61  llback */.    Na
1ba40 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20  meContext *pNC; 
1ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba60 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69           /* Nami
1ba70 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
1ba80 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
1ba90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bab0 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 2a 2f  Integer value */
1bac0 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53  .    SrcList *pS
1bad0 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  rcList;         
1bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baf0 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  /* FROM clause *
1bb00 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63  /.    struct Src
1bb10 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74  Count *pSrcCount
1bb20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1bb30 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c   /* Counting col
1bb40 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a  umn references *
1bb50 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20  /.  } u;.};../* 
1bb60 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74  Forward declarat
1bb70 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ions */.int sqli
1bb80 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b  te3WalkExpr(Walk
1bb90 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
1bba0 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72   sqlite3WalkExpr
1bbb0 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78  List(Walker*, Ex
1bbc0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
1bbd0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28  lite3WalkSelect(
1bbe0 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
1bbf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1bc00 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c  lkSelectExpr(Wal
1bc10 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
1bc20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
1bc30 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72  electFrom(Walker
1bc40 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a  *, Select*);../*
1bc50 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20  .** Return code 
1bc60 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74  from the parse-t
1bc70 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d  ree walking prim
1bc80 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72  itives and their
1bc90 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a  .** callbacks..*
1bca0 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f  /.#define WRC_Co
1bcb0 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a  ntinue    0   /*
1bcc0 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69   Continue down i
1bcd0 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a  nto children */.
1bce0 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e  #define WRC_Prun
1bcf0 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f  e       1   /* O
1bd00 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74  mit children but
1bd10 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e   continue walkin
1bd20 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64  g siblings */.#d
1bd30 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20  efine WRC_Abort 
1bd40 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61        2   /* Aba
1bd50 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61  ndon the tree wa
1bd60 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  lk */../*.** Ass
1bd70 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73  uming zIn points
1bd80 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1bd90 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68  te of a UTF-8 ch
1bda0 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61  aracter,.** adva
1bdb0 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74  nce zIn to point
1bdc0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1bdd0 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55  te of the next U
1bde0 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a  TF-8 character..
1bdf0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
1be00 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29  E_SKIP_UTF8(zIn)
1be10 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1be20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66            \.  if
1be30 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78  ( (*(zIn++))>=0x
1be40 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20  c0 ){           
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be60 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20     \.    while( 
1be70 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30  (*zIn & 0xc0)==0
1be80 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20  x80 ){ zIn++; } 
1be90 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1bea0 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
1beb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bed0 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20       \.}../*.** 
1bee0 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50  The SQLITE_*_BKP
1bef0 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62  T macros are sub
1bf00 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65  stitutes for the
1bf10 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74   error codes wit
1bf20 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61  h.** the same na
1bf30 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74  me but without t
1bf40 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e  he _BKPT suffix.
1bf50 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69    These macros i
1bf60 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65  nvoke.** routine
1bf70 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68  s that report th
1bf80 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e  e line-number on
1bf90 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72   which the error
1bfa0 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75   originated.** u
1bfb0 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67  sing sqlite3_log
1bfc0 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65  ().  The routine
1bfd0 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61  s also provide a
1bfe0 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63   convenient plac
1bff0 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65  e.** to set a de
1c000 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e  bugger breakpoin
1c010 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
1c020 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e  3CorruptError(in
1c030 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  t);.int sqlite3M
1c040 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b  isuseError(int);
1c050 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74  .int sqlite3Cant
1c060 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a  openError(int);.
1c070 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
1c080 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69  ORRUPT_BKPT sqli
1c090 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
1c0a0 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
1c0b0 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  e SQLITE_MISUSE_
1c0c0 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75  BKPT sqlite3Misu
1c0d0 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  seError(__LINE__
1c0e0 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
1c0f0 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73  _CANTOPEN_BKPT s
1c100 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
1c110 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a  ror(__LINE__)...
1c120 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
1c130 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
1c140 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
1c150 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
1c160 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
1c170 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
1c180 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
1c190 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
1c1a0 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c  o all.** the SQL
1c1b0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20  ITE_ENABLE_FTS4 
1c1c0 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61  macro to serve a
1c1d0 73 20 61 6e 20 61 6c 69 73 73 65 20 66 6f 72 20  s an alisse for 
1c1e0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1c1f0 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
1c200 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1c210 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
1c220 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1c230 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
1c240 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1c250 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S3.#endif../*.**
1c260 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61   The ctype.h hea
1c270 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f  der is needed fo
1c280 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74  r non-ASCII syst
1c290 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  ems.  It is also
1c2a0 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54  .** needed by FT
1c2b0 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20  S3 when FTS3 is 
1c2c0 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
1c2d0 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f  amalgamation..*/
1c2e0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1c2f0 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c  LITE_ASCII) || \
1c300 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
1c310 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1c320 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
1c330 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
1c340 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74  )).# include <ct
1c350 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  ype.h>.#endif../
1c360 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1c370 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20  ng macros mimic 
1c380 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
1c390 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74  rary functions t
1c3a0 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73  oupper(),.** iss
1c3b0 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28  pace(), isalnum(
1c3c0 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64  ), isdigit() and
1c3d0 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73   isxdigit(), res
1c3e0 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a  pectively. The.*
1c3f0 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e  * sqlite version
1c400 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
1c410 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
1c420 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
1c430 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  locale..*/.#ifde
1c440 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23  f SQLITE_ASCII.#
1c450 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1c460 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26  oupper(x)  ((x)&
1c470 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  ~(sqlite3CtypeMa
1c480 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
1c490 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64  )(x)]&0x20)).# d
1c4a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
1c4b0 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74  pace(x)   (sqlit
1c4c0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1c4d0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1c4e0 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x01).# define sq
1c4f0 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
1c500 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1c510 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1c520 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64  r)(x)]&0x06).# d
1c530 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1c540 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74  lpha(x)   (sqlit
1c550 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1c560 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1c570 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x02).# define sq
1c580 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
1c590 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1c5a0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1c5b0 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64  r)(x)]&0x04).# d
1c5c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
1c5d0 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74  digit(x)  (sqlit
1c5e0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1c5f0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1c600 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x08).# define sq
1c610 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
1c620 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54    (sqlite3UpperT
1c630 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
1c640 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73   char)(x)]).#els
1c650 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1c660 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74  e3Toupper(x)   t
1c670 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64  oupper((unsigned
1c680 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1c690 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
1c6a0 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28  ce(x)   isspace(
1c6b0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1c6c0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1c6d0 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
1c6e0 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e   isalnum((unsign
1c6f0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# 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 69 73 61 6c 70 68  lpha(x)   isalph
1c720 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  a((unsigned char
1c730 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1c740 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
1c750 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69     isdigit((unsi
1c760 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1c770 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c780 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64  sxdigit(x)  isxd
1c790 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
1c7a0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1c7b0 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
1c7c0 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75  (x)   tolower((u
1c7d0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1c7e0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
1c7f0 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f  Internal functio
1c800 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a  n prototypes.*/.
1c810 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
1c820 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  trICmp sqlite3_s
1c830 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74  tricmp.int sqlit
1c840 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74  e3Strlen30(const
1c850 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
1c860 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
1c870 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
1c880 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
1c890 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
1c8a0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
1c8b0 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
1c8c0 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
1c8d0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (int);.void *sql
1c8e0 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69  ite3MallocZero(i
1c8f0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1c900 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
1c910 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76  qlite3*, int);.v
1c920 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
1c930 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
1c940 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71  , int);.char *sq
1c950 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71  lite3DbStrDup(sq
1c960 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1c970 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
1c980 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69  e3DbStrNDup(sqli
1c990 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1c9a0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1c9b0 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69  lite3Realloc(voi
1c9c0 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  d*, int);.void *
1c9d0 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
1c9e0 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a  OrFree(sqlite3 *
1c9f0 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a  , void *, int);.
1ca00 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
1ca10 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a  ealloc(sqlite3 *
1ca20 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a  , void *, int);.
1ca30 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72  void sqlite3DbFr
1ca40 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ee(sqlite3*, voi
1ca50 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
1ca60 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a  MallocSize(void*
1ca70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  );.int sqlite3Db
1ca80 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74  MallocSize(sqlit
1ca90 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
1caa0 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63  d *sqlite3Scratc
1cab0 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  hMalloc(int);.vo
1cac0 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63  id sqlite3Scratc
1cad0 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  hFree(void*);.vo
1cae0 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d  id *sqlite3PageM
1caf0 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
1cb00 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65   sqlite3PageFree
1cb10 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
1cb20 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75  lite3MemSetDefau
1cb30 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  lt(void);.void s
1cb40 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c  qlite3BenignMall
1cb50 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29  ocHooks(void (*)
1cb60 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29  (void), void (*)
1cb70 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c  (void));.int sql
1cb80 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75  ite3HeapNearlyFu
1cb90 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a  ll(void);../*.**
1cba0 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   On systems with
1cbb0 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61   ample stack spa
1cbc0 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70  ce and that supp
1cbd0 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61  ort alloca(), ma
1cbe0 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c  ke.** use of all
1cbf0 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20  oca() to obtain 
1cc00 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20  space for large 
1cc10 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74  automatic object
1cc20 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a  s.  By default,.
1cc30 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  ** obtain space 
1cc40 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a  from malloc()..*
1cc50 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28  *.** The alloca(
1cc60 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20  ) routine never 
1cc70 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54  returns NULL.  T
1cc80 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63  his will cause c
1cc90 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61  ode paths.** tha
1cca0 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69  t deal with sqli
1ccb0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20  te3StackAlloc() 
1ccc0 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75  failures to be u
1ccd0 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23  nreachable..*/.#
1cce0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
1ccf0 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65  _ALLOCA.# define
1cd00 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
1cd10 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c  ocRaw(D,N)   all
1cd20 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20  oca(N).# define 
1cd30 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
1cd40 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73  cZero(D,N)  mems
1cd50 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c  et(alloca(N), 0,
1cd60 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   N).# define sql
1cd70 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
1cd80 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65 0a  P)       .#else.
1cd90 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1cda0 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
1cdb0 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  N)   sqlite3DbMa
1cdc0 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64  llocRaw(D,N).# d
1cdd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1cde0 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
1cdf0 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
1ce00 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66  cZero(D,N).# def
1ce10 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1ce20 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20  Free(D,P)       
1ce30 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c  sqlite3DbFree(D,
1ce40 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  P).#endif..#ifde
1ce50 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1ce60 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71  MEMSYS3.const sq
1ce70 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
1ce80 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
1ce90 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23  Memsys3(void);.#
1cea0 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
1ceb0 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
1cec0 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S5.const sqlite3
1ced0 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
1cee0 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
1cef0 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s5(void);.#endif
1cf00 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
1cf10 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
1cf20 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1cf30 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
1cf40 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
1cf50 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
1cf60 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
1cf70 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
1cf80 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
1cf90 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
1cfa0 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
1cfb0 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
1cfc0 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
1cfd0 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
1cfe0 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
1cff0 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
1d000 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65  lite3StatusValue
1d010 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
1d020 74 65 33 53 74 61 74 75 73 41 64 64 28 69 6e 74  te3StatusAdd(int
1d030 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1d040 69 74 65 33 53 74 61 74 75 73 53 65 74 28 69 6e  ite3StatusSet(in
1d050 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65  t, int);..#ifnde
1d060 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
1d070 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69  OATING_POINT.  i
1d080 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  nt sqlite3IsNaN(
1d090 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23  double);.#else.#
1d0a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1d0b0 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69  sNaN(X)  0.#endi
1d0c0 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  f..void sqlite3V
1d0d0 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
1d0e0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
1d0f0 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23  ar*, va_list);.#
1d100 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1d110 49 54 5f 54 52 41 43 45 0a 76 6f 69 64 20 73 71  IT_TRACE.void sq
1d120 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72  lite3XPrintf(Str
1d130 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68  Accum*, const ch
1d140 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
1d150 66 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  f.char *sqlite3M
1d160 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
1d170 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
1d180 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1d190 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  VMPrintf(sqlite3
1d1a0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  *,const char*, v
1d1b0 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a 73  a_list);.char *s
1d1c0 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28 73  qlite3MAppendf(s
1d1d0 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63 6f  qlite3*,char*,co
1d1e0 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
1d1f0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1d200 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69  TE_TEST) || defi
1d210 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
1d220 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
1d230 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73  DebugPrintf(cons
1d240 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23  t char*, ...);.#
1d250 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
1d260 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
1d270 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65   void *sqlite3Te
1d280 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73  stTextToPtr(cons
1d290 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
1d2a0 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72 6d  ../* Output form
1d2b0 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c 49 54  atting for SQLIT
1d2c0 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50 4c 41  E_TESTCTRL_EXPLA
1d2d0 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  IN */.#if define
1d2e0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1d2f0 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a 20 20  TREE_EXPLAIN).  
1d300 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
1d310 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a 29 3b  ainBegin(Vdbe*);
1d320 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
1d330 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56 64 62  xplainPrintf(Vdb
1d340 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
1d350 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73 71   ...);.  void sq
1d360 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c 28 56  lite3ExplainNL(V
1d370 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  dbe*);.  void sq
1d380 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75 73 68  lite3ExplainPush
1d390 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
1d3a0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 6f  sqlite3ExplainPo
1d3b0 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  p(Vdbe*);.  void
1d3c0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46   sqlite3ExplainF
1d3d0 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a 20 20  inish(Vdbe*);.  
1d3e0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
1d3f0 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65 2a 2c  ainSelect(Vdbe*,
1d400 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69   Select*);.  voi
1d410 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1d420 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78 70 72  Expr(Vdbe*, Expr
1d430 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1d440 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73  e3ExplainExprLis
1d450 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c 69 73  t(Vdbe*, ExprLis
1d460 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  t*);.  const cha
1d470 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65 45 78  r *sqlite3VdbeEx
1d480 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65 2a 29  planation(Vdbe*)
1d490 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
1d4a0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42   sqlite3ExplainB
1d4b0 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
1d4c0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53   sqlite3ExplainS
1d4d0 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64 65 66  elect(A,B).# def
1d4e0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
1d4f0 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20 64 65  inExpr(A,B).# de
1d500 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
1d510 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c 42 29  ainExprList(A,B)
1d520 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1d530 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 58  3ExplainFinish(X
1d540 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1d550 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f  e3VdbeExplanatio
1d560 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a  n(X) 0.#endif...
1d570 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
1d580 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
1d590 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
1d5a0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
1d5b0 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
1d5c0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
1d5d0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20  har*, ...);.int 
1d5e0 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63  sqlite3Dequote(c
1d5f0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
1d600 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f  e3KeywordCode(co
1d610 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
1d620 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
1d630 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50  lite3RunParser(P
1d640 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
1d650 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f  r*, char **);.vo
1d660 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68  id sqlite3Finish
1d670 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a  Coding(Parse*);.
1d680 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
1d690 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76  mpReg(Parse*);.v
1d6a0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
1d6b0 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  seTempReg(Parse*
1d6c0 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
1d6d0 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50  e3GetTempRange(P
1d6e0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
1d6f0 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
1d700 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
1d710 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
1d720 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52  qlite3ClearTempR
1d730 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b  egCache(Parse*);
1d740 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
1d750 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  prAlloc(sqlite3*
1d760 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e  ,int,const Token
1d770 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  *,int);.Expr *sq
1d780 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65  lite3Expr(sqlite
1d790 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
1d7a0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1d7b0 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72  3ExprAttachSubtr
1d7c0 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ees(sqlite3*,Exp
1d7d0 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  r*,Expr*,Expr*);
1d7e0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45  .Expr *sqlite3PE
1d7f0 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  xpr(Parse*, int,
1d800 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63   Expr*, Expr*, c
1d810 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78  onst Token*);.Ex
1d820 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
1d830 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  nd(sqlite3*,Expr
1d840 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  *, Expr*);.Expr 
1d850 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63  *sqlite3ExprFunc
1d860 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  tion(Parse*,Expr
1d870 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
1d880 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1d890 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28  AssignVarNumber(
1d8a0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
1d8b0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1d8c0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
1d8d0 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73   Expr*);.ExprLis
1d8e0 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
1d8f0 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
1d900 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29  ExprList*,Expr*)
1d910 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1d920 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
1d930 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
1d940 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
1d950 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
1d960 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
1d970 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61  xprList*,ExprSpa
1d980 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
1d990 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
1d9a0 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
1d9b0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1d9c0 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  3Init(sqlite3*, 
1d9d0 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
1d9e0 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
1d9f0 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61  (void*, int, cha
1da00 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f  r**, char**);.vo
1da10 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
1da20 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1da30 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
1da40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1da50 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
1da60 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74  Connection(sqlit
1da70 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
1da80 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
1da90 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
1daa0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c  void sqlite3Coll
1dab0 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61  apseDatabaseArra
1dac0 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  y(sqlite3*);.voi
1dad0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61  d sqlite3BeginPa
1dae0 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  rse(Parse*,int);
1daf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
1db00 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67  mitInternalChang
1db10 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61  es(sqlite3*);.Ta
1db20 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75  ble *sqlite3Resu
1db30 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61  ltSetOfSelect(Pa
1db40 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76  rse*,Select*);.v
1db50 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d  oid sqlite3OpenM
1db60 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65  asterTable(Parse
1db70 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73   *, int);.void s
1db80 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
1db90 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1dba0 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
1dbb0 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
1dbc0 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
1dbd0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
1dbe0 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
1dbf0 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
1dc00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1dc10 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
1dc20 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
1dc30 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1dc40 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
1dc50 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
1dc60 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
1dc70 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
1dc80 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  lumnType(Parse*,
1dc90 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1dca0 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
1dcb0 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
1dcc0 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
1dcd0 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
1dce0 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
1dcf0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1dd00 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
1dd10 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65  Token*,Token*,Se
1dd20 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
1dd30 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73  te3ParseUri(cons
1dd40 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
1dd50 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  ar*,unsigned int
1dd60 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1dd70 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
1dd80 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72  fs**,char**,char
1dd90 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c   **);.Btree *sql
1dda0 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65  ite3DbNameToBtre
1ddb0 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
1ddc0 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
1ddd0 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72  ite3CodeOnce(Par
1dde0 73 65 20 2a 29 3b 0a 0a 42 69 74 76 65 63 20 2a  se *);..Bitvec *
1ddf0 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65  sqlite3BitvecCre
1de00 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71  ate(u32);.int sq
1de10 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28  lite3BitvecTest(
1de20 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
1de30 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
1de40 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
1de50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1de60 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
1de70 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
1de80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
1de90 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
1dea0 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
1deb0 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
1dec0 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  c*);.int sqlite3
1ded0 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73  BitvecBuiltinTes
1dee0 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f  t(int,int*);..Ro
1def0 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
1df00 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
1df10 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65  , void*, unsigne
1df20 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  d int);.void sql
1df30 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
1df40 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73  RowSet*);.void s
1df50 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
1df60 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29  rt(RowSet*, i64)
1df70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
1df80 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c  SetTest(RowSet*,
1df90 20 75 38 20 69 42 61 74 63 68 2c 20 69 36 34 29   u8 iBatch, i64)
1dfa0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
1dfb0 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c  SetNext(RowSet*,
1dfc0 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71   i64*);..void sq
1dfd0 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28  lite3CreateView(
1dfe0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
1dff0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65  ken*,Token*,Sele
1e000 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23  ct*,int,int);..#
1e010 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1e020 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c  TE_OMIT_VIEW) ||
1e030 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1e040 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1e050 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  LE).  int sqlite
1e060 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
1e070 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  mes(Parse*,Table
1e080 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
1e090 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  ne sqlite3ViewGe
1e0a0 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42  tColumnNames(A,B
1e0b0 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  ) 0.#endif..void
1e0c0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c   sqlite3DropTabl
1e0d0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
1e0e0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
1e0f0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44  oid sqlite3CodeD
1e100 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
1e110 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1e120 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e130 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
1e140 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
1e150 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1e160 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
1e170 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
1e180 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
1e190 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  n(Parse *pParse)
1e1a0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1e1b0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
1e1c0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
1e1d0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1e1e0 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
1e1f0 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64  mentBegin(X).# d
1e200 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
1e210 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29  oincrementEnd(X)
1e220 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
1e230 74 65 33 43 6f 64 65 43 6f 72 6f 75 74 69 6e 65  te3CodeCoroutine
1e240 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
1e250 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a  , SelectDest*);.
1e260 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65  void sqlite3Inse
1e270 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rt(Parse*, SrcLi
1e280 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
1e290 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a  Select*, IdList*
1e2a0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1e2b0 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61  lite3ArrayAlloca
1e2c0 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64  te(sqlite3*,void
1e2d0 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29  *,int,int*,int*)
1e2e0 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
1e2f0 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71  3IdListAppend(sq
1e300 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c  lite3*, IdList*,
1e310 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
1e320 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78  lite3IdListIndex
1e330 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  (IdList*,const c
1e340 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  har*);.SrcList *
1e350 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e  sqlite3SrcListEn
1e360 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20  large(sqlite3*, 
1e370 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
1e380 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
1e390 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
1e3a0 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  nd(sqlite3*, Src
1e3b0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
1e3c0 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20  oken*);.SrcList 
1e3d0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
1e3e0 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61  ppendFromTerm(Pa
1e3f0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1e400 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a  Token*, Token*,.
1e410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e430 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65        Token*, Se
1e440 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64  lect*, Expr*, Id
1e450 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
1e460 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78  ite3SrcListIndex
1e470 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72  edBy(Parse *, Sr
1e480 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a  cList *, Token *
1e490 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
1e4a0 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61  dexedByLookup(Pa
1e4b0 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72  rse *, struct Sr
1e4c0 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76  cList_item *);.v
1e4d0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
1e4e0 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
1e4f0 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
1e500 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73  sqlite3SrcListAs
1e510 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73  signCursors(Pars
1e520 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76  e*, SrcList*);.v
1e530 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73  oid sqlite3IdLis
1e540 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
1e550 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
1e560 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44   sqlite3SrcListD
1e570 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
1e580 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78  SrcList*);.Index
1e590 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49   *sqlite3CreateI
1e5a0 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65  ndex(Parse*,Toke
1e5b0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73  n*,Token*,SrcLis
1e5c0 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  t*,ExprList*,int
1e5d0 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20  ,Token*,.       
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5f0 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 2c 20 69 6e   Token*, int, in
1e600 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e610 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
1e620 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
1e630 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
1e640 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
1e650 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
1e660 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
1e670 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
1e680 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
1e690 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
1e6a0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
1e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6c0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
1e6d0 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  u16,Expr*,Expr*)
1e6e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
1e6f0 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74  lectDelete(sqlit
1e700 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54  e3*, Select*);.T
1e710 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63  able *sqlite3Src
1e720 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65  ListLookup(Parse
1e730 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
1e740 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f  t sqlite3IsReadO
1e750 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  nly(Parse*, Tabl
1e760 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
1e770 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
1e780 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72  Parse*, int iCur
1e790 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65  , int iDb, Table
1e7a0 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66  *, int);.#if def
1e7b0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1e7c0 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
1e7d0 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69  _LIMIT) && !defi
1e7e0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1e7f0 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a  SUBQUERY).Expr *
1e800 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72  sqlite3LimitWher
1e810 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  e(Parse*,SrcList
1e820 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
1e830 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68  *,Expr*,Expr*,ch
1e840 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
1e850 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
1e860 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
1e870 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
1e880 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
1e890 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1e8a0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
1e8b0 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
1e8c0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
1e8d0 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
1e8e0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
1e8f0 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
1e900 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
1e910 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
1e920 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
1e930 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1e940 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65  eGetColumn(Parse
1e950 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1e960 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76  int, int, u8);.v
1e970 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1e980 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61  odeGetColumnOfTa
1e990 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ble(Vdbe*, Table
1e9a0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1e9b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e9c0 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73  xprCodeMove(Pars
1e9d0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1e9e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e9f0 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50  ExprCacheStore(P
1ea00 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
1ea10 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1ea20 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68  te3ExprCachePush
1ea30 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1ea40 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
1ea50 6f 70 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  op(Parse*, int);
1ea60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1ea70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72  rCacheRemove(Par
1ea80 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
1ea90 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1eaa0 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65  CacheClear(Parse
1eab0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1eac0 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74  ExprCacheAffinit
1ead0 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20  yChange(Parse*, 
1eae0 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
1eaf0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50  qlite3ExprCode(P
1eb00 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1eb10 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
1eb20 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
1eb30 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
1eb40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1eb50 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
1eb60 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
1eb70 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1eb80 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
1eb90 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
1eba0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1ebb0 70 72 43 6f 64 65 43 6f 6e 73 74 61 6e 74 73 28  prCodeConstants(
1ebc0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
1ebd0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1ebe0 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73  odeExprList(Pars
1ebf0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
1ec00 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1ec10 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65  qlite3ExprIfTrue
1ec20 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1ec30 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1ec40 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
1ec50 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  se(Parse*, Expr*
1ec60 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
1ec70 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54  le *sqlite3FindT
1ec80 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  able(sqlite3*,co
1ec90 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
1eca0 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a   char*);.Table *
1ecb0 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
1ecc0 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  le(Parse*,int is
1ecd0 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a  View,const char*
1ece0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
1ecf0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
1ed00 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61  cateTableItem(Pa
1ed10 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c  rse*,int isView,
1ed20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
1ed30 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  tem *);.Index *s
1ed40 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
1ed50 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1ed60 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
1ed70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ed80 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
1ed90 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e  able(sqlite3*,in
1eda0 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
1edb0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
1edc0 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
1edd0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
1ede0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
1edf0 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50   sqlite3Vacuum(P
1ee00 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
1ee10 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61  te3RunVacuum(cha
1ee20 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a  r**, sqlite3*);.
1ee30 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d  char *sqlite3Nam
1ee40 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74  eFromToken(sqlit
1ee50 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
1ee60 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d  t sqlite3ExprCom
1ee70 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72  pare(Expr*, Expr
1ee80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1ee90 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
1eea0 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
1eeb0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
1eec0 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
1eed0 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
1eee0 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
1eef0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
1ef00 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
1ef10 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
1ef20 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1ef30 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69  3FunctionUsesThi
1ef40 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c  sSrc(Expr*, SrcL
1ef50 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c  ist*);.Vdbe *sql
1ef60 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73  ite3GetVdbe(Pars
1ef70 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1ef80 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
1ef90 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
1efa0 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
1efb0 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
1efc0 71 6c 69 74 65 33 50 72 6e 67 52 65 73 65 74 53  qlite3PrngResetS
1efd0 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
1efe0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
1eff0 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  All(sqlite3*,int
1f000 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1f010 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
1f020 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
1f030 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
1f040 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28  rifyNamedSchema(
1f050 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
1f060 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73  ar *zDb);.void s
1f070 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73  qlite3BeginTrans
1f080 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  action(Parse*, i
1f090 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1f0a0 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69  3CommitTransacti
1f0b0 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  on(Parse*);.void
1f0c0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
1f0d0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
1f0e0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1f0f0 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65  3Savepoint(Parse
1f100 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b  *, int, Token*);
1f110 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f  .void sqlite3Clo
1f120 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c  seSavepoints(sql
1f130 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ite3 *);.void sq
1f140 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41  lite3LeaveMutexA
1f150 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71  ndCloseZombie(sq
1f160 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
1f170 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
1f180 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  nt(Expr*);.int s
1f190 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
1f1a0 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72  tantNotJoin(Expr
1f1b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1f1c0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46  xprIsConstantOrF
1f1d0 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a  unction(Expr*);.
1f1e0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
1f1f0 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20  sInteger(Expr*, 
1f200 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
1f210 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28  e3ExprCanBeNull(
1f220 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f  const Expr*);.vo
1f230 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
1f240 64 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62  deIsNullJump(Vdb
1f250 65 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c  e*, const Expr*,
1f260 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
1f270 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73  sqlite3ExprNeeds
1f280 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  NoAffinityChange
1f290 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68  (const Expr*, ch
1f2a0 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
1f2b0 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68  IsRowid(const ch
1f2c0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
1f2d0 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c  e3GenerateRowDel
1f2e0 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
1f2f0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1f300 74 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e  t, Trigger *, in
1f310 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f320 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78  GenerateRowIndex
1f330 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54  Delete(Parse*, T
1f340 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a  able*, int, int*
1f350 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
1f360 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50  nerateIndexKey(P
1f370 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
1f380 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
1f390 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
1f3a0 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65  ateConstraintChe
1f3b0 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  cks(Parse*,Table
1f3c0 2a 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20  *,int,int,.     
1f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3f0 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
1f400 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64  ,int,int*);.void
1f410 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65   sqlite3Complete
1f420 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a  Insertion(Parse*
1f430 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1f440 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20 69  nt, int*, int, i
1f450 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1f460 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
1f470 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
1f480 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1f490 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f4a0 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
1f4b0 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
1f4c0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1f4d0 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
1f4e0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1f4f0 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
1f500 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1f510 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
1f520 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
1f530 2c 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 45  , char*, int);.E
1f540 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
1f550 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
1f560 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73  r*,int);.ExprLis
1f570 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
1f580 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  stDup(sqlite3*,E
1f590 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53  xprList*,int);.S
1f5a0 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
1f5b0 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  rcListDup(sqlite
1f5c0 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29  3*,SrcList*,int)
1f5d0 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
1f5e0 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74  3IdListDup(sqlit
1f5f0 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65  e3*,IdList*);.Se
1f600 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
1f610 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  ectDup(sqlite3*,
1f620 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f  Select*,int);.vo
1f630 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65  id sqlite3FuncDe
1f640 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48  fInsert(FuncDefH
1f650 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b  ash*, FuncDef*);
1f660 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
1f670 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71  3FindFunction(sq
1f680 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1f690 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38  r*,int,int,u8,u8
1f6a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1f6b0 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75  egisterBuiltinFu
1f6c0 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
1f6d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1f6e0 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46  egisterDateTimeF
1f6f0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
1f700 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
1f710 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69  sterGlobalFuncti
1f720 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ons(void);.int s
1f730 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
1f740 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  kOk(sqlite3*);.i
1f750 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
1f760 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
1f770 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
1f780 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69  lite3ChangeCooki
1f790 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  e(Parse*, int);.
1f7a0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1f7b0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
1f7c0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1f7d0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
1f7e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74  .void sqlite3Mat
1f7f0 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72  erializeView(Par
1f800 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
1f810 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66  r*, int);.#endif
1f820 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
1f830 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
1f840 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
1f850 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  nTrigger(Parse*,
1f860 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69   Token*,Token*,i
1f870 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53  nt,int,IdList*,S
1f880 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  rcList*,.       
1f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8a0 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69      Expr*,int, i
1f8b0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
1f8c0 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72  te3FinishTrigger
1f8d0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
1f8e0 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
1f8f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
1f900 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
1f910 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
1f920 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1f930 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50  DropTriggerPtr(P
1f940 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29  arse*, Trigger*)
1f950 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
1f960 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
1f970 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
1f980 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
1f990 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a  *, int *pMask);.
1f9a0 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
1f9b0 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61  e3TriggerList(Pa
1f9c0 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  rse *, Table *);
1f9d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
1f9e0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61  odeRowTrigger(Pa
1f9f0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  rse*, Trigger *,
1fa00 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
1fa10 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20   int, Table *,. 
1fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa30 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
1fa40 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
1fa50 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
1fa60 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61  TriggerDirect(Pa
1fa70 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a  rse *, Trigger *
1fa80 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
1fa90 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
1faa0 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67  d sqliteViewTrig
1fab0 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62  gers(Parse*, Tab
1fac0 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  le*, Expr*, int,
1fad0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76   ExprList*);.  v
1fae0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
1faf0 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c  eTriggerStep(sql
1fb00 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74  ite3*, TriggerSt
1fb10 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ep*);.  TriggerS
1fb20 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
1fb30 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71  gerSelectStep(sq
1fb40 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b  lite3*,Select*);
1fb50 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1fb60 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e  sqlite3TriggerIn
1fb70 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33  sertStep(sqlite3
1fb80 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  *,Token*, IdList
1fb90 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1fba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbb0 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 4c             ExprL
1fbc0 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 75 38 29  ist*,Select*,u8)
1fbd0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
1fbe0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55  *sqlite3TriggerU
1fbf0 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65  pdateStep(sqlite
1fc00 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  3*,Token*,ExprLi
1fc10 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b  st*, Expr*, u8);
1fc20 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1fc30 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65  sqlite3TriggerDe
1fc40 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  leteStep(sqlite3
1fc50 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29  *,Token*, Expr*)
1fc60 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1fc70 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
1fc80 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a  lite3*, Trigger*
1fc90 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1fca0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
1fcb0 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
1fcc0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
1fcd0 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
1fce0 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50  TriggerColmask(P
1fcf0 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45  arse*,Trigger*,E
1fd00 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74  xprList*,int,int
1fd10 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20  ,Table*,int);.# 
1fd20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
1fd30 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  rseToplevel(p) (
1fd40 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f  (p)->pToplevel ?
1fd50 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20   (p)->pToplevel 
1fd60 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64  : (p)).#else.# d
1fd70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
1fd80 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
1fd90 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
1fda0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
1fdb0 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
1fdc0 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
1fdd0 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
1fde0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
1fdf0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
1fe00 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
1fe10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
1fe20 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
1fe30 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
1fe40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
1fe50 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
1fe60 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
1fe70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1fe80 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
1fe90 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
1fea0 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
1feb0 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
1fec0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
1fed0 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
1fee0 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
1fef0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
1ff00 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
1ff10 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
1ff20 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
1ff30 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
1ff40 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
1ff50 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
1ff60 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
1ff70 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
1ff80 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
1ff90 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
1ffa0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
1ffb0 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
1ffc0 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
1ffd0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
1ffe0 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
1fff0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
20000 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
20010 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
20020 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
20030 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
20040 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
20050 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
20060 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
20070 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
20080 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
20090 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
200a0 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
200b0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
200c0 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
200d0 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
200e0 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
200f0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
20100 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
20110 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
20120 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
20130 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
20140 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
20150 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
20160 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
20170 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
20180 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
20190 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
201a0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
201b0 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
201c0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
201d0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
201e0 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
201f0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
20200 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78  te3FixInit(DbFix
20210 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74  er*, Parse*, int
20220 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
20230 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  onst Token*);.in
20240 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c  t sqlite3FixSrcL
20250 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72  ist(DbFixer*, Sr
20260 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
20270 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62  ite3FixSelect(Db
20280 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  Fixer*, Select*)
20290 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
202a0 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45  Expr(DbFixer*, E
202b0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
202c0 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62  e3FixExprList(Db
202d0 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  Fixer*, ExprList
202e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
202f0 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62  ixTriggerStep(Db
20300 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53  Fixer*, TriggerS
20310 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tep*);.int sqlit
20320 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61  e3AtoF(const cha
20330 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69  r *z, double*, i
20340 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
20350 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e  ite3GetInt32(con
20360 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29  st char *, int*)
20370 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
20380 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  i(const char*);.
20390 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36  int sqlite3Utf16
203a0 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f  ByteLen(const vo
203b0 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  id *pData, int n
203c0 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Char);.int sqlit
203d0 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
203e0 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
203f0 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32   int nByte);.u32
20400 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
20410 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 0a 2f  (const u8**);../
20420 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f  *.** Routines to
20430 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
20440 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
20450 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65  integers.  These
20460 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64   used to.** be d
20470 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20  efined locally, 
20480 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74  but now we use t
20490 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e  he varint routin
204a0 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63  es in the util.c
204b0 0a 2a 2a 20 66 69 6c 65 2e 20 20 43 6f 64 65 20  .** file.  Code 
204c0 73 68 6f 75 6c 64 20 75 73 65 20 74 68 65 20 4d  should use the M
204d0 41 43 52 4f 20 66 6f 72 6d 73 20 62 65 6c 6f 77  ACRO forms below
204e0 2c 20 61 73 20 74 68 65 20 56 61 72 69 6e 74 33  , as the Varint3
204f0 32 20 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 61 72  2 versions.** ar
20500 65 20 63 6f 64 65 64 20 74 6f 20 61 73 73 75 6d  e coded to assum
20510 65 20 74 68 65 20 73 69 6e 67 6c 65 20 62 79 74  e the single byt
20520 65 20 63 61 73 65 20 69 73 20 61 6c 72 65 61 64  e case is alread
20530 79 20 68 61 6e 64 6c 65 64 20 28 77 68 69 63 68  y handled (which
20540 20 0a 2a 2a 20 74 68 65 20 4d 41 43 52 4f 20 66   .** the MACRO f
20550 6f 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69 6e  orm does)..*/.in
20560 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  t sqlite3PutVari
20570 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  nt(unsigned char
20580 2a 2c 20 75 36 34 29 3b 0a 69 6e 74 20 73 71 6c  *, u64);.int sql
20590 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28  ite3PutVarint32(
205a0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
205b0 75 33 32 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  u32);.u8 sqlite3
205c0 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20  GetVarint(const 
205d0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
205e0 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69   u64 *);.u8 sqli
205f0 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63  te3GetVarint32(c
20600 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
20610 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e  ar *, u32 *);.in
20620 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  t sqlite3VarintL
20630 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a  en(u64 v);../*.*
20640 2a 20 54 68 65 20 68 65 61 64 65 72 20 6f 66 20  * The header of 
20650 61 20 72 65 63 6f 72 64 20 63 6f 6e 73 69 73 74  a record consist
20660 73 20 6f 66 20 61 20 73 65 71 75 65 6e 63 65 20  s of a sequence 
20670 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
20680 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65  integers..** The
20690 73 65 20 69 6e 74 65 67 65 72 73 20 61 72 65 20  se integers are 
206a0 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 73 6d  almost always sm
206b0 61 6c 6c 20 61 6e 64 20 61 72 65 20 65 6e 63 6f  all and are enco
206c0 64 65 64 20 61 73 20 61 20 73 69 6e 67 6c 65 20  ded as a single 
206d0 62 79 74 65 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c  byte..** The fol
206e0 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 74 61  lowing macros ta
206f0 6b 65 20 61 64 76 61 6e 74 61 67 65 20 74 68 69  ke advantage thi
20700 73 20 66 61 63 74 20 74 6f 20 70 72 6f 76 69 64  s fact to provid
20710 65 20 61 20 66 61 73 74 20 65 6e 63 6f 64 65 0a  e a fast encode.
20720 2a 2a 20 61 6e 64 20 64 65 63 6f 64 65 20 6f 66  ** and decode of
20730 20 74 68 65 20 69 6e 74 65 67 65 72 73 20 69 6e   the integers in
20740 20 61 20 72 65 63 6f 72 64 20 68 65 61 64 65 72   a record header
20750 2e 20 20 49 74 20 69 73 20 66 61 73 74 65 72 20  .  It is faster 
20760 66 6f 72 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a 2a  for the common.*
20770 2a 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65  * case where the
20780 20 69 6e 74 65 67 65 72 20 69 73 20 61 20 73 69   integer is a si
20790 6e 67 6c 65 20 62 79 74 65 2e 20 20 49 74 20 69  ngle byte.  It i
207a0 73 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77 65  s a little slowe
207b0 72 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 69 6e  r when the.** in
207c0 74 65 67 65 72 20 69 73 20 74 77 6f 20 6f 72 20  teger is two or 
207d0 6d 6f 72 65 20 62 79 74 65 73 2e 20 20 42 75 74  more bytes.  But
207e0 20 6f 76 65 72 61 6c 6c 20 69 74 20 69 73 20 66   overall it is f
207f0 61 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  aster..**.** The
20800 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65   following expre
20810 73 73 69 6f 6e 73 20 61 72 65 20 65 71 75 69 76  ssions are equiv
20820 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  alent:.**.**    
20830 20 78 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56   x = sqlite3GetV
20840 61 72 69 6e 74 33 32 28 20 41 2c 20 26 42 20 29  arint32( A, &B )
20850 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c  ;.**     x = sql
20860 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28  ite3PutVarint32(
20870 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 20   A, B );.**.**  
20880 20 20 20 78 20 3d 20 67 65 74 56 61 72 69 6e 74     x = getVarint
20890 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 20 20  32( A, B );.**  
208a0 20 20 20 78 20 3d 20 70 75 74 56 61 72 69 6e 74     x = putVarint
208b0 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a  32( A, B );.**.*
208c0 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  /.#define getVar
208d0 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
208e0 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30  (u8)((*(A)<(u8)0
208f0 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a  x80)?((B)=(u32)*
20900 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65  (A)),1:sqlite3Ge
20910 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75  tVarint32((A),(u
20920 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66  32 *)&(B))).#def
20930 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28  ine putVarint32(
20940 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
20950 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78  (u32)(B)<(u32)0x
20960 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67  80)?(*(A)=(unsig
20970 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a  ned char)(B)),1:
20980 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61  \.  sqlite3PutVa
20990 72 69 6e 74 33 32 28 28 41 29 2c 28 42 29 29 29  rint32((A),(B)))
209a0 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
209b0 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74  nt    sqlite3Get
209c0 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70  Varint.#define p
209d0 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  utVarint    sqli
209e0 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63  te3PutVarint...c
209f0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
20a00 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53  e3IndexAffinityS
20a10 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78  tr(Vdbe *, Index
20a20 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
20a30 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 53 74  3TableAffinitySt
20a40 72 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20  r(Vdbe *, Table 
20a50 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
20a60 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28  CompareAffinity(
20a70 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
20a80 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c  r aff2);.int sql
20a90 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
20aa0 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c  yOk(Expr *pExpr,
20ab0 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69   char idx_affini
20ac0 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  ty);.char sqlite
20ad0 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78  3ExprAffinity(Ex
20ae0 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
20af0 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f  sqlite3Atoi64(co
20b00 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c  nst char*, i64*,
20b10 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
20b20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c  sqlite3Error(sql
20b30 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
20b40 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f  t char*,...);.vo
20b50 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f  id *sqlite3HexTo
20b60 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63  Blob(sqlite3*, c
20b70 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
20b80 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  t n);.u8 sqlite3
20b90 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b  HexToInt(int h);
20ba0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50  .int sqlite3TwoP
20bb0 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  artName(Parse *,
20bc0 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
20bd0 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 63 6f  *, Token **);.co
20be0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
20bf0 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e  3ErrStr(int);.in
20c00 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
20c10 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73  ema(Parse *pPars
20c20 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
20c30 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
20c40 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c  sqlite3*,u8 enc,
20c50 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74   const char*,int
20c60 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
20c70 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71  te3LocateCollSeq
20c80 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
20c90 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65  const char*zName
20ca0 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
20cb0 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50  te3ExprCollSeq(P
20cc0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
20cd0 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
20ce0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
20cf0 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72  CollateToken(Par
20d00 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
20d10 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72  *, Token*);.Expr
20d20 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
20d30 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61  CollateString(Pa
20d40 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
20d50 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73   char*);.Expr *s
20d60 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
20d70 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e  llate(Expr*);.in
20d80 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f  t sqlite3CheckCo
20d90 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43  llSeq(Parse *, C
20da0 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73  ollSeq *);.int s
20db0 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63  qlite3CheckObjec
20dc0 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63  tName(Parse *, c
20dd0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f  onst char *);.vo
20de0 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  id sqlite3VdbeSe
20df0 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  tChanges(sqlite3
20e00 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
20e10 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36  lite3AddInt64(i6
20e20 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
20e30 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34  ite3SubInt64(i64
20e40 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
20e50 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a  te3MulInt64(i64*
20e60 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
20e70 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b  e3AbsInt32(int);
20e80 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
20e90 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a  NABLE_8_3_NAMES.
20ea0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65  void sqlite3File
20eb0 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68  Suffix3(const ch
20ec0 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c  ar*, char*);.#el
20ed0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
20ee0 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58  te3FileSuffix3(X
20ef0 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71  ,Y).#endif.u8 sq
20f00 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
20f10 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 69 6e  const char *z,in
20f20 74 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20  t);..const void 
20f30 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78  *sqlite3ValueTex
20f40 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t(sqlite3_value*
20f50 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
20f60 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c  e3ValueBytes(sql
20f70 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
20f80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
20f90 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65  lueSetStr(sqlite
20fa0 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63  3_value*, int, c
20fb0 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20  onst void *,u8, 
20fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20fd0 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29           void(*)
20fe0 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73  (void*));.void s
20ff0 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
21000 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
21010 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
21020 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
21030 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72  sqlite3 *);.char
21040 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f   *sqlite3Utf16to
21050 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  8(sqlite3 *, con
21060 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75  st void*, int, u
21070 38 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  8);.#ifdef SQLIT
21080 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 63  E_ENABLE_STAT3.c
21090 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 38  har *sqlite3Utf8
210a0 74 6f 31 36 28 73 71 6c 69 74 65 33 20 2a 2c 20  to16(sqlite3 *, 
210b0 75 38 2c 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c  u8, char *, int,
210c0 20 69 6e 74 20 2a 29 3b 0a 23 65 6e 64 69 66 0a   int *);.#endif.
210d0 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
210e0 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33  FromExpr(sqlite3
210f0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20   *, Expr *, u8, 
21100 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
21110 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e **);.void sqli
21120 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
21130 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61  inity(sqlite3_va
21140 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a  lue *, u8, u8);.
21150 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41  #ifndef SQLITE_A
21160 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65  MALGAMATION.exte
21170 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
21180 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70  d char sqlite3Op
21190 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a  codeProperty[];.
211a0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
211b0 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
211c0 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d  e3UpperToLower[]
211d0 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
211e0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
211f0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a  ite3CtypeMap[];.
21200 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b  extern const Tok
21210 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b  en sqlite3IntTok
21220 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51  ens[];.extern SQ
21230 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20  LITE_WSD struct 
21240 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71  Sqlite3Config sq
21250 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74  lite3Config;.ext
21260 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 46  ern SQLITE_WSD F
21270 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74  uncDefHash sqlit
21280 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  e3GlobalFunction
21290 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  s;.#ifndef SQLIT
212a0 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72  E_OMIT_WSD.exter
212b0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e  n int sqlite3Pen
212c0 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66  dingByte;.#endif
212d0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
212e0 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
212f0 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  d(sqlite3*, int,
21300 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
21310 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28   sqlite3Reindex(
21320 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
21330 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
21340 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69  lite3AlterFuncti
21350 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
21360 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61  sqlite3AlterRena
21370 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  meTable(Parse*, 
21380 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
21390 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
213a0 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73  tToken(const uns
213b0 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e  igned char *, in
213c0 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
213d0 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61  e3NestedParse(Pa
213e0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
213f0 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
21400 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
21410 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71  redStatements(sq
21420 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
21430 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63  ite3CodeSubselec
21440 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  t(Parse *, Expr 
21450 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
21460 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
21470 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Prep(Parse*, Sel
21480 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
21490 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
214a0 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f  MatchSpanName(co
214b0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
214c0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
214d0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
214e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
214f0 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e  solveExprNames(N
21500 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
21510 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
21520 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61  3ResolveSelectNa
21530 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  mes(Parse*, Sele
21540 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
21550 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
21560 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
21570 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
21580 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
21590 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
215a0 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
215b0 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
215c0 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
215d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
215e0 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
215f0 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
21600 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
21610 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
21620 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
21630 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c  SrcList *);.Coll
21640 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
21650 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75  ollSeq(Parse*, u
21660 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f  8, CollSeq *, co
21670 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
21680 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79   sqlite3Affinity
21690 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Type(const char*
216a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
216b0 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54  nalyze(Parse*, T
216c0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
216d0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b  int sqlite3Invok
216e0 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73  eBusyHandler(Bus
216f0 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20  yHandler*);.int 
21700 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71  sqlite3FindDb(sq
21710 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
21720 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
21730 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a  DbName(sqlite3 *
21740 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
21750 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c  .int sqlite3Anal
21760 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33  ysisLoad(sqlite3
21770 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64  *,int iDB);.void
21780 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e   sqlite3DeleteIn
21790 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74  dexSamples(sqlit
217a0 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  e3*,Index*);.voi
217b0 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74  d sqlite3Default
217c0 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a  RowEst(Index*);.
217d0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
217e0 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  sterLikeFunction
217f0 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  s(sqlite3*, int)
21800 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c  ;.int sqlite3IsL
21810 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  ikeFunction(sqli
21820 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c  te3*,Expr*,int*,
21830 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
21840 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46  ite3MinimumFileF
21850 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69 6e  ormat(Parse*, in
21860 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
21870 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
21880 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
21890 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
218a0 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
218b0 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
218c0 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
218d0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
218e0 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
218f0 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 4b 65   *sqlite3IndexKe
21900 79 69 6e 66 6f 28 50 61 72 73 65 20 2a 2c 20 49  yinfo(Parse *, I
21910 6e 64 65 78 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  ndex *);.int sql
21920 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
21930 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
21940 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
21950 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69  , void *, .  voi
21960 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
21970 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
21980 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
21990 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
219a0 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
219b0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
219c0 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
219d0 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46  3_context*),.  F
219e0 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
219f0 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e  Destructor.);.in
21a00 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
21a10 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
21a20 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
21a30 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
21a40 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
21a50 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
21a60 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 63  nit(StrAccum*, c
21a70 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  har*, int, int);
21a80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
21a90 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41  AccumAppend(StrA
21aa0 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ccum*,const char
21ab0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
21ac0 69 74 65 33 41 70 70 65 6e 64 53 70 61 63 65 28  ite3AppendSpace(
21ad0 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a  StrAccum*,int);.
21ae0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72  char *sqlite3Str
21af0 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41  AccumFinish(StrA
21b00 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
21b10 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65  ite3StrAccumRese
21b20 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  t(StrAccum*);.vo
21b30 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
21b40 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44  DestInit(SelectD
21b50 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45  est*,int,int);.E
21b60 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61  xpr *sqlite3Crea
21b70 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c  teColumnExpr(sql
21b80 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20  ite3 *, SrcList 
21b90 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76  *, int, int);..v
21ba0 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
21bb0 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33  pRestart(sqlite3
21bc0 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64  _backup *);.void
21bd0 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70   sqlite3BackupUp
21be0 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63  date(sqlite3_bac
21bf0 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e  kup *, Pgno, con
21c00 73 74 20 75 38 20 2a 29 3b 0a 0a 2f 2a 0a 2a 2a  st u8 *);../*.**
21c10 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
21c20 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65  o the LEMON-gene
21c30 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a  rated parser.*/.
21c40 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72  void *sqlite3Par
21c50 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a  serAlloc(void*(*
21c60 29 28 73 69 7a 65 5f 74 29 29 3b 0a 76 6f 69 64  )(size_t));.void
21c70 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72   sqlite3ParserFr
21c80 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a  ee(void*, void(*
21c90 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
21ca0 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f  sqlite3Parser(vo
21cb0 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c  id*, int, Token,
21cc0 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66   Parse*);.#ifdef
21cd0 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
21ce0 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
21cf0 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
21d00 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
21d10 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
21d20 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
21d30 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
21d40 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
21d50 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
21d60 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
21d70 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
21d80 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
21d90 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
21da0 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
21db0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
21dc0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
21dd0 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
21de0 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
21df0 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
21e00 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
21e10 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
21e20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
21e30 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
21e40 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
21e50 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
21e60 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
21e70 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
21e80 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
21e90 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
21ea0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
21eb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
21ec0 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
21ed0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
21ee0 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
21ef0 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
21f00 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
21f10 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
21f20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
21f30 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
21f40 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
21f50 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
21f60 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
21f70 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73  (X) .#  define s
21f80 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
21f90 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
21fa0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
21fb0 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ist(X).#  define
21fc0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
21fd0 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53  point(X, Y, Z) S
21fe0 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
21ff0 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61  ne sqlite3GetVTa
22000 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62  ble(X,Y)  ((VTab
22010 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20  le*)0).#else.   
22020 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
22030 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64  Clear(sqlite3 *d
22040 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76  b, Table*);.   v
22050 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44  oid sqlite3VtabD
22060 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65  isconnect(sqlite
22070 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29  3 *db, Table *p)
22080 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
22090 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33  VtabSync(sqlite3
220a0 20 2a 64 62 2c 20 63 68 61 72 20 2a 2a 29 3b 0a   *db, char **);.
220b0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
220c0 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74  abRollback(sqlit
220d0 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20  e3 *db);.   int 
220e0 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
220f0 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  t(sqlite3 *db);.
22100 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
22110 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  tabLock(VTable *
22120 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
22130 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61  e3VtabUnlock(VTa
22140 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
22150 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
22160 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b  kList(sqlite3*);
22170 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
22180 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c  tabSavepoint(sql
22190 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  ite3 *, int, int
221a0 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71  );.   VTable *sq
221b0 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73  lite3GetVTable(s
221c0 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
221d0 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ;.#  define sqli
221e0 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
221f0 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73  ) ((db)->nVTrans
22200 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72  >0 && (db)->aVTr
22210 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76  ans==0).#endif.v
22220 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d  oid sqlite3VtabM
22230 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73  akeWritable(Pars
22240 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64  e*,Table*);.void
22250 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
22260 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  nParse(Parse*, T
22270 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
22280 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
22290 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e  d sqlite3VtabFin
222a0 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ishParse(Parse*,
222b0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
222c0 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69  qlite3VtabArgIni
222d0 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
222e0 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78  sqlite3VtabArgEx
222f0 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b  tend(Parse*, Tok
22300 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
22310 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28  3VtabCallCreate(
22320 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
22330 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61  onst char *, cha
22340 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  r **);.int sqlit
22350 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63  e3VtabCallConnec
22360 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  t(Parse*, Table*
22370 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
22380 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71  abCallDestroy(sq
22390 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
223a0 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
223b0 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
223c0 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62  (sqlite3 *, VTab
223d0 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a  le *);.FuncDef *
223e0 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c  sqlite3VtabOverl
223f0 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  oadFunction(sqli
22400 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20  te3 *,FuncDef*, 
22410 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29  int nArg, Expr*)
22420 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
22430 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71  validFunction(sq
22440 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
22450 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
22460 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
22470 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64  VdbeParameterInd
22480 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20  ex(Vdbe*, const 
22490 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
224a0 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72   sqlite3Transfer
224b0 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33  Bindings(sqlite3
224c0 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33  _stmt *, sqlite3
224d0 5f 73 74 6d 74 20 2a 29 3b 0a 69 6e 74 20 73 71  _stmt *);.int sq
224e0 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56  lite3Reprepare(V
224f0 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dbe*);.void sqli
22500 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b  te3ExprListCheck
22510 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45  Length(Parse*, E
22520 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
22530 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  char*);.CollSeq 
22540 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f  *sqlite3BinaryCo
22550 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72  mpareCollSeq(Par
22560 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78  se *, Expr *, Ex
22570 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pr *);.int sqlit
22580 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63  e3TempInMemory(c
22590 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a  onst sqlite3*);.
225a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
225b0 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
225c0 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  me(int);.#ifndef
225d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
225e0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68  .  int sqlite3Ch
225f0 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  eckpoint(sqlite3
22600 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
22610 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20  *, int*);.  int 
22620 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c  sqlite3WalDefaul
22630 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69  tHook(void*,sqli
22640 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
22650 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ,int);.#endif../
22660 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66  * Declarations f
22670 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  or functions in 
22680 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74  fkey.c. All of t
22690 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65  hese are replace
226a0 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61  d by.** no-op ma
226b0 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52  cros if OMIT_FOR
226c0 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69  EIGN_KEY is defi
226d0 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ned. In this cas
226e0 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20  e no foreign.** 
226f0 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  key functionalit
22700 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  y is available. 
22710 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  If OMIT_TRIGGER 
22720 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a  is defined but.*
22730 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  * OMIT_FOREIGN_K
22740 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20  EY is not, only 
22750 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  some of the func
22760 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65  tions are no-ope
22770 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61  d. In.** this ca
22780 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  se foreign keys 
22790 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20  are parsed, but 
227a0 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f  no other functio
227b0 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70 72  nality is .** pr
227c0 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d  ovided (enforcem
227d0 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72  ent of FK constr
227e0 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74  aints requires t
227f0 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d  he triggers sub-
22800 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20  system)..*/.#if 
22810 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
22820 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
22830 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
22840 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
22850 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  R).  void sqlite
22860 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  3FkCheck(Parse*,
22870 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
22880 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
22890 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61  e3FkDropTable(Pa
228a0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  rse*, SrcList *,
228b0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64   Table*);.  void
228c0 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
228d0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
228e0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
228f0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
22900 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65  FkRequired(Parse
22910 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c  *, Table*, int*,
22920 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c   int);.  u32 sql
22930 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61  ite3FkOldmask(Pa
22940 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  rse*, Table*);. 
22950 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b   FKey *sqlite3Fk
22960 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65  References(Table
22970 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
22980 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63  fine sqlite3FkAc
22990 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 29 0a 20  tions(a,b,c,d). 
229a0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
229b0 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 29  FkCheck(a,b,c,d)
229c0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
229d0 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c  e3FkDropTable(a,
229e0 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73  b,c).  #define s
229f0 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
22a00 61 2c 62 29 20 20 20 20 20 20 30 0a 20 20 23 64  a,b)      0.  #d
22a10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52  efine sqlite3FkR
22a20 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29  equired(a,b,c,d)
22a30 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
22a40 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
22a50 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64  REIGN_KEY.  void
22a60 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
22a70 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c  (sqlite3 *, Tabl
22a80 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  e*);.  int sqlit
22a90 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
22aa0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b  Parse*,Table*,FK
22ab0 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a  ey*,Index**,int*
22ac0 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
22ad0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  ine sqlite3FkDel
22ae0 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69  ete(a,b).  #defi
22af0 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  ne sqlite3FkLoca
22b00 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c  teIndex(a,b,c,d,
22b10 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  e).#endif.../*.*
22b20 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c  * Available faul
22b30 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68  t injectors.  Sh
22b40 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64  ould be numbered
22b50 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
22b60 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  0..*/.#define SQ
22b70 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
22b80 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a  OR_MALLOC     0.
22b90 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
22ba0 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55  AULTINJECTOR_COU
22bb0 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  NT      1../*.**
22bc0 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
22bd0 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61  o the code in fa
22be0 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69  ult.c used for i
22bf0 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69  dentifying "beni
22c00 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61  gn".** malloc fa
22c10 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20  ilures. This is 
22c20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20  only present if 
22c30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
22c40 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e  TIN_TEST.** is n
22c50 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23  ot defined..*/.#
22c60 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22c70 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
22c80 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
22c90 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
22ca0 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71  void);.  void sq
22cb0 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
22cc0 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73  lloc(void);.#els
22cd0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
22ce0 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
22cf0 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65  lloc().  #define
22d00 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
22d10 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66  nMalloc().#endif
22d20 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  ..#define IN_IND
22d30 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20  EX_ROWID        
22d40 20 20 20 31 0a 23 64 65 66 69 6e 65 20 49 4e 5f     1.#define IN_
22d50 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
22d60 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65 20        2.#define 
22d70 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
22d80 53 43 20 20 20 20 20 20 20 33 0a 23 64 65 66 69  SC       3.#defi
22d90 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
22da0 58 5f 44 45 53 43 20 20 20 20 20 20 34 0a 69 6e  X_DESC      4.in
22db0 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  t sqlite3FindInI
22dc0 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78  ndex(Parse *, Ex
22dd0 70 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69  pr *, int*);..#i
22de0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
22df0 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a  LE_ATOMIC_WRITE.
22e00 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
22e10 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
22e20 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68  _vfs *, const ch
22e30 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ar *, sqlite3_fi
22e40 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
22e50 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
22e60 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
22e70 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20  3_vfs *);.  int 
22e80 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72  sqlite3JournalCr
22e90 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  eate(sqlite3_fil
22ea0 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  e *);.  int sqli
22eb0 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73  te3JournalExists
22ec0 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70  (sqlite3_file *p
22ed0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
22ee0 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  ne sqlite3Journa
22ef0 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70 56  lSize(pVfs) ((pV
22f00 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20  fs)->szOsFile). 
22f10 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22f20 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29  JournalExists(p)
22f30 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20   1.#endif..void 
22f40 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
22f50 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69  lOpen(sqlite3_fi
22f60 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  le *);.int sqlit
22f70 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65  e3MemJournalSize
22f80 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
22f90 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28  te3IsMemJournal(
22fa0 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
22fb0 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
22fc0 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
22fd0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
22fe0 53 65 74 48 65 69 67 68 74 28 50 61 72 73 65 20  SetHeight(Parse 
22ff0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
23000 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
23010 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
23020 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e  (Select *);.  in
23030 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
23040 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c  ckHeight(Parse*,
23050 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23   int);.#else.  #
23060 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
23070 70 72 53 65 74 48 65 69 67 68 74 28 78 2c 79 29  prSetHeight(x,y)
23080 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
23090 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
230a0 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e  ht(x) 0.  #defin
230b0 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
230c0 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65  ckHeight(x,y).#e
230d0 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65  ndif..u32 sqlite
230e0 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20  3Get4byte(const 
230f0 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
23100 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20  e3Put4byte(u8*, 
23110 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  u32);..#ifdef SQ
23120 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
23130 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64  CK_NOTIFY.  void
23140 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
23150 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  onBlocked(sqlite
23160 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b  3 *, sqlite3 *);
23170 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
23180 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
23190 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
231a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
231b0 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73  nnectionClosed(s
231c0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c  qlite3 *db);.#el
231d0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
231e0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
231f0 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65  ocked(x,y).  #de
23200 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
23210 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78  ectionUnlocked(x
23220 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
23230 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
23240 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  sed(x).#endif..#
23250 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
23260 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
23270 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c  3ParserTrace(FIL
23280 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e  E*, char *);.#en
23290 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68  dif../*.** If th
232a0 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20  e SQLITE_ENABLE 
232b0 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74  IOTRACE exists t
232c0 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hen the global v
232d0 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74  ariable.** sqlit
232e0 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70  e3IoTrace is a p
232f0 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e  ointer to a prin
23300 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20  tf-like routine 
23310 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74  used to.** print
23320 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73   I/O tracing mes
23330 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65  sages. .*/.#ifde
23340 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
23350 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65  IOTRACE.# define
23360 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28   IOTRACE(A)  if(
23370 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
23380 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ){ sqlite3IoTrac
23390 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71  e A; }.  void sq
233a0 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
233b0 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49  Sql(Vdbe*);.SQLI
233c0 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28  TE_EXTERN void (
233d0 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29  *sqlite3IoTrace)
233e0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  (const char*,...
233f0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
23400 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64  e IOTRACE(A).# d
23410 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
23420 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23  eIOTraceSql(X).#
23430 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
23440 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  se routines are 
23450 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
23460 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69  e mem2.c debuggi
23470 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ng memory alloca
23480 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  tor.** only.  Th
23490 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76  ey are used to v
234a0 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65  erify that diffe
234b0 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20  rent "types" of 
234c0 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61  memory.** alloca
234d0 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72  tions are proper
234e0 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68  ly tracked by th
234f0 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20  e system..**.** 
23500 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
23510 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68  etType() sets th
23520 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61  e "type" of an a
23530 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65  llocation to one
23540 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59   of.** the MEMTY
23550 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  PE_* macros defi
23560 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20  ned below.  The 
23570 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62  type must be a b
23580 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61  itmask with.** a
23590 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e   single bit set.
235a0 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
235b0 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
235c0 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
235d0 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20  any of the bits 
235e0 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
235f0 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
23600 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
23610 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
23620 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
23630 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65  ype()..** sqlite
23640 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
23650 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  () is intended f
23660 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73  or use inside as
23670 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
23680 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  s..**.** sqlite3
23690 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29  MemdebugNoType()
236a0 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
236b0 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74   none of the bit
236c0 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
236d0 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
236e0 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
236f0 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
23700 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
23710 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50  tType()..**.** P
23720 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20  erhaps the most 
23730 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20  important point 
23740 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  is the differenc
23750 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50  e between MEMTYP
23760 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45  E_HEAP.** and ME
23770 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e  MTYPE_LOOKASIDE.
23780 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69    If an allocati
23790 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f  on is MEMTYPE_LO
237a0 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65  OKASIDE, that me
237b0 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20  ans.** it might 
237c0 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
237d0 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ted by lookaside
237e0 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c  , except the all
237f0 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74  ocation was.** t
23800 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b  oo large or look
23810 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64  aside was alread
23820 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69  y full.  It is i
23830 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69  mportant to veri
23840 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63  fy.** that alloc
23850 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ations that migh
23860 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69  t have been sati
23870 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  sfied by lookasi
23880 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61  de are not.** pa
23890 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e  ssed back to non
238a0 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
238b0 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73  ) routines.  Ass
238c0 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65  erts such as the
238d0 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76  .** example abov
238e0 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20  e are placed on 
238f0 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64  the non-lookasid
23900 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
23910 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  s to verify.** t
23920 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  his constraint. 
23930 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
23940 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
23950 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
23960 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
23970 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
23980 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
23990 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
239a0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
239b0 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
239c0 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
239d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
239e0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
239f0 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
23a00 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
23a10 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
23a20 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
23a30 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
23a40 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
23a50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
23a60 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
23a70 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
23a80 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23a90 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
23aa0 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
23ab0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
23ac0 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
23ad0 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
23ae0 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
23af0 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
23b00 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
23b10 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
23b20 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
23b30 20 20 30 78 30 32 20 20 2f 2a 20 4d 69 67 68 74    0x02  /* Might
23b40 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61   have been looka
23b50 73 69 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23  side memory */.#
23b60 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53  define MEMTYPE_S
23b70 43 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20  CRATCH    0x04  
23b80 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63  /* Scratch alloc
23b90 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
23ba0 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45  e MEMTYPE_PCACHE
23bb0 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61       0x08  /* Pa
23bc0 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74  ge cache allocat
23bd0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
23be0 4d 45 4d 54 59 50 45 5f 44 42 20 20 20 20 20 20  MEMTYPE_DB      
23bf0 20 20 20 30 78 31 30 20 20 2f 2a 20 55 73 65 73     0x10  /* Uses
23c00 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
23c10 2c 20 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c  , not sqlite_mal
23c20 6c 6f 63 20 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f  loc */..#endif /
23c30 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20  * _SQLITEINT_H_ 
23c40 2a 2f 0a                                         */.